samba-vscan/f-secure vscan-fsav.c, 1.1.2.10, 1.1.2.11

Rainer Link <[email protected]> Sat, 19 May 2007 22:29:34 +0000
Newsgroups gmane.comp.security.virus.openantivirus.cvs
Message-ID <[email protected]>
Update of /cvsroot/openantivirus/samba-vscan/f-secure
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv673/f-secure

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


Index: vscan-fsav.c
===================================================================
RCS file: /cvsroot/openantivirus/samba-vscan/f-secure/Attic/vscan-fsav.c,v
retrieving revision 1.1.2.10
retrieving revision 1.1.2.11
diff -u -d -r1.1.2.10 -r1.1.2.11
--- vscan-fsav.c	10 Apr 2005 15:22:51 -0000	1.1.2.10
+++ vscan-fsav.c	19 May 2007 22:29:32 -0000	1.1.2.11
@@ -107,7 +107,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)
@@ -160,7 +162,12 @@
 
         #if (SAMBA_VERSION_MAJOR==2 && SAMBA_VERSION_RELEASE>=4) || SAMBA_VERSION_MAJOR==3
 
-         fstrcpy(config_file, get_configuration_file(conn, VSCAN_MODULE_STR, PARAMCONF));
+	 #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);
@@ -187,14 +194,18 @@
         /* 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);
         #endif
 }
 
-#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
@@ -207,14 +218,18 @@
 	lrufiles_destroy_all();
 	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);
 #endif
 }
 
-#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
@@ -233,21 +248,30 @@
 
 
 	/* 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);
 
 	/* 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);
 #endif
         }
 
-#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 */ 
+		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 */
                 return SMB_VFS_NEXT_OPEN(handle, conn, fname, flags, mode);
 #else
@@ -255,7 +279,9 @@
                 return default_vfs_ops.open(conn, fname, flags, mode);
 #endif
         else if ( S_ISDIR(stat_buf.st_mode) )   /* is it a directory? */
-#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);
@@ -263,7 +289,9 @@
         else if ( ( stat_buf.st_size > vscan_config.common.max_size ) && ( vscan_config.common.max_size > 0 ) ) /* file is too large */
                 vscan_syslog("INFO: File %s is larger than specified maximum file size! Not scanned!", fname);
         else if ( stat_buf.st_size == 0 ) /* do not scan empty files */
-#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);
@@ -275,7 +303,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);
@@ -308,8 +338,13 @@
 		} else {
 
 			/* get client IP */
+#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 =
@@ -341,7 +376,9 @@
 				fsav_free_handle(fsav);
 
 				/* 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);
@@ -387,7 +424,9 @@
 			} else if (retval == VSCAN_SCAN_VIRUS_FOUND) {
 				fsav_free_handle(fsav);
 				/* 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,
@@ -420,7 +459,9 @@
 		/* close handle */
 		fsav_free_handle(fsav);
 	}
-#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/