diff -Nru dazuko-2.3.6-pre2a/dazuko_linux26.h dazuko-2.3.6-pre2b/dazuko_linux26.h --- dazuko-2.3.6-pre2a/dazuko_linux26.h 2008-02-20 22:05:34.000000000 +0100 +++ dazuko-2.3.6-pre2b/dazuko_linux26.h 2009-02-11 20:56:07.000000000 +0100 @@ -24,7 +24,13 @@ #define DAZUKO_LINUX26_H #include +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) #include +#else +#include +#endif #define DEVICE_NAME "dazuko" diff -Nru dazuko-2.3.6-pre2a/dazuko_redirfs.c dazuko-2.3.6-pre2b/dazuko_redirfs.c --- dazuko-2.3.6-pre2a/dazuko_redirfs.c 2008-07-17 20:00:02.000000000 +0200 +++ dazuko-2.3.6-pre2b/dazuko_redirfs.c 2009-02-11 21:21:12.000000000 +0100 @@ -66,19 +66,19 @@ static int dev_major = -1; static int module_disabled = 0; -enum redirfs_rv dazukoflt_permission(redirfs_context context, struct redirfs_args *args); +enum redirfs_rv dazukoflt_open(redirfs_context context, struct redirfs_args *args); static redirfs_filter dazukoflt; static struct redirfs_filter_info dazukoflt_info = { .owner = THIS_MODULE, .name = "dazukoflt", - .priority = 1, + .priority = 860000000, .active = 1, }; static struct redirfs_op_info dazukoflt_op_info[] = { - { REDIRFS_REG_IOP_PERMISSION, dazukoflt_permission, NULL }, + { REDIRFS_REG_FOP_OPEN, dazukoflt_open, NULL }, { REDIRFS_OP_END, NULL, NULL } }; @@ -593,16 +593,17 @@ { int err = 0; struct redirfs_path_info path_info; + redirfs_path rfs_path; struct nameidata nd; switch (type) { case ADD_INCLUDE_PATH: - path_info.flags = REDIRFS_PATH_INCLUDE | REDIRFS_PATH_ADD; + path_info.flags = REDIRFS_PATH_INCLUDE; break; case ADD_EXCLUDE_PATH: - path_info.flags = REDIRFS_PATH_EXCLUDE | REDIRFS_PATH_ADD; + path_info.flags = REDIRFS_PATH_EXCLUDE; break; default: @@ -614,14 +615,14 @@ path_info.dentry = nd.path.dentry; path_info.mnt = nd.path.mnt; - err = redirfs_set_path(dazukoflt, &path_info); - if (err) - { + rfs_path = redirfs_add_path(dazukoflt, &path_info); + if (IS_ERR(rfs_path)) { xp_print("dazuko: failed to set RedirFS path, err=%d\n", err); err = -1; } path_put(&nd.path); + redirfs_put_path(rfs_path); return err; } @@ -629,7 +630,7 @@ /* system hooks */ -int dazuko_sys_generic(struct inode *inode, int mask, struct nameidata *nd) +int dazuko_sys_generic(struct inode *inode, struct nameidata *nd) { struct dazuko_file_struct *dfs = NULL; int error = 0; @@ -645,34 +646,6 @@ dazuko_bzero(&event_p, sizeof(event_p)); - if ((mask & MAY_EXEC) != 0) - { - event = DAZUKO_ON_EXEC; - daemon_is_allowed = 0; - } - else - { - /* mask == 0 is passed in when a file is created */ - if (mask == 0 || (mask & (MAY_WRITE|MAY_APPEND)) != 0) - { - if ((mask & MAY_READ) != 0) - { - event_p.flags = O_RDWR; - } - else - { - event_p.flags = O_WRONLY; - } - - event_p.set_flags = 1; - } - else if ((mask & MAY_READ) != 0) - { - event_p.flags = O_RDONLY; - event_p.set_flags = 1; - } - } - xp_id.pid = current->pid; xp_id.tgid = current->tgid; xp_id.file = NULL; @@ -721,18 +694,14 @@ return 0; } -enum redirfs_rv dazukoflt_permission(redirfs_context context, struct redirfs_args *args) +enum redirfs_rv dazukoflt_open(redirfs_context context, struct redirfs_args *args) { - if (!args->args.i_permission.nd) - return REDIRFS_CONTINUE; - - if (!args->args.i_permission.mask) - return REDIRFS_CONTINUE; + struct nameidata nd; - if (!args->args.i_permission.nd) - return REDIRFS_CONTINUE; + nd.path.dentry = args->args.f_open.file->f_dentry; + nd.path.mnt = args->args.f_open.file->f_vfsmnt; - if (dazuko_sys_generic(args->args.i_permission.inode, args->args.i_permission.mask, args->args.i_permission.nd) != 0) + if (dazuko_sys_generic(args->args.f_open.file->f_dentry->d_inode, &nd) != 0) { args->rv.rv_int = -EACCES; return REDIRFS_STOP; @@ -759,10 +728,10 @@ { int err; - err = redirfs_register_filter(&dazukoflt, &dazukoflt_info); - if (err) + dazukoflt = redirfs_register_filter(&dazukoflt_info); + if (IS_ERR(dazukoflt)) { - xp_print("dazuko: unable to register with RedirFS, err=%d\n", err); + xp_print("dazuko: unable to register with RedirFS, err=%d\n", PTR_ERR(dazukoflt)); return -1; } @@ -804,20 +773,11 @@ return dev_major; } -#ifndef WITHOUT_UDEV -#ifdef USE_CLASS dazuko_class = class_create(THIS_MODULE, DEVICE_NAME); -#if defined (CLASS_class_device_create_2_6_15) - class_device_create(dazuko_class, NULL, MKDEV(dev_major, 0), NULL, DEVICE_NAME); -#elif defined (CLASS_device_create_2_6_26) +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) device_create(dazuko_class, NULL, MKDEV(dev_major, 0), DEVICE_NAME); #else - class_device_create(dazuko_class, MKDEV(dev_major, 0), NULL, DEVICE_NAME); -#endif -#else - dazuko_class = class_simple_create(THIS_MODULE, DEVICE_NAME); - class_simple_device_add(dazuko_class, MKDEV(dev_major, 0), NULL, DEVICE_NAME); -#endif + device_create(dazuko_class, NULL, MKDEV(dev_major, 0), NULL, DEVICE_NAME); #endif return 0; @@ -826,21 +786,9 @@ inline int xp_sys_unhook() { if (!module_disabled) { - unregister_chrdev(dev_major, DEVICE_NAME); - -#ifndef WITHOUT_UDEV -#ifdef USE_CLASS -#if defined (CLASS_device_create_2_6_26) device_destroy(dazuko_class, MKDEV(dev_major, 0)); -#else - class_device_destroy(dazuko_class, MKDEV(dev_major, 0)); -#endif class_destroy(dazuko_class); -#else - class_simple_device_remove(MKDEV(dev_major, 0)); - class_simple_destroy(dazuko_class); -#endif -#endif + unregister_chrdev(dev_major, DEVICE_NAME); } redirfs_delete_filter(dazukoflt);