s4-smbtorture: fix and extend enum printerkey test.
[ira/wip.git] / source4 / torture / rpc / spoolss_win.c
index 2e8113991e908167445a06559f207503c0414b5d..e9ba8b19be98937f0ea1c2582d763e196852eb3c 100644 (file)
@@ -21,7 +21,9 @@
 #include "includes.h"
 #include "torture/rpc/rpc.h"
 #include "librpc/gen_ndr/ndr_spoolss_c.h"
+#include "librpc/gen_ndr/ndr_misc.h"
 #include "ntvfs/ntvfs.h"
+#include "param/param.h"
 
 struct test_spoolss_win_context {
        /* EnumPrinters */
@@ -174,7 +176,7 @@ static bool test_GetPrinterData(struct torture_context *tctx,
        if (W_ERROR_IS_OK(expected_werr)) {
                torture_assert_int_equal(tctx, data.value,
                        expected_value,
-                       "GetPrinterData did not return expected value.");
+                       talloc_asprintf(tctx, "GetPrinterData for %s did not return expected value.", value_name));
        }
        return true;
 }
@@ -382,7 +384,8 @@ static bool test_EnumPrinterKey(struct torture_context *tctx,
        NTSTATUS status;
        struct spoolss_EnumPrinterKey epk;
        uint32_t needed = 0;
-       const char **key_buffer = NULL;
+       union spoolss_KeyNames key_buffer;
+       uint32_t _ndr_size;
 
        torture_comment(tctx, "Testing EnumPrinterKey(%s)\n", key);
 
@@ -391,11 +394,11 @@ static bool test_EnumPrinterKey(struct torture_context *tctx,
        epk.in.offered = 0;
        epk.out.needed = &needed;
        epk.out.key_buffer = &key_buffer;
+       epk.out._ndr_size = &_ndr_size;
 
        status = dcerpc_spoolss_EnumPrinterKey(p, tctx, &epk);
        torture_assert_ntstatus_ok(tctx, status, "EnumPrinterKey failed");
 
-
        if (W_ERROR_EQUAL(epk.out.result, WERR_MORE_DATA)) {
                epk.in.offered = needed;
                status = dcerpc_spoolss_EnumPrinterKey(p, tctx, &epk);
@@ -405,7 +408,7 @@ static bool test_EnumPrinterKey(struct torture_context *tctx,
 
        torture_assert_werr_ok(tctx, epk.out.result, "EnumPrinterKey failed");
 
-       ctx->printer_keys = key_buffer;
+       ctx->printer_keys = key_buffer.string_array;
 
        return true;
 }
@@ -548,7 +551,7 @@ static bool test_WinXP(struct torture_context *tctx, struct dcerpc_pipe *p)
 
        ret &= test_EnumPrinterKey(tctx, p, &handle03, "", ctx);
 
-       for (i=0; ctx->printer_keys[i] != NULL; i++) {
+       for (i=0; ctx->printer_keys && ctx->printer_keys[i] != NULL; i++) {
 
                ret &= test_EnumPrinterKey(tctx, p, &handle03,
                                           ctx->printer_keys[i],