summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2008-05-06 11:47:46 -0700
committerJeremy Allison <jra@samba.org>2008-05-06 11:47:46 -0700
commit46f5e9ba87f04cf9fc0e90d485226fce5f6e628c (patch)
tree95b6a010b557e29fa1ddee82bff6b70e6b60ff2a
parent366aa23becaf99867fdc09e4e6cb06aa10b7edac (diff)
downloadsamba-46f5e9ba87f04cf9fc0e90d485226fce5f6e628c.tar.gz
Fix from Martin Zielinski <mz@seh.de>. Don't delete files when
they're in use by other drivers. Jeremy.
-rw-r--r--source/printing/nt_printing.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/source/printing/nt_printing.c b/source/printing/nt_printing.c
index 6908a67699d..949b0250513 100644
--- a/source/printing/nt_printing.c
+++ b/source/printing/nt_printing.c
@@ -4754,10 +4754,15 @@ BOOL printer_driver_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info_3 )
static BOOL drv_file_in_use( char* file, NT_PRINTER_DRIVER_INFO_LEVEL_3 *info )
{
int i = 0;
-
+
if ( !info )
return False;
-
+
+ /* mz: skip files that are in the list but already deleted */
+ if (!file || !file[0]) {
+ return false;
+ }
+
if ( strequal(file, info->driverpath) )
return True;
@@ -4870,6 +4875,12 @@ static BOOL trim_overlap_drv_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *src,
Upon return, *info has been modified to only contain the driver files
which are not in use
+
+ Fix from mz:
+
+ This needs to check all drivers to ensure that all files in use
+ have been removed from *info, not just the ones in the first
+ match.
****************************************************************************/
BOOL printer_driver_files_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info )
@@ -4879,7 +4890,8 @@ BOOL printer_driver_files_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info )
uint32 version;
fstring *list = NULL;
NT_PRINTER_DRIVER_INFO_LEVEL driver;
-
+ BOOL in_use = False;
+
if ( !info )
return False;
@@ -4914,9 +4926,10 @@ BOOL printer_driver_files_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info )
if ( !strequal(info->name, driver.info_3->name) ) {
if ( trim_overlap_drv_files(info, driver.info_3) ) {
- free_a_printer_driver(driver, 3);
- SAFE_FREE( list );
- return True;
+ /* mz: Do not instantly return -
+ * we need to ensure this file isn't
+ * also in use by other drivers. */
+ in_use = True;
}
}
@@ -4932,7 +4945,7 @@ BOOL printer_driver_files_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info )
if ( DEBUGLEVEL >= 20 )
dump_a_printer_driver( driver, 3 );
- return False;
+ return in_use;
}
/****************************************************************************