[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Thu Jun 3 05:24:05 MDT 2010


The branch, master has been updated
       via  6acaa70... s4-smbtorture: add test_PrintProcessors_winreg.
       via  4a10635... s4-smbtorture: refactor test_EnumPrintProcessors().
       via  3948876... s4-smbtorture: only test data up to a length of 9 bytes in test_SetPrinterDataEx_matrix().
      from  614e010... s3: remove authdata.h

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


- Log -----------------------------------------------------------------
commit 6acaa70d6439eb206ab3c6fb1b81f12efc7b5f94
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jun 3 13:01:40 2010 +0200

    s4-smbtorture: add test_PrintProcessors_winreg.
    
    This does cross reference checks between spoolss PrintProcessors and entries
    stored in winreg.
    
    Guenther

commit 4a10635371a794281114e0e227ed174a518792ee
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jun 3 13:01:16 2010 +0200

    s4-smbtorture: refactor test_EnumPrintProcessors().
    
    Guenther

commit 3948876f66955a7b9a657937c0d7926b3578dd3d
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jun 3 11:46:44 2010 +0200

    s4-smbtorture: only test data up to a length of 9 bytes in test_SetPrinterDataEx_matrix().
    
    Guenther

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

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


Changeset truncated at 500 lines:

diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c
index 07b7994..b785ebd 100644
--- a/source4/torture/rpc/spoolss.c
+++ b/source4/torture/rpc/spoolss.c
@@ -787,53 +787,72 @@ static bool test_EnumMonitors(struct torture_context *tctx,
 	return true;
 }
 
+static bool test_EnumPrintProcessors_level(struct torture_context *tctx,
+					   struct dcerpc_binding_handle *b,
+					   const char *environment,
+					   uint32_t level,
+					   uint32_t *count_p,
+					   union spoolss_PrintProcessorInfo **info_p)
+{
+	struct spoolss_EnumPrintProcessors r;
+	DATA_BLOB blob;
+	uint32_t needed;
+	uint32_t count;
+	union spoolss_PrintProcessorInfo *info;
+
+	r.in.servername = "";
+	r.in.environment = environment;
+	r.in.level = level;
+	r.in.buffer = NULL;
+	r.in.offered = 0;
+	r.out.needed = &needed;
+	r.out.count = &count;
+	r.out.info = &info;
+
+	torture_comment(tctx, "Testing EnumPrintProcessors level %u\n", r.in.level);
+
+	torture_assert_ntstatus_ok(tctx,
+		dcerpc_spoolss_EnumPrintProcessors_r(b, tctx, &r),
+		"EnumPrintProcessors failed");
+	if (W_ERROR_EQUAL(r.out.result, WERR_INSUFFICIENT_BUFFER)) {
+		blob = data_blob_talloc_zero(tctx, needed);
+		r.in.buffer = &blob;
+		r.in.offered = needed;
+		torture_assert_ntstatus_ok(tctx,
+			dcerpc_spoolss_EnumPrintProcessors_r(b, tctx, &r),
+			"EnumPrintProcessors failed");
+	}
+	torture_assert_werr_ok(tctx, r.out.result,
+		"EnumPrintProcessors failed");
+
+	CHECK_NEEDED_SIZE_ENUM_LEVEL(spoolss_EnumPrintProcessors, info, level, count, needed, 4);
+
+	if (count_p) {
+		*count_p = count;
+	}
+	if (info_p) {
+		*info_p = info;
+	}
+
+	return true;
+}
+
 static bool test_EnumPrintProcessors(struct torture_context *tctx,
 				     struct dcerpc_binding_handle *b,
 				     struct test_spoolss_context *ctx,
 				     const char *environment)
 {
-	NTSTATUS status;
-	struct spoolss_EnumPrintProcessors r;
 	uint16_t levels[] = { 1 };
 	int i, j;
 
 	for (i=0;i<ARRAY_SIZE(levels);i++) {
 		int level = levels[i];
-		DATA_BLOB blob;
-		uint32_t needed;
-		uint32_t count;
 		union spoolss_PrintProcessorInfo *info;
+		uint32_t count;
 
-		r.in.servername = "";
-		r.in.environment = environment;
-		r.in.level = level;
-		r.in.buffer = NULL;
-		r.in.offered = 0;
-		r.out.needed = &needed;
-		r.out.count = &count;
-		r.out.info = &info;
-
-		torture_comment(tctx, "Testing EnumPrintProcessors level %u\n", r.in.level);
-
-		status = dcerpc_spoolss_EnumPrintProcessors_r(b, ctx, &r);
-		torture_assert_ntstatus_ok(tctx, status, "dcerpc_spoolss_EnumPrintProcessors failed");
-		if (W_ERROR_IS_OK(r.out.result)) {
-			/* TODO: do some more checks here */
-			continue;
-		}
-		torture_assert_werr_equal(tctx, r.out.result, WERR_INSUFFICIENT_BUFFER,
-			"EnumPrintProcessors unexpected return code");
-
-		blob = data_blob_talloc_zero(ctx, needed);
-		r.in.buffer = &blob;
-		r.in.offered = needed;
-
-		status = dcerpc_spoolss_EnumPrintProcessors_r(b, ctx, &r);
-		torture_assert_ntstatus_ok(tctx, status, "dcerpc_spoolss_EnumPrintProcessors failed");
-
-		torture_assert_werr_ok(tctx, r.out.result, "EnumPrintProcessors failed");
-
-		CHECK_NEEDED_SIZE_ENUM_LEVEL(spoolss_EnumPrintProcessors, info, r.in.level, count, needed, 4);
+		torture_assert(tctx,
+			test_EnumPrintProcessors_level(tctx, b, environment, level, &count, &info),
+			"test_EnumPrintProcessors_level failed");
 
 		ctx->print_processor_count[level]	= count;
 		ctx->print_processors[level]		= info;
@@ -4344,6 +4363,47 @@ do {\
 	return true;
 }
 
+static bool test_PrintProcessors(struct torture_context *tctx,
+				 struct dcerpc_binding_handle *b,
+				 struct policy_handle *handle,
+				 const char *environment,
+				 struct dcerpc_binding_handle *winreg_handle,
+				 struct policy_handle *hive_handle)
+{
+	union spoolss_PrintProcessorInfo *info;
+	uint32_t count;
+	int i;
+
+	torture_comment(tctx, "Testing Print Processor Info and winreg consistency\n");
+
+	torture_assert(tctx,
+		test_EnumPrintProcessors_level(tctx, b, environment, 1, &count, &info),
+		"failed to enum print processors level 1");
+
+	for (i=0; i < count; i++) {
+
+		const char *processor_key;
+		struct policy_handle key_handle;
+
+		processor_key = talloc_asprintf(tctx, "%s\\%s\\Print Processors\\%s",
+						TOP_LEVEL_CONTROL_ENVIRONMENTS_KEY,
+						environment,
+						info[i].info1.print_processor_name);
+
+		torture_assert(tctx,
+			test_winreg_OpenKey(tctx, winreg_handle, hive_handle, processor_key, &key_handle), "");
+
+		/* nothing to check in there so far */
+
+		torture_assert(tctx,
+			test_winreg_CloseKey(tctx, winreg_handle, &key_handle), "");
+	}
+
+	torture_comment(tctx, "Print Processor Info and winreg consistency test succeeded\n\n");
+
+	return true;
+}
+
 static bool test_GetPrinterDriver2_level(struct torture_context *tctx,
 					 struct dcerpc_binding_handle *b,
 					 struct policy_handle *handle,
@@ -4736,7 +4796,7 @@ static bool test_SetPrinterDataEx_matrix(struct torture_context *tctx,
 		REG_DWORD,
 		REG_BINARY
 	};
-	const char *str = "abcdefghijklmnopqrstuvwxzy";
+	const char *str = "abcdefghi";
 	int i, t, s;
 
 
@@ -4992,6 +5052,32 @@ static bool test_DriverInfo_winreg(struct torture_context *tctx,
 	return ret;
 }
 
+static bool test_PrintProcessors_winreg(struct torture_context *tctx,
+					struct dcerpc_binding_handle *b,
+					struct policy_handle *handle,
+					const char *environment)
+{
+	struct dcerpc_pipe *p2;
+	bool ret = true;
+	struct policy_handle hive_handle;
+	struct dcerpc_binding_handle *b2;
+
+	torture_assert_ntstatus_ok(tctx,
+		torture_rpc_connection(tctx, &p2, &ndr_table_winreg),
+		"could not open winreg pipe");
+	b2 = p2->binding_handle;
+
+	torture_assert(tctx, test_winreg_OpenHKLM(tctx, b2, &hive_handle), "");
+
+	ret = test_PrintProcessors(tctx, b, handle, environment, b2, &hive_handle);
+
+	test_winreg_CloseKey(tctx, b2, &hive_handle);
+
+	talloc_free(p2);
+
+	return ret;
+}
+
 static bool test_PrinterData_DsSpooler(struct torture_context *tctx,
 				       struct dcerpc_pipe *p,
 				       struct policy_handle *handle,
@@ -6424,6 +6510,10 @@ static bool test_one_printer(struct torture_context *tctx,
 		ret = false;
 	}
 
+	if (!test_PrintProcessors_winreg(tctx, b, handle, environment)) {
+		ret = false;
+	}
+
 	if (!test_PrinterData_DsSpooler(tctx, p, handle, name)) {
 		ret = false;
 	}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list