samba-vscan/nai vscan-mcdaemon.c, 1.1.2.7, 1.1.2.8
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/nai
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv12652/nai
Modified Files:
Tag: VSCAN_0_3
vscan-mcdaemon.c
Log Message:
next round of fixes for Samba 3.0.25 (or later)
Index: vscan-mcdaemon.c
===================================================================
RCS file: /cvsroot/openantivirus/samba-vscan/nai/Attic/vscan-mcdaemon.c,v
retrieving revision 1.1.2.7
retrieving revision 1.1.2.8
diff -u -d -r1.1.2.7 -r1.1.2.8
--- vscan-mcdaemon.c 10 Apr 2005 15:22:53 -0000 1.1.2.7
+++ vscan-mcdaemon.c 20 May 2007 17:23:34 -0000 1.1.2.8
@@ -79,7 +79,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)
@@ -117,7 +119,11 @@
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);
@@ -141,7 +147,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);
@@ -149,7 +157,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)
@@ -161,15 +171,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
static int vscan_open(struct connection_struct *conn, PROTOTYPE_CONST char *fname, int flags, mode_t mode)
@@ -184,7 +197,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);
@@ -192,14 +209,19 @@
if ( !vscan_config.common.scan_on_open ) {
/* we should use vscan_syslog instead of DEBUG here ... */
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
@@ -207,7 +229,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);
@@ -215,7 +239,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);
@@ -227,7 +253,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);
@@ -245,7 +273,11 @@
} else if ( sockfd >= 0 )
{
/* 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);
if ( must_be_checked == VSCAN_LRU_DENY_ACCESS ) {
@@ -269,7 +301,9 @@
vscan_mcdaemon_end(sockfd);
/* 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);
@@ -306,7 +340,9 @@
/* close socket */
vscan_mcdaemon_end(sockfd);
/* 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);
@@ -328,7 +364,9 @@
vscan_mcdaemon_end(sockfd);
}
-#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/