[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Mon Nov 23 04:18:37 MST 2009


The branch, master has been updated
       via  d66b7d8... s4-smbtorture: add tests for spoolss_EnumPrinterKey to RPC-SPOOLSS-PRINTER.
      from  d464151... s3-spoolss: fix spoolss_EnumPrinterKey client and server code.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit d66b7d80d5ae1a0bf2e3d1e6718f569726da7734
Author: Günther Deschner <gd at samba.org>
Date:   Fri Nov 20 16:33:29 2009 +0100

    s4-smbtorture: add tests for spoolss_EnumPrinterKey to RPC-SPOOLSS-PRINTER.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source4/torture/rpc/spoolss.c |   81 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 81 insertions(+), 0 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c
index ddc14f3..2a74131 100644
--- a/source4/torture/rpc/spoolss.c
+++ b/source4/torture/rpc/spoolss.c
@@ -24,7 +24,9 @@
 #include "includes.h"
 #include "torture/torture.h"
 #include "torture/rpc/rpc.h"
+#include "librpc/gen_ndr/ndr_misc.h"
 #include "librpc/gen_ndr/ndr_spoolss_c.h"
+#include "param/param.h"
 
 #define TORTURE_WELLKNOWN_PRINTER	"torture_wkn_printer"
 #define TORTURE_PRINTER			"torture_printer"
@@ -3033,6 +3035,77 @@ static bool test_printer_info(struct torture_context *tctx,
 	return ret;
 }
 
+bool test_printer_keys(struct torture_context *tctx,
+		       struct dcerpc_pipe *p,
+		       struct policy_handle *handle)
+{
+	DATA_BLOB blob;
+	const char **key_array = NULL;
+	int i;
+
+	{
+		struct spoolss_EnumPrinterKey r;
+		uint32_t needed;
+		uint16_t *key_buffer = talloc_zero_array(tctx, uint16_t, 0);
+
+		r.in.handle = handle;
+		r.in.key_name = "";
+		r.in.offered = 0;
+		r.out.key_buffer = key_buffer;
+		r.out.needed = &needed;
+
+		torture_assert_ntstatus_ok(tctx, dcerpc_spoolss_EnumPrinterKey(p, tctx, &r),
+			"failed to call EnumPrinterKey");
+		if (W_ERROR_EQUAL(r.out.result, WERR_MORE_DATA)) {
+			r.in.offered = needed;
+			key_buffer = talloc_zero_array(tctx, uint16_t, needed/2);
+			r.out.key_buffer = key_buffer;
+			torture_assert_ntstatus_ok(tctx, dcerpc_spoolss_EnumPrinterKey(p, tctx, &r),
+				"failed to call EnumPrinterKey");
+		}
+		torture_assert_werr_ok(tctx, r.out.result,
+			"failed to call EnumPrinterKey");
+
+		blob = data_blob_const(key_buffer, needed);
+	}
+
+	{
+		union winreg_Data data;
+		enum ndr_err_code ndr_err;
+		ndr_err = ndr_pull_union_blob(&blob, tctx, lp_iconv_convenience(tctx->lp_ctx),
+					&data, REG_MULTI_SZ,
+					(ndr_pull_flags_fn_t)ndr_pull_winreg_Data);
+		torture_assert_ndr_success(tctx, ndr_err, "failed to pull REG_MULTI_SZ");
+		key_array = data.string_array;
+	}
+
+	for (i=0; key_array[i]; i++) {
+		struct spoolss_EnumPrinterDataEx r;
+		uint32_t count;
+		struct spoolss_PrinterEnumValues *info;
+		uint32_t needed;
+
+		r.in.handle = handle;
+		r.in.key_name = key_array[i];
+		r.in.offered = 0;
+		r.out.count = &count;
+		r.out.info = &info;
+		r.out.needed = &needed;
+
+		torture_assert_ntstatus_ok(tctx, dcerpc_spoolss_EnumPrinterDataEx(p, tctx, &r),
+			"failed to call EnumPrinterDataEx");
+		if (W_ERROR_EQUAL(r.out.result, WERR_MORE_DATA)) {
+			r.in.offered = needed;
+			torture_assert_ntstatus_ok(tctx, dcerpc_spoolss_EnumPrinterDataEx(p, tctx, &r),
+				"failed to call EnumPrinterDataEx");
+		}
+		torture_assert_werr_ok(tctx, r.out.result,
+			"failed to call EnumPrinterDataEx");
+	}
+
+	return true;
+}
+
 static bool test_printer(struct torture_context *tctx,
 			 struct dcerpc_pipe *p)
 {
@@ -3052,6 +3125,10 @@ static bool test_printer(struct torture_context *tctx,
 		ret = false;
 	}
 
+	if (!test_printer_keys(tctx, p, &handle[0])) {
+		ret = false;
+	}
+
 	if (!test_DeletePrinter(tctx, p, &handle[0])) {
 		ret = false;
 	}
@@ -3073,6 +3150,10 @@ static bool test_printer(struct torture_context *tctx,
 		ret = false;
 	}
 
+	if (!test_printer_keys(tctx, p, &handle[1])) {
+		ret = false;
+	}
+
 	if (!test_DeletePrinter(tctx, p, &handle[1])) {
 		ret = false;
 	}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list