deldriver fix
authorGerald Carter <jerry@samba.org>
Sat, 9 Nov 2002 14:49:26 +0000 (14:49 +0000)
committerGerald Carter <jerry@samba.org>
Sat, 9 Nov 2002 14:49:26 +0000 (14:49 +0000)
(This used to be commit 78ff2cc34aedaf82d965a71e0c9dfdeb86a90fdd)

source3/include/nt_status.h
source3/rpc_server/srv_spoolss_nt.c
source3/rpcclient/cmd_spoolss.c

index 1c80c5ecdeae7b204ad86cac7c6ea3d20d10ac51..9747f73eb18a465133e6d9854e56bc274813fe24 100644 (file)
@@ -58,5 +58,6 @@ typedef uint32 WERROR;
 #define NT_STATUS_IS_ERR(x) ((NT_STATUS_V(x) & 0xc0000000) == 0xc0000000)
 #define NT_STATUS_EQUAL(x,y) (NT_STATUS_V(x) == NT_STATUS_V(y))
 #define W_ERROR_IS_OK(x) (W_ERROR_V(x) == 0)
+#define W_ERROR_EQUAL(x,y) (W_ERROR_V(x) == W_ERROR_V(y))
 
 #endif
index 5ebefc5ea063e0d1047f5a71029f9f268030c85d..f8262110ce17641f4b92c290c7788c272d765612 100644 (file)
@@ -1908,6 +1908,12 @@ WERROR _spoolss_deleteprinterdriver(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIVER
                                goto done;
                        }
                }
+               /* otherwise it was a failure */
+               else {
+                       status = WERR_UNKNOWN_PRINTER_DRIVER;
+                       goto done;
+               }
+               
        }
        
        if (printer_driver_in_use(info.info_3)) {
index 4b5c6676e88aa71a87fc3ddb0b139791013ab450..83096a363230b10c05113d2c61f4086c4aff4ba1 100644 (file)
@@ -1259,16 +1259,21 @@ static NTSTATUS cmd_spoolss_deletedriver(struct cli_state *cli,
                result = cli_spoolss_deleteprinterdriver(
                        cli, mem_ctx, archi_table[i].long_archi, argv[1]);
 
-               if (!W_ERROR_IS_OK(result)) {
-                       printf ("Failed to remove driver %s for arch [%s] - error 0x%x!\n", 
-                               argv[1], archi_table[i].long_archi, 
-                               W_ERROR_V(result));
-               } else
+               if ( !W_ERROR_IS_OK(result) ) {
+                       if ( !W_ERROR_EQUAL(result, WERR_UNKNOWN_PRINTER_DRIVER) ) {
+                               printf ("Failed to remove driver %s for arch [%s] - error 0x%x!\n", 
+                                       argv[1], archi_table[i].long_archi, 
+                                       W_ERROR_V(result));
+                       }
+               } 
+               else 
+               {
                        printf ("Driver %s removed for arch [%s].\n", argv[1], 
                                archi_table[i].long_archi);
+               }
        }
                
-       return W_ERROR_IS_OK(result) ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
+       return W_ERROR_IS_OK(result) || W_ERROR_EQUAL(result, WERR_UNKNOWN_PRINTER_DRIVER) ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
 }
 
 static NTSTATUS cmd_spoolss_getprintprocdir(struct cli_state *cli,