diff options
author | Jeremy Allison <jra@samba.org> | 2008-05-06 11:47:46 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2008-05-06 11:47:46 -0700 |
commit | 46f5e9ba87f04cf9fc0e90d485226fce5f6e628c (patch) | |
tree | 95b6a010b557e29fa1ddee82bff6b70e6b60ff2a | |
parent | 366aa23becaf99867fdc09e4e6cb06aa10b7edac (diff) | |
download | samba-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.c | 27 |
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; } /**************************************************************************** |