s4-smbtorture: Small fix for RPC-SPOOLSS-WIN to deal with driver-less printers.
authorGünther Deschner <gd@samba.org>
Wed, 8 Apr 2009 11:49:14 +0000 (13:49 +0200)
committerGünther Deschner <gd@samba.org>
Wed, 8 Apr 2009 11:51:26 +0000 (13:51 +0200)
The getdriver query failure should only be critical when there is actually a
driver associated to a printer.

Guenther

source4/torture/rpc/spoolss_win.c

index c50cbfbaee3cb7ab9591978adc40a5ee9154771d..42b69295574e5932d2036008d6439b0951dd5223 100644 (file)
@@ -34,6 +34,8 @@ struct test_spoolss_win_context {
 
        /* EnumPrinterKeys */
        const char **printer_keys;
+
+       bool printer_has_driver;
 };
 
 /* This is a convenience function for all OpenPrinterEx calls */
@@ -256,6 +258,12 @@ static bool test_GetPrinter(struct torture_context *tctx,
        torture_assert_werr_ok(tctx, gp.out.result, "GetPrinter failed");
 
        ctx->current_info = gp.out.info;
+
+       if (level == 2 && gp.out.info) {
+               ctx->printer_has_driver = gp.out.info->info2.drivername &&
+                                         strlen(gp.out.info->info2.drivername);
+       }
+
        return true;
 }
 
@@ -289,6 +297,7 @@ static bool test_EnumJobs(struct torture_context *tctx,
 
 static bool test_GetPrinterDriver2(struct torture_context *tctx,
                                        struct dcerpc_pipe *p,
+                                       struct test_spoolss_win_context *ctx,
                                        struct policy_handle *handle)
 {
        NTSTATUS status;
@@ -313,8 +322,11 @@ static bool test_GetPrinterDriver2(struct torture_context *tctx,
 
        status = dcerpc_spoolss_GetPrinterDriver2(p, tctx, &gpd2);
        torture_assert_ntstatus_ok(tctx, status, "GetPrinterDriver2 failed");
-       torture_assert_werr_ok(tctx, gpd2.out.result,
-                       "GetPrinterDriver2 failed.");
+
+       if (ctx->printer_has_driver) {
+               torture_assert_werr_ok(tctx, gpd2.out.result,
+                               "GetPrinterDriver2 failed.");
+       }
 
        return true;
 }
@@ -527,7 +539,7 @@ static bool test_WinXP(struct torture_context *tctx, struct dcerpc_pipe *p)
        ret &= test_ClosePrinter(tctx, p, &handle04);
 
        ret &= test_EnumPrinters(tctx, p, ctx, 1556);
-       ret &= test_GetPrinterDriver2(tctx, p, &handle03);
+       ret &= test_GetPrinterDriver2(tctx, p, ctx, &handle03);
        ret &= test_EnumForms(tctx, p, &handle03, 0);
 
        ret &= test_EnumPrinterKey(tctx, p, &handle03, "", ctx);