s3-spoolss: fix printer_driver_files_in_use() call ordering
[ddiss/samba.git] / source3 / rpc_server / spoolss / srv_spoolss_nt.c
index 8e4ddc0414fc6ce01ac22a9ca6aea2200c451439..ea99d10a4275ad9650a3f4fe06ca2ab512dfd80d 100644 (file)
@@ -2176,16 +2176,19 @@ static WERROR spoolss_dpd_version(TALLOC_CTX *mem_ctx,
        delete_files = r->in.delete_flags
                        & (DPD_DELETE_ALL_FILES | DPD_DELETE_UNUSED_FILES);
 
-       /* fail if any files are in use and DPD_DELETE_ALL_FILES is set */
-
-       if (delete_files &&
-           (r->in.delete_flags & DPD_DELETE_ALL_FILES) &&
-           printer_driver_files_in_use(mem_ctx,
-                                       get_session_info_system(),
-                                       b,
-                                       info)) {
-               status = WERR_PRINTER_DRIVER_IN_USE;
-               goto done;
+       if (delete_files) {
+               bool in_use = printer_driver_files_in_use(mem_ctx,
+                                               get_session_info_system(),
+                                                         b,
+                                                         info);
+               if (in_use && (r->in.delete_flags & DPD_DELETE_ALL_FILES)) {
+                       status = WERR_PRINTER_DRIVER_IN_USE;
+                       goto done;
+               }
+               /*
+                * printer_driver_files_in_use() has trimmed overlapping files
+                * from info so they are not removed on DPD_DELETE_UNUSED_FILES
+                */
        }
 
        status = winreg_del_driver(mem_ctx, b, info, info->version);