summaryrefslogtreecommitdiff
path: root/source4/torture/rpc/spoolss_win.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/torture/rpc/spoolss_win.c')
-rw-r--r--source4/torture/rpc/spoolss_win.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/source4/torture/rpc/spoolss_win.c b/source4/torture/rpc/spoolss_win.c
index d2851cfea1..8856729adc 100644
--- a/source4/torture/rpc/spoolss_win.c
+++ b/source4/torture/rpc/spoolss_win.c
@@ -397,8 +397,9 @@ static bool test_EnumPrinterKey(struct torture_context *tctx,
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)) {
+ torture_assert(tctx, (key_buffer._ndr_size == 0),
+ talloc_asprintf(tctx, "EnumPrinterKey did not return 0 _ndr_size (but %d), windows clients would abort here!", key_buffer._ndr_size));
epk.in.offered = needed;
status = dcerpc_spoolss_EnumPrinterKey(p, tctx, &epk);
torture_assert_ntstatus_ok(tctx, status,
@@ -407,6 +408,10 @@ static bool test_EnumPrinterKey(struct torture_context *tctx,
torture_assert_werr_ok(tctx, epk.out.result, "EnumPrinterKey failed");
+ torture_assert(tctx, (key_buffer._ndr_size * 2 == needed),
+ talloc_asprintf(tctx, "EnumPrinterKey size mismatch, _ndr_size %d (expected %d)",
+ key_buffer._ndr_size, needed/2));
+
ctx->printer_keys = key_buffer.string;
return true;
@@ -550,7 +555,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],