samba-vscan/kaspersky vscan-kavp.c, 1.38.2.6, 1.38.2.7

Rainer Link <[email protected]> Sun, 20 May 2007 17:23:36 +0000
Newsgroups gmane.comp.security.virus.openantivirus.cvs
Message-ID <[email protected]>
Update of /cvsroot/openantivirus/samba-vscan/kaspersky
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv12652/kaspersky

Modified Files:
      Tag: VSCAN_0_3
	vscan-kavp.c 
Log Message:
next round of fixes for Samba 3.0.25 (or later)


Index: vscan-kavp.c
===================================================================
RCS file: /cvsroot/openantivirus/samba-vscan/kaspersky/vscan-kavp.c,v
retrieving revision 1.38.2.6
retrieving revision 1.38.2.7
diff -u -d -r1.38.2.6 -r1.38.2.7
--- vscan-kavp.c	10 Apr 2005 15:22:52 -0000	1.38.2.6
+++ vscan-kavp.c	20 May 2007 17:23:33 -0000	1.38.2.7
@@ -89,7 +89,9 @@
 
 /* Implementation of vfs_ops.  */
 
-#if (SMB_VFS_INTERFACE_VERSION >= 6)
+#if (SMB_VFS_INTERFACE_VERSION >= 21)
+static int vscan_connect(vfs_handle_struct *handle,  const char *svc, const char *user)
+#elif (SMB_VFS_INTERFACE_VERSION >= 6)
 static int vscan_connect(vfs_handle_struct *handle, connection_struct *conn, const char *svc, const char *user)
 #else
 static int vscan_connect(struct connection_struct *conn, PROTOTYPE_CONST char *svc, PROTOTYPE_CONST char *user)
@@ -124,7 +126,13 @@
 	       svc, user);
 
 	#if (SAMBA_VERSION_MAJOR==2 && SAMBA_VERSION_RELEASE>=4) || SAMBA_VERSION_MAJOR==3
+
+	 #if (SMB_VFS_INTERFACE_VERSION >= 21)
+	  fstrcpy(config_file, get_configuration_file(handle->conn, VSCAN_MODULE_STR, PARAMCONF));
+	 #else 
           fstrcpy(config_file, get_configuration_file(conn, VSCAN_MODULE_STR, PARAMCONF));
+	 #endif
+
           DEBUG(3, ("configuration file is: %s\n", config_file));
 
           retval = pm_process(config_file, do_section, do_parameter);
@@ -155,7 +163,9 @@
         /* initialise file regexp */
         fileregexp_init(vscan_config.common.exclude_file_regexp);
 
-	#if (SMB_VFS_INTERFACE_VERSION >= 6)
+	#if (SMB_VFS_INTERFACE_VERSION >= 21)
+	 return SMB_VFS_NEXT_CONNCT(handle, svc, user);	
+	#elif (SMB_VFS_INTERFACE_VERSION >= 6)
 	 return SMB_VFS_NEXT_CONNECT(handle, conn, svc, user);
 	#else
 	 return default_vfs_ops.connect(conn, svc, user);
@@ -163,7 +173,9 @@
 
 }
 
-#if (SMB_VFS_INTERFACE_VERSION >= 6)
+#if (SMB_VFS_INTERFACE_VERSION >= 21)
+static void vscan_disconnect(vfs_handle_struct *handle)
+#elif (SMB_VFS_INTERFACE_VERSION >= 6)
 static void vscan_disconnect(vfs_handle_struct *handle, connection_struct *conn)
 #else/* Samba 3.0 alphaX */
 static void vscan_disconnect(struct connection_struct *conn)
@@ -177,8 +189,9 @@
 	filetype_close();
 
 
-
-#if (SMB_VFS_INTERFACE_VERSION >= 6)
+#if (SMB_VFS_INTERFACE_VERSION >= 21)
+	SMB_VFS_NEXT_DISCONNECT(handle);
+#elif (SMB_VFS_INTERFACE_VERSION >= 6)
 	SMB_VFS_NEXT_DISCONNECT(handle, conn);
 #else
 	default_vfs_ops.disconnect(conn);
@@ -186,7 +199,9 @@
 }
 
 
-#if (SMB_VFS_INTERFACE_VERSION >= 6)
+#if (SMB_VFS_INTERFACE_VERSION >= 21)
+static int vscan_open(vfs_handle_struct *handle,  const char *fname, files_struct *fsp, int flags, mode_t mode)
+#elif (SMB_VFS_INTERFACE_VERSION >= 6)
 static int vscan_open(vfs_handle_struct *handle, connection_struct *conn, const char *fname, int flags, mode_t mode)
 #else
 static int vscan_open(struct connection_struct *conn, PROTOTYPE_CONST char *fname, int flags, mode_t mode)
@@ -200,7 +215,11 @@
 	int rc;
 
 	/* Assemble complete file path */
+#if (SMB_VFS_INTERFACE_VERSION >= 21)
+	pstrcpy(filepath, handle->conn->connectpath);
+#else
 	pstrcpy(filepath, conn->connectpath);
+#endif
 	pstrcat(filepath, "/");
 	pstrcat(filepath, fname);
 
@@ -208,7 +227,9 @@
         /* scan files while opening? */
         if ( !vscan_config.common.scan_on_open ) {
                 DEBUG(3, ("samba-vscan - open: File '%s' not scanned as scan_on_open is not set\n", fname));
-#if (SMB_VFS_INTERFACE_VERSION >= 6)
+#if (SMB_VFS_INTERFACE_VERSION >= 21)
+		return SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
+#elif (SMB_VFS_INTERFACE_VERSION >= 6)
 		return SMB_VFS_NEXT_OPEN(handle, conn, fname, flags, mode);
 #else
                 return default_vfs_ops.open(conn, fname, flags, mode);
@@ -224,7 +245,12 @@
 			vscan_kavp_end();
                         return -1;
 	} else {
-#if (SMB_VFS_INTERFACE_VERSION >= 6)
+#if (SMB_VFS_INTERFACE_VERSION >= 21)
+		if ( (SMB_VFS_NEXT_STAT(handle, fname, &stat_buf)) != 0 ) {    /* an error occured */ 
+			vscan_kavp_end();
+			return SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
+		}
+#elif (SMB_VFS_INTERFACE_VERSION >= 6)
         	if ( (SMB_VFS_NEXT_STAT(handle, conn, fname, &stat_buf)) != 0 ) {    /* an error occured */ 
 			vscan_kavp_end();
 			return SMB_VFS_NEXT_OPEN(handle, conn, fname, flags, mode);
@@ -236,8 +262,10 @@
 		}
 #endif
 		else if ( S_ISDIR(stat_buf.st_mode) ) { 	/* is it a directory? */
-			vscan_kavp_end();
-#if (SMB_VFS_INTERFACE_VERSION >= 6)
+
+#if (SMB_VFS_INTERFACE_VERSION >= 21)
+			return SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
+#elif (SMB_VFS_INTERFACE_VERSION >= 6)
 			return SMB_VFS_NEXT_OPEN(handle, conn, fname, flags, mode);
 #else
 			return default_vfs_ops.open(conn, fname, flags, mode);
@@ -248,7 +276,9 @@
 		}
 		else if ( stat_buf.st_size == 0 ) { /* do not scan empty files */
 			vscan_kavp_end();
-#if (SMB_VFS_INTERFACE_VERSION >= 6)
+#if (SMB_VFS_INTERFACE_VERSION >= 21)
+			return SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
+#elif (SMB_VFS_INTERFACE_VERSION >= 6)
 			return SMB_VFS_NEXT_OPEN(handle, conn, fname, flags, mode);
 #else
 			return default_vfs_ops.open(conn, fname, flags, mode);
@@ -262,7 +292,9 @@
 		else if ( filetype_skipscan(filepath) == VSCAN_FT_SKIP_SCAN ) {
 			if ( vscan_config.common.verbose_file_logging )
 				vscan_syslog("INFO: File '%s' not scanned as file type is on exclude list", filepath);
-#if (SMB_VFS_INTERFACE_VERSION >= 6)
+#if (SMB_VFS_INTERFACE_VERSION >= 21)
+			return SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
+#elif (SMB_VFS_INTERFACE_VERSION >= 6)
 	                return SMB_VFS_NEXT_OPEN(handle, conn, fname, flags, mode);
 #else
         	        return default_vfs_ops.open(conn, fname, flags, mode);
@@ -272,7 +304,11 @@
 		else {
 
 			/* get client IP */
-			safe_strcpy(client_ip, conn->client_address, CLIENT_IP_SIZE -1);
+			#if (SMB_VFS_INTERFACE_VERSION >= 21)
+			 safe_strcpy(client_ip, handle->conn->client_address, CLIENT_IP_SIZE - 1);
+			#else
+			 safe_strcpy(client_ip, conn->client_address, CLIENT_IP_SIZE -1);
+			#endif
 
                         /* must file actually be scanned? */
                         must_be_checked = lrufiles_must_be_checked(filepath, stat_buf.st_mtime);
@@ -297,7 +333,9 @@
 				vscan_kavp_end();
 				
 				/* grant access */
-#if (SMB_VFS_INTERFACE_VERSION >= 6)
+#if (SMB_VFS_INTERFACE_VERSION >= 21)
+				return SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
+#elif (SMB_VFS_INTERFACE_VERSION >= 6)
 				return SMB_VFS_NEXT_OPEN(handle, conn, fname, flags, mode);
 #else
 				return default_vfs_ops.open(conn, fname, flags, mode);
@@ -335,8 +373,10 @@
 				/* close socket */
 				vscan_kavp_end();
 				/* do action ... */
-				
-#if (SMB_VFS_INTERFACE_VERSION >= 6)
+
+#if (SMB_VFS_INTERFACE_VERSION >= 21)
+				rc = vscan_do_infected_file_action(handle, handle->conn, filepath, vscan_config.common.quarantine_dir, vscan_config.common.quarantine_prefix, vscan_config.common.infected_file_action);				
+#elif (SMB_VFS_INTERFACE_VERSION >= 6)
 				rc = vscan_do_infected_file_action(handle, conn, filepath, vscan_config.common.quarantine_dir, vscan_config.common.quarantine_prefix, vscan_config.common.infected_file_action);
 #else
 				rc = vscan_do_infected_file_action(&default_vfs_ops, conn, filepath, vscan_config.common.quarantine_dir, vscan_config.common.quarantine_prefix, vscan_config.common.infected_file_action);
@@ -358,7 +398,9 @@
 		vscan_kavp_end();
 
 	}
-#if (SMB_VFS_INTERFACE_VERSION >= 6)
+#if (SMB_VFS_INTERFACE_VERSION >= 21)
+	return SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
+#elif (SMB_VFS_INTERFACE_VERSION >= 6)
 	return SMB_VFS_NEXT_OPEN(handle, conn, fname, flags, mode);
 #else
 	return default_vfs_ops.open(conn, fname, flags, mode);


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/