Hi,

I am implementing dazuko support for our upcoming avg 8 for
linux/freebsd. I found out that it is faster for me to adjust the
dazuko-2.3.6-pre2 version to work with the latest redirfs 0.6 version,
then to prepare some virtual environment or to patch the linux
kernel.

So here is the patch. It will allow you to run dazuko-2.3.6-pre2 with
the latest linux kernels >= 2.6.25 as the redirfs filter. I am using
it with vanilla kernel 2.6.28. 

How to proceed:

1) download and install the latest redirfs 0.6
   - you can use the following INSTALL file
     http://www.redirfs.org/svn/redirfs/tags/dummyflt-0.3/src/dummyflt/INSTALL

2) download dazuko-2.3.6-pre2.tar.gz
   - http://dazuko.dnsalias.org/files/dazuko-2.3.6-pre2.tar.gz

3) unpack the dazuko-2.3.6-pre2.tar.gz package

4) copy dazuko-2.3.6-pre2_redirfs-0.6.patch into the dazuko-2.3.6-pre2
   directory

5) go to the dazuko-2.3.6-pre2 and apply the patch
   $ patch -p1 < dazuko-2.3.6-pre2_redirfs-0.6.patch

6) copy the Module.symvers file from redirfs source directory into the
   dazuko-2.3.6-pre2

7) configure dazuko
   $ ./configure --enable-redirfs --redirfsdir=<full path to the redirfs source 
directory>

8) compile a load dazuko module
   $ make
   # insmod dazuko.ko

I hope maybe somebody will find this useful.

-FH
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 <linux/module.h>
+#include <linux/version.h>
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
 #include <asm/semaphore.h>
+#else
+#include <linux/semaphore.h>
+#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);
_______________________________________________
Dazuko-devel mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/dazuko-devel

Reply via email to