[SCM] Samba Shared Repository - branch v3-2-test updated -
release-3-2-0pre2-2209-g205c352
Jeremy Allison
jra at samba.org
Thu Apr 24 22:02:56 GMT 2008
The branch, v3-2-test has been updated
via 205c352caeb32693a02fcfaeb3f18515719ac373 (commit)
from 3fc1ab210b8772ee9f867499c0b1a7bb4bcdd285 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test
- Log -----------------------------------------------------------------
commit 205c352caeb32693a02fcfaeb3f18515719ac373
Author: Jeremy Allison <jra at samba.org>
Date: Thu Apr 24 15:02:23 2008 -0700
Fix from Martin Zielinski <mz at seh.de>. Don't delete files when
they're in use by other drivers.
Jeremy.
-----------------------------------------------------------------------
Summary of changes:
source/printing/nt_printing.c | 27 ++++++++++++++++++++-------
1 files changed, 20 insertions(+), 7 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source/printing/nt_printing.c b/source/printing/nt_printing.c
index 7b03a32..c31a48c 100644
--- a/source/printing/nt_printing.c
+++ b/source/printing/nt_printing.c
@@ -4992,10 +4992,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;
@@ -5108,6 +5113,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 )
@@ -5117,7 +5128,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;
@@ -5152,9 +5164,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;
}
}
@@ -5170,7 +5183,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;
}
/****************************************************************************
--
Samba Shared Repository
More information about the samba-cvs
mailing list