From: Rainer L. <re...@us...> - 2007-05-20 17:23:34
|
Update of /cvsroot/openantivirus/samba-vscan/trend In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv12652/trend Modified Files: Tag: VSCAN_0_3 vscan-trend.c Log Message: next round of fixes for Samba 3.0.25 (or later) Index: vscan-trend.c =================================================================== RCS file: /cvsroot/openantivirus/samba-vscan/trend/vscan-trend.c,v retrieving revision 1.47.2.8 retrieving revision 1.47.2.9 diff -u -d -r1.47.2.8 -r1.47.2.9 --- vscan-trend.c 10 Apr 2005 15:22:54 -0000 1.47.2.8 +++ vscan-trend.c 20 May 2007 17:23:34 -0000 1.47.2.9 @@ -82,7 +82,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) @@ -118,7 +120,11 @@ #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); @@ -143,7 +149,10 @@ DEBUG(5, ("init file regexp\n")); 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); @@ -151,7 +160,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) @@ -163,7 +174,9 @@ 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); @@ -171,7 +184,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) @@ -187,7 +202,11 @@ /* 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); @@ -195,14 +214,19 @@ /* 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 @@ -210,7 +234,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); @@ -218,7 +244,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); @@ -230,7 +258,9 @@ else if ( filetype_skipscan(filepath) == VSCAN_FT_SKIP_SCAN ) { if ( verbose_file_logging ) vscan_syslog("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); @@ -248,7 +278,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); @@ -273,7 +307,9 @@ vscan_trend_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); @@ -311,8 +347,11 @@ vscan_trend_end(sockfd); /* do action ... */ + +#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); -#if (SMB_VFS_INTERFACE_VERSION >= 6) +#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); @@ -334,7 +373,9 @@ vscan_trend_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); |