[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Tue Dec 20 06:56:01 UTC 2022


The branch, master has been updated
       via  57ff5a33e9f s4:torture: Fix stack variable used out of scope in test_devicemode_full()
       via  e3c9bea002d s4:torture: Pass the dcerpc struct 's' for SetPrinter down to the macro
       via  34ae731b89f s4:torture: Pass the dcerpc struct 'q' for GetPrinter down to the macro
       via  0dc5f807690 s4:torture: Fix stack variable used out of scope in test_devmode_set_level()
      from  5c25e262e7d tests: add a Python test for case insensitive access

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


- Log -----------------------------------------------------------------
commit 57ff5a33e9f4f1ff9677e44e75005e713b0a5607
Author: Andreas Schneider <asn at samba.org>
Date:   Fri Dec 2 09:44:58 2022 +0100

    s4:torture: Fix stack variable used out of scope in test_devicemode_full()
    
    ==17828==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7ffc37790230 at pc 0x7fc37e2a3a11 bp 0x7ffc3778fec0 sp 0x7ffc3778feb8
    READ of size 16 at 0x7ffc37790230 thread T0
        #0 0x7fc37e2a3a10 in ndr_push_spoolss_GetPrinter librpc/gen_ndr/ndr_spoolss.c:27123
        #1 0x7fc380629b30 in dcerpc_binding_handle_call_send ../../librpc/rpc/binding_handle.c:416
        #2 0x7fc38062a132 in dcerpc_binding_handle_call ../../librpc/rpc/binding_handle.c:553
        #3 0x7fc37ed113c9 in dcerpc_spoolss_GetPrinter_r librpc/gen_ndr/ndr_spoolss_c.c:1947
        #4 0x5570ba6c4d03 in test_devicemode_full ../../source4/torture/rpc/spoolss.c:2249
        #5 0x5570ba6e61ea in test_PrinterInfo_DevModes ../../source4/torture/rpc/spoolss.c:2384
        #6 0x5570ba6e61ea in test_PrinterInfo_DevMode ../../source4/torture/rpc/spoolss.c:2488
        #7 0x5570ba6e61ea in test_printer_dm ../../source4/torture/rpc/spoolss.c:9082
        #8 0x7fc37fc7b67d in wrap_test_with_simple_test ../../lib/torture/torture.c:808
        #9 0x7fc37fc7d40b in internal_torture_run_test ../../lib/torture/torture.c:516
        #10 0x7fc37fc7d87c in torture_run_tcase_restricted ../../lib/torture/torture.c:581
        #11 0x7fc37fc7deb2 in torture_run_suite_restricted ../../lib/torture/torture.c:435
        #12 0x5570ba89a65d in run_matching ../../source4/torture/smbtorture.c:95
        #13 0x5570ba89a6e4 in run_matching ../../source4/torture/smbtorture.c:105
        #14 0x5570ba89a6e4 in run_matching ../../source4/torture/smbtorture.c:105
        #15 0x5570ba89b3e4 in torture_run_named_tests ../../source4/torture/smbtorture.c:172
        #16 0x5570ba89f3e0 in main ../../source4/torture/smbtorture.c:750
        #17 0x7fc37c62c5af in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
        #18 0x7fc37c62c678 in __libc_start_main_impl ../csu/libc-start.c:381
        #19 0x5570ba49e824 in _start ../sysdeps/x86_64/start.S:115
    
    Address 0x7ffc37790230 is located in stack of thread T0 at offset 160 in frame
        #0 0x5570ba6c4562 in test_devicemode_full ../../source4/torture/rpc/spoolss.c:2186
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Tue Dec 20 06:55:45 UTC 2022 on sn-devel-184

commit e3c9bea002d6ea94bcd4dd37670f07f7e4098aff
Author: Andreas Schneider <asn at samba.org>
Date:   Fri Dec 2 10:44:16 2022 +0100

    s4:torture: Pass the dcerpc struct 's' for SetPrinter down to the macro
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 34ae731b89f79998b6f3c21965d35b41e4e513da
Author: Andreas Schneider <asn at samba.org>
Date:   Fri Dec 2 09:44:58 2022 +0100

    s4:torture: Pass the dcerpc struct 'q' for GetPrinter down to the macro
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 0dc5f807690baae002f5c35c920663cc6c3617e0
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Dec 1 10:32:00 2022 +0100

    s4:torture: Fix stack variable used out of scope in test_devmode_set_level()
    
    ==12122==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fff494dd900 at pc 0x7fdaebea71e3 bp 0x7fff494dd430 sp 0x7fff494dd428
    READ of size 4 at 0x7fff494dd900 thread T0
        #0 0x7fdaebea71e2 in ndr_push_spoolss_SetPrinterInfo8 librpc/gen_ndr/ndr_spoolss.c:8618
        #1 0x7fdaebea71e2 in ndr_push_spoolss_SetPrinterInfo librpc/gen_ndr/ndr_spoolss.c:8796
        #2 0x7fdaebea7482 in ndr_push_spoolss_SetPrinterInfoCtr librpc/gen_ndr/ndr_spoolss.c:9163
        #3 0x7fdaebea7580 in ndr_push_spoolss_SetPrinter librpc/gen_ndr/ndr_spoolss.c:27000
        #4 0x7fdaee3e1b30 in dcerpc_binding_handle_call_send ../../librpc/rpc/binding_handle.c:416
        #5 0x7fdaee3e2132 in dcerpc_binding_handle_call ../../librpc/rpc/binding_handle.c:553
        #6 0x7fdaecb103fd in dcerpc_spoolss_SetPrinter_r librpc/gen_ndr/ndr_spoolss_c.c:1722
        #7 0x559a7294c2f1 in test_SetPrinter ../../source4/torture/rpc/spoolss.c:1293
        #8 0x559a7297b4d4 in test_devmode_set_level ../../source4/torture/rpc/spoolss.c:2126
        #9 0x559a7299cfa1 in test_PrinterInfo_DevModes ../../source4/torture/rpc/spoolss.c:2344
        #10 0x559a7299cfa1 in test_PrinterInfo_DevMode ../../source4/torture/rpc/spoolss.c:2489
        #11 0x559a7299cfa1 in test_printer_dm ../../source4/torture/rpc/spoolss.c:9083
        #12 0x7fdaeda9867d in wrap_test_with_simple_test ../../lib/torture/torture.c:808
        #13 0x7fdaeda9a40b in internal_torture_run_test ../../lib/torture/torture.c:516
        #14 0x7fdaeda9a87c in torture_run_tcase_restricted ../../lib/torture/torture.c:581
        #15 0x7fdaeda9aeb2 in torture_run_suite_restricted ../../lib/torture/torture.c:435
        #16 0x559a72b51668 in run_matching ../../source4/torture/smbtorture.c:95
        #17 0x559a72b516ef in run_matching ../../source4/torture/smbtorture.c:105
        #18 0x559a72b516ef in run_matching ../../source4/torture/smbtorture.c:105
        #19 0x559a72b523ef in torture_run_named_tests ../../source4/torture/smbtorture.c:172
        #20 0x559a72b563eb in main ../../source4/torture/smbtorture.c:750
        #21 0x7fdaea42c5af in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
        #22 0x7fdaea42c678 in __libc_start_main_impl ../csu/libc-start.c:381
        #23 0x559a72755824 in _start ../sysdeps/x86_64/start.S:115
    
    Address 0x7fff494dd900 is located in stack of thread T0 at offset 32 in frame
        #0 0x559a7297b111 in test_devmode_set_level ../../source4/torture/rpc/spoolss.c:2090
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 source4/torture/rpc/spoolss.c | 257 +++++++++++++++++++++---------------------
 1 file changed, 129 insertions(+), 128 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c
index dd0d4587903..0c71ed0073b 100644
--- a/source4/torture/rpc/spoolss.c
+++ b/source4/torture/rpc/spoolss.c
@@ -1482,7 +1482,8 @@ static bool test_PrinterInfo(struct torture_context *tctx,
 	union spoolss_PrinterInfo info;
 	struct spoolss_DevmodeContainer devmode_ctr;
 	struct sec_desc_buf secdesc_ctr;
-	uint32_t needed;
+	uint32_t needed = 0;
+	DATA_BLOB blob = data_blob_null;
 	bool ret = true;
 	int i;
 
@@ -1580,7 +1581,7 @@ static bool test_PrinterInfo(struct torture_context *tctx,
 	q.out.info = &info;
 	q0 = q;
 
-#define TESTGETCALL(call, r) \
+#define TESTGETCALL(call, r, needed, blob) \
 		r.in.buffer = NULL; \
 		r.in.offered = 0;\
 		r.out.needed = &needed; \
@@ -1592,7 +1593,7 @@ static bool test_PrinterInfo(struct torture_context *tctx,
 			break; \
 		}\
 		if (W_ERROR_EQUAL(r.out.result, WERR_INSUFFICIENT_BUFFER)) {\
-			DATA_BLOB blob = data_blob_talloc_zero(tctx, needed); \
+			blob = data_blob_talloc_zero(tctx, needed); \
 			r.in.buffer = &blob; \
 			r.in.offered = needed; \
 		}\
@@ -1670,149 +1671,149 @@ static bool test_PrinterInfo(struct torture_context *tctx,
 			break; \
 		}
 
-#define TEST_PRINTERINFO_STRING_EXP_ERR(lvl1, field1, lvl2, field2, value, err) do { \
+#define TEST_PRINTERINFO_STRING_EXP_ERR(q, s, needed, blob, lvl1, field1, lvl2, field2, value, err) do { \
 		void *p; \
 		torture_comment(tctx, "field test %d/%s vs %d/%s\n", lvl1, #field1, lvl2, #field2); \
 		q.in.level = lvl1; \
-		TESTGETCALL(GetPrinter, q) \
+		TESTGETCALL(GetPrinter, q, needed, blob) \
 		info_ctr.level = lvl1; \
 		p = (void *)&q.out.info->info ## lvl1; \
 		info_ctr.info.info ## lvl1 = (struct spoolss_SetPrinterInfo ## lvl1 *)p; \
 		info_ctr.info.info ## lvl1->field1 = value;\
 		TESTSETCALL_EXP(SetPrinter, s, err) \
 		info_ctr.info.info ## lvl1->field1 = ""; \
-		TESTGETCALL(GetPrinter, q) \
+		TESTGETCALL(GetPrinter, q, needed, blob) \
 		info_ctr.info.info ## lvl1->field1 = value; \
 		STRING_EQUAL(info_ctr.info.info ## lvl1->field1, value, field1); \
 		q.in.level = lvl2; \
-		TESTGETCALL(GetPrinter, q) \
+		TESTGETCALL(GetPrinter, q, needed, blob) \
 		p = (void *)&q.out.info->info ## lvl2; \
 		info_ctr.info.info ## lvl2 = (struct spoolss_SetPrinterInfo ## lvl2 *)p; \
 		STRING_EQUAL(info_ctr.info.info ## lvl2->field2, value, field2); \
 	} while (0)
 
-#define TEST_PRINTERINFO_STRING(lvl1, field1, lvl2, field2, value) do { \
-	TEST_PRINTERINFO_STRING_EXP_ERR(lvl1, field1, lvl2, field2, value, WERR_OK); \
+#define TEST_PRINTERINFO_STRING(q, s, needed, blob, lvl1, field1, lvl2, field2, value) do { \
+	TEST_PRINTERINFO_STRING_EXP_ERR(q, s, needed, blob, lvl1, field1, lvl2, field2, value, WERR_OK); \
 	} while (0);
 
-#define TEST_PRINTERINFO_INT_EXP(lvl1, field1, lvl2, field2, value, exp_value) do { \
+#define TEST_PRINTERINFO_INT_EXP(q, s, needed, blob, lvl1, field1, lvl2, field2, value, exp_value) do { \
 		void *p; \
 		torture_comment(tctx, "field test %d/%s vs %d/%s\n", lvl1, #field1, lvl2, #field2); \
 		q.in.level = lvl1; \
-		TESTGETCALL(GetPrinter, q) \
+		TESTGETCALL(GetPrinter, q, needed, blob) \
 		info_ctr.level = lvl1; \
 		p = (void *)&q.out.info->info ## lvl1; \
 		info_ctr.info.info ## lvl1 = (struct spoolss_SetPrinterInfo ## lvl1 *)p; \
 		info_ctr.info.info ## lvl1->field1 = value; \
 		TESTSETCALL(SetPrinter, s) \
 		info_ctr.info.info ## lvl1->field1 = 0; \
-		TESTGETCALL(GetPrinter, q) \
+		TESTGETCALL(GetPrinter, q, needed, blob) \
 		p = (void *)&q.out.info->info ## lvl1; \
 		info_ctr.info.info ## lvl1 = (struct spoolss_SetPrinterInfo ## lvl1 *)p; \
 		INT_EQUAL(info_ctr.info.info ## lvl1->field1, exp_value, field1); \
 		q.in.level = lvl2; \
-		TESTGETCALL(GetPrinter, q) \
+		TESTGETCALL(GetPrinter, q, needed, blob) \
 		p = (void *)&q.out.info->info ## lvl2; \
 		info_ctr.info.info ## lvl2 = (struct spoolss_SetPrinterInfo ## lvl2 *)p; \
 		INT_EQUAL(info_ctr.info.info ## lvl2->field2, exp_value, field1); \
 	} while (0)
 
-#define TEST_PRINTERINFO_INT(lvl1, field1, lvl2, field2, value) do { \
-        TEST_PRINTERINFO_INT_EXP(lvl1, field1, lvl2, field2, value, value); \
+#define TEST_PRINTERINFO_INT(q, s, needed, blob, lvl1, field1, lvl2, field2, value) do { \
+        TEST_PRINTERINFO_INT_EXP(q, s, needed, blob, lvl1, field1, lvl2, field2, value, value); \
         } while (0)
 
 	q0.in.level = 0;
-	do { TESTGETCALL(GetPrinter, q0) } while (0);
+	do { TESTGETCALL(GetPrinter, q0, needed, blob) } while (0);
 
-	TEST_PRINTERINFO_STRING(2, comment,  1, comment, "xx2-1 comment");
-	TEST_PRINTERINFO_STRING(2, comment,  2, comment, "xx2-2 comment");
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 2, comment,  1, comment, "xx2-1 comment");
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 2, comment,  2, comment, "xx2-2 comment");
 
 	/* level 0 printername does not stick */
-/*	TEST_PRINTERINFO_STRING(2, printername,  0, printername, "xx2-0 printer"); */
-	TEST_PRINTERINFO_STRING(2, printername,  1, name,	 "xx2-1 printer");
-	TEST_PRINTERINFO_STRING(2, printername,  2, printername, "xx2-2 printer");
-	TEST_PRINTERINFO_STRING(2, printername,  4, printername, "xx2-4 printer");
-	TEST_PRINTERINFO_STRING(2, printername,  5, printername, "xx2-5 printer");
-/*	TEST_PRINTERINFO_STRING(4, printername,  0, printername, "xx4-0 printer"); */
-	TEST_PRINTERINFO_STRING(4, printername,  1, name,	 "xx4-1 printer");
-	TEST_PRINTERINFO_STRING(4, printername,  2, printername, "xx4-2 printer");
-	TEST_PRINTERINFO_STRING(4, printername,  4, printername, "xx4-4 printer");
-	TEST_PRINTERINFO_STRING(4, printername,  5, printername, "xx4-5 printer");
-/*	TEST_PRINTERINFO_STRING(5, printername,  0, printername, "xx5-0 printer"); */
-	TEST_PRINTERINFO_STRING(5, printername,  1, name,	 "xx5-1 printer");
-	TEST_PRINTERINFO_STRING(5, printername,  2, printername, "xx5-2 printer");
-	TEST_PRINTERINFO_STRING(5, printername,  4, printername, "xx5-4 printer");
-	TEST_PRINTERINFO_STRING(5, printername,  5, printername, "xx5-5 printer");
+/*	TEST_PRINTERINFO_STRING(q, s, needed, blob, 2, printername,  0, printername, "xx2-0 printer"); */
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 2, printername,  1, name,	 "xx2-1 printer");
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 2, printername,  2, printername, "xx2-2 printer");
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 2, printername,  4, printername, "xx2-4 printer");
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 2, printername,  5, printername, "xx2-5 printer");
+/*	TEST_PRINTERINFO_STRING(q, s, needed, blob, 4, printername,  0, printername, "xx4-0 printer"); */
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 4, printername,  1, name,	 "xx4-1 printer");
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 4, printername,  2, printername, "xx4-2 printer");
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 4, printername,  4, printername, "xx4-4 printer");
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 4, printername,  5, printername, "xx4-5 printer");
+/*	TEST_PRINTERINFO_STRING(q, s, needed, blob, 5, printername,  0, printername, "xx5-0 printer"); */
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 5, printername,  1, name,	 "xx5-1 printer");
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 5, printername,  2, printername, "xx5-2 printer");
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 5, printername,  4, printername, "xx5-4 printer");
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 5, printername,  5, printername, "xx5-5 printer");
 
 	/* servername can be set but does not stick
-	TEST_PRINTERINFO_STRING(2, servername,  0, servername, "xx2-0 servername");
-	TEST_PRINTERINFO_STRING(2, servername,  2, servername, "xx2-2 servername");
-	TEST_PRINTERINFO_STRING(2, servername,  4, servername, "xx2-4 servername");
+	TEST_PRINTERINFO_STRING(q, 2, servername,  0, servername, "xx2-0 servername");
+	TEST_PRINTERINFO_STRING(q, 2, servername,  2, servername, "xx2-2 servername");
+	TEST_PRINTERINFO_STRING(q, 2, servername,  4, servername, "xx2-4 servername");
 	*/
 
 	/* passing an invalid port will result in WERR_UNKNOWN_PORT */
-	TEST_PRINTERINFO_STRING_EXP_ERR(2, portname,  2, portname, "xx2-2 portname", WERR_UNKNOWN_PORT);
-	TEST_PRINTERINFO_STRING_EXP_ERR(2, portname,  5, portname, "xx2-5 portname", WERR_UNKNOWN_PORT);
-	TEST_PRINTERINFO_STRING_EXP_ERR(5, portname,  2, portname, "xx5-2 portname", WERR_UNKNOWN_PORT);
-	TEST_PRINTERINFO_STRING_EXP_ERR(5, portname,  5, portname, "xx5-5 portname", WERR_UNKNOWN_PORT);
+	TEST_PRINTERINFO_STRING_EXP_ERR(q, s, needed, blob, 2, portname,  2, portname, "xx2-2 portname", WERR_UNKNOWN_PORT);
+	TEST_PRINTERINFO_STRING_EXP_ERR(q, s, needed, blob, 2, portname,  5, portname, "xx2-5 portname", WERR_UNKNOWN_PORT);
+	TEST_PRINTERINFO_STRING_EXP_ERR(q, s, needed, blob, 5, portname,  2, portname, "xx5-2 portname", WERR_UNKNOWN_PORT);
+	TEST_PRINTERINFO_STRING_EXP_ERR(q, s, needed, blob, 5, portname,  5, portname, "xx5-5 portname", WERR_UNKNOWN_PORT);
 
-	TEST_PRINTERINFO_STRING(2, sharename,	2, sharename,	"xx2-2 sharename");
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 2, sharename,	2, sharename,	"xx2-2 sharename");
 	/* passing an invalid driver will result in WERR_UNKNOWN_PRINTER_DRIVER */
-	TEST_PRINTERINFO_STRING_EXP_ERR(2, drivername,	2, drivername,	"xx2-2 drivername", WERR_UNKNOWN_PRINTER_DRIVER);
-	TEST_PRINTERINFO_STRING(2, location,	2, location,	"xx2-2 location");
+	TEST_PRINTERINFO_STRING_EXP_ERR(q, s, needed, blob, 2, drivername,	2, drivername,	"xx2-2 drivername", WERR_UNKNOWN_PRINTER_DRIVER);
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 2, location,	2, location,	"xx2-2 location");
 	/* passing an invalid sepfile will result in WERR_INVALID_SEPARATOR_FILE */
-	TEST_PRINTERINFO_STRING_EXP_ERR(2, sepfile,	2, sepfile,	"xx2-2 sepfile", WERR_INVALID_SEPARATOR_FILE);
+	TEST_PRINTERINFO_STRING_EXP_ERR(q, s, needed, blob, 2, sepfile,	2, sepfile,	"xx2-2 sepfile", WERR_INVALID_SEPARATOR_FILE);
 	/* passing an invalid printprocessor will result in WERR_UNKNOWN_PRINTPROCESSOR */
-	TEST_PRINTERINFO_STRING_EXP_ERR(2, printprocessor, 2, printprocessor, "xx2-2 printprocessor", WERR_UNKNOWN_PRINTPROCESSOR);
-	TEST_PRINTERINFO_STRING(2, datatype,	2, datatype,	"xx2-2 datatype");
-	TEST_PRINTERINFO_STRING(2, parameters,	2, parameters,	"xx2-2 parameters");
+	TEST_PRINTERINFO_STRING_EXP_ERR(q, s, needed, blob, 2, printprocessor, 2, printprocessor, "xx2-2 printprocessor", WERR_UNKNOWN_PRINTPROCESSOR);
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 2, datatype,	2, datatype,	"xx2-2 datatype");
+	TEST_PRINTERINFO_STRING(q, s, needed, blob, 2, parameters,	2, parameters,	"xx2-2 parameters");
 
 	for (i=0; i < ARRAY_SIZE(attribute_list); i++) {
-/*		TEST_PRINTERINFO_INT_EXP(2, attributes, 1, flags,
+/*		TEST_PRINTERINFO_INT_EXP(q, s, needed, blob, 2, attributes, 1, flags,
 			attribute_list[i],
 			(attribute_list[i] | default_attribute)
 			); */
-		TEST_PRINTERINFO_INT_EXP(2, attributes, 2, attributes,
+		TEST_PRINTERINFO_INT_EXP(q, s, needed, blob, 2, attributes, 2, attributes,
 			attribute_list[i],
 			(attribute_list[i] | default_attribute)
 			);
-		TEST_PRINTERINFO_INT_EXP(2, attributes, 4, attributes,
+		TEST_PRINTERINFO_INT_EXP(q, s, needed, blob, 2, attributes, 4, attributes,
 			attribute_list[i],
 			(attribute_list[i] | default_attribute)
 			);
-		TEST_PRINTERINFO_INT_EXP(2, attributes, 5, attributes,
+		TEST_PRINTERINFO_INT_EXP(q, s, needed, blob, 2, attributes, 5, attributes,
 			attribute_list[i],
 			(attribute_list[i] | default_attribute)
 			);
-/*		TEST_PRINTERINFO_INT_EXP(4, attributes, 1, flags,
+/*		TEST_PRINTERINFO_INT_EXP(q, s, needed, blob, 4, attributes, 1, flags,
 			attribute_list[i],
 			(attribute_list[i] | default_attribute)
 			); */
-		TEST_PRINTERINFO_INT_EXP(4, attributes, 2, attributes,
+		TEST_PRINTERINFO_INT_EXP(q, s, needed, blob, 4, attributes, 2, attributes,
 			attribute_list[i],
 			(attribute_list[i] | default_attribute)
 			);
-		TEST_PRINTERINFO_INT_EXP(4, attributes, 4, attributes,
+		TEST_PRINTERINFO_INT_EXP(q, s, needed, blob, 4, attributes, 4, attributes,
 			attribute_list[i],
 			(attribute_list[i] | default_attribute)
 			);
-		TEST_PRINTERINFO_INT_EXP(4, attributes, 5, attributes,
+		TEST_PRINTERINFO_INT_EXP(q, s, needed, blob, 4, attributes, 5, attributes,
 			attribute_list[i],
 			(attribute_list[i] | default_attribute)
 			);
-/*		TEST_PRINTERINFO_INT_EXP(5, attributes, 1, flags,
+/*		TEST_PRINTERINFO_INT_EXP(q, s, needed, blob, 5, attributes, 1, flags,
 			attribute_list[i],
 			(attribute_list[i] | default_attribute)
 			); */
-		TEST_PRINTERINFO_INT_EXP(5, attributes, 2, attributes,
+		TEST_PRINTERINFO_INT_EXP(q, s, needed, blob, 5, attributes, 2, attributes,
 			attribute_list[i],
 			(attribute_list[i] | default_attribute)
 			);
-		TEST_PRINTERINFO_INT_EXP(5, attributes, 4, attributes,
+		TEST_PRINTERINFO_INT_EXP(q, s, needed, blob, 5, attributes, 4, attributes,
 			attribute_list[i],
 			(attribute_list[i] | default_attribute)
 			);
-		TEST_PRINTERINFO_INT_EXP(5, attributes, 5, attributes,
+		TEST_PRINTERINFO_INT_EXP(q, s, needed, blob, 5, attributes, 5, attributes,
 			attribute_list[i],
 			(attribute_list[i] | default_attribute)
 			);
@@ -1820,35 +1821,35 @@ static bool test_PrinterInfo(struct torture_context *tctx,
 
 	for (i=0; i < ARRAY_SIZE(status_list); i++) {
 		/* level 2 sets do not stick
-		TEST_PRINTERINFO_INT(2, status,	0, status, status_list[i]);
-		TEST_PRINTERINFO_INT(2, status,	2, status, status_list[i]);
-		TEST_PRINTERINFO_INT(2, status,	6, status, status_list[i]); */
-		TEST_PRINTERINFO_INT(6, status,	0, status, status_list[i]);
-		TEST_PRINTERINFO_INT(6, status,	2, status, status_list[i]);
-		TEST_PRINTERINFO_INT(6, status,	6, status, status_list[i]);
+		TEST_PRINTERINFO_INT(q, s, needed, blob, 2, status,	0, status, status_list[i]);
+		TEST_PRINTERINFO_INT(q, s, needed, blob, 2, status,	2, status, status_list[i]);
+		TEST_PRINTERINFO_INT(q, s, needed, blob, 2, status,	6, status, status_list[i]); */
+		TEST_PRINTERINFO_INT(q, s, needed, blob, 6, status,	0, status, status_list[i]);
+		TEST_PRINTERINFO_INT(q, s, needed, blob, 6, status,	2, status, status_list[i]);
+		TEST_PRINTERINFO_INT(q, s, needed, blob, 6, status,	6, status, status_list[i]);
 	}
 
 	/* priorities need to be between 0 and 99
 	   passing an invalid priority will result in WERR_INVALID_PRIORITY */
-	TEST_PRINTERINFO_INT(2, priority,	2, priority, 0);
-	TEST_PRINTERINFO_INT(2, priority,	2, priority, 1);
-	TEST_PRINTERINFO_INT(2, priority,	2, priority, 99);
-	/* TEST_PRINTERINFO_INT(2, priority,	2, priority, 100); */
-	TEST_PRINTERINFO_INT(2, defaultpriority,2, defaultpriority, 0);
-	TEST_PRINTERINFO_INT(2, defaultpriority,2, defaultpriority, 1);
-	TEST_PRINTERINFO_INT(2, defaultpriority,2, defaultpriority, 99);
-	/* TEST_PRINTERINFO_INT(2, defaultpriority,2, defaultpriority, 100); */
-
-	TEST_PRINTERINFO_INT(2, starttime,	2, starttime, __LINE__);
-	TEST_PRINTERINFO_INT(2, untiltime,	2, untiltime, __LINE__);
+	TEST_PRINTERINFO_INT(q, s, needed, blob, 2, priority,	2, priority, 0);
+	TEST_PRINTERINFO_INT(q, s, needed, blob, 2, priority,	2, priority, 1);
+	TEST_PRINTERINFO_INT(q, s, needed, blob, 2, priority,	2, priority, 99);
+	/* TEST_PRINTERINFO_INT(q, s, needed, blob, 2, priority,	2, priority, 100); */
+	TEST_PRINTERINFO_INT(q, s, needed, blob, 2, defaultpriority,2, defaultpriority, 0);
+	TEST_PRINTERINFO_INT(q, s, needed, blob, 2, defaultpriority,2, defaultpriority, 1);
+	TEST_PRINTERINFO_INT(q, s, needed, blob, 2, defaultpriority,2, defaultpriority, 99);
+	/* TEST_PRINTERINFO_INT(q, s, needed, blob, 2, defaultpriority,2, defaultpriority, 100); */
+
+	TEST_PRINTERINFO_INT(q, s, needed, blob, 2, starttime,	2, starttime, __LINE__);
+	TEST_PRINTERINFO_INT(q, s, needed, blob, 2, untiltime,	2, untiltime, __LINE__);
 
 	/* does not stick
-	TEST_PRINTERINFO_INT(2, cjobs,		2, cjobs, __LINE__);
-	TEST_PRINTERINFO_INT(2, averageppm,	2, averageppm, __LINE__); */
+	TEST_PRINTERINFO_INT(q, s, needed, blob, 2, cjobs,		2, cjobs, __LINE__);
+	TEST_PRINTERINFO_INT(q, s, needed, blob, 2, averageppm,	2, averageppm, __LINE__); */
 
 	/* does not stick
-	TEST_PRINTERINFO_INT(5, device_not_selected_timeout, 5, device_not_selected_timeout, __LINE__);
-	TEST_PRINTERINFO_INT(5, transmission_retry_timeout, 5, transmission_retry_timeout, __LINE__); */
+	TEST_PRINTERINFO_INT(q, s, needed, blob, 5, device_not_selected_timeout, 5, device_not_selected_timeout, __LINE__);
+	TEST_PRINTERINFO_INT(q, s, needed, blob, 5, transmission_retry_timeout, 5, transmission_retry_timeout, __LINE__); */
 
 	/* FIXME: gd also test devmode and secdesc behavior */
 
@@ -1858,12 +1859,12 @@ static bool test_PrinterInfo(struct torture_context *tctx,
 		const char *tmp;
 
 		q0.in.level = 1;
-		do { TESTGETCALL(GetPrinter, q0) } while (0);
+		do { TESTGETCALL(GetPrinter, q0, needed, blob) } while (0);
 
 		description = talloc_strdup(tctx, q0.out.info->info1.description);
 
 		q0.in.level = 2;
-		do { TESTGETCALL(GetPrinter, q0) } while (0);
+		do { TESTGETCALL(GetPrinter, q0, needed, blob) } while (0);
 
 		tmp = talloc_asprintf(tctx, "%s,%s,%s",
 			q0.out.info->info2.printername,
@@ -2088,6 +2089,7 @@ static bool test_devmode_set_level(struct torture_context *tctx,
 				   uint32_t level,
 				   struct spoolss_DeviceMode *devmode)
 {
+	struct spoolss_SetPrinterInfo8 info8;
 	struct spoolss_SetPrinterInfoCtr info_ctr;
 	struct spoolss_DevmodeContainer devmode_ctr;
 	struct sec_desc_buf secdesc_ctr;
@@ -2108,8 +2110,6 @@ static bool test_devmode_set_level(struct torture_context *tctx,
 		break;
 	}
 	case 8: {
-		struct spoolss_SetPrinterInfo8 info8;
-
 		info8.devmode_ptr = 0;
 
 		info_ctr.level = 8;
@@ -2192,14 +2192,15 @@ static bool test_devicemode_full(struct torture_context *tctx,
 	union spoolss_PrinterInfo info;
 	struct spoolss_DevmodeContainer devmode_ctr;
 	struct sec_desc_buf secdesc_ctr;
-	uint32_t needed;
+	uint32_t needed = 0;
+	DATA_BLOB blob = data_blob_null;
 	bool ret = true;
 	NTSTATUS status;
 
-#define TEST_DEVMODE_INT_EXP_RESULT(lvl1, field1, lvl2, field2, value, exp_value, expected_result) do { \
+#define TEST_DEVMODE_INT_EXP_RESULT(q, s, needed, blob, lvl1, field1, lvl2, field2, value, exp_value, expected_result) do { \
 		torture_comment(tctx, "field test %d/%s vs %d/%s\n", lvl1, #field1, lvl2, #field2); \
 		q.in.level = lvl1; \
-		TESTGETCALL(GetPrinter, q) \
+		TESTGETCALL(GetPrinter, q, needed, blob) \
 		info_ctr.level = lvl1; \
 		if (lvl1 == 2) {\
 			void *p = (void *)&q.out.info->info ## lvl1; \
@@ -2211,20 +2212,20 @@ static bool test_devicemode_full(struct torture_context *tctx,
 		devmode_ctr.devmode->field1 = value; \
 		TESTSETCALL_EXP(SetPrinter, s, expected_result) \
 		if (W_ERROR_IS_OK(expected_result)) { \
-			TESTGETCALL(GetPrinter, q) \
+			TESTGETCALL(GetPrinter, q, needed, blob) \
 			INT_EQUAL(q.out.info->info ## lvl1.devmode->field1, exp_value, field1); \
 			q.in.level = lvl2; \
-			TESTGETCALL(GetPrinter, q) \
+			TESTGETCALL(GetPrinter, q, needed, blob) \
 			INT_EQUAL(q.out.info->info ## lvl2.devmode->field2, exp_value, field1); \
 		}\
 	} while (0)
 
-#define TEST_DEVMODE_INT_EXP(lvl1, field1, lvl2, field2, value, expected_result) do { \
-        TEST_DEVMODE_INT_EXP_RESULT(lvl1, field1, lvl2, field2, value, value, expected_result); \
+#define TEST_DEVMODE_INT_EXP(q, s, needed, blob, lvl1, field1, lvl2, field2, value, expected_result) do { \
+        TEST_DEVMODE_INT_EXP_RESULT(q, s, needed, blob, lvl1, field1, lvl2, field2, value, value, expected_result); \
         } while (0)
 
-#define TEST_DEVMODE_INT(lvl1, field1, lvl2, field2, value) do { \
-        TEST_DEVMODE_INT_EXP_RESULT(lvl1, field1, lvl2, field2, value, value, WERR_OK); \
+#define TEST_DEVMODE_INT(q, s, needed, blob, lvl1, field1, lvl2, field2, value) do { \
+        TEST_DEVMODE_INT_EXP_RESULT(q, s, needed, blob, lvl1, field1, lvl2, field2, value, value, WERR_OK); \
         } while (0)
 
 	ZERO_STRUCT(devmode_ctr);
@@ -2247,50 +2248,50 @@ static bool test_devicemode_full(struct torture_context *tctx,
 	uint16_t __driverextra_length;/* [value(r->driverextra_data.length)] */
 	uint32_t fields;
 #endif
-	TEST_DEVMODE_INT_EXP(8, size,		8, size, __LINE__, WERR_INVALID_PARAMETER);
-	TEST_DEVMODE_INT_EXP(8, size,		8, size, 0, WERR_INVALID_PARAMETER);
-	TEST_DEVMODE_INT_EXP(8, size,		8, size, 0xffff, WERR_INVALID_PARAMETER);
-	TEST_DEVMODE_INT_EXP(8, size,		8, size, ndr_size_spoolss_DeviceMode(devmode_ctr.devmode, 0), (devmode_ctr.devmode->__driverextra_length > 0 ) ? WERR_INVALID_PARAMETER : WERR_OK);
-	TEST_DEVMODE_INT(8, size,		8, size, ndr_size_spoolss_DeviceMode(devmode_ctr.devmode, 0) - devmode_ctr.devmode->__driverextra_length);
+	TEST_DEVMODE_INT_EXP(q, s, needed, blob, 8, size,		8, size, __LINE__, WERR_INVALID_PARAMETER);
+	TEST_DEVMODE_INT_EXP(q, s, needed, blob, 8, size,		8, size, 0, WERR_INVALID_PARAMETER);
+	TEST_DEVMODE_INT_EXP(q, s, needed, blob, 8, size,		8, size, 0xffff, WERR_INVALID_PARAMETER);
+	TEST_DEVMODE_INT_EXP(q, s, needed, blob, 8, size,		8, size, ndr_size_spoolss_DeviceMode(devmode_ctr.devmode, 0), (devmode_ctr.devmode->__driverextra_length > 0 ) ? WERR_INVALID_PARAMETER : WERR_OK);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, size,		8, size, ndr_size_spoolss_DeviceMode(devmode_ctr.devmode, 0) - devmode_ctr.devmode->__driverextra_length);
 
 	devmode_ctr.devmode->driverextra_data = data_blob_string_const("foobar");
 	torture_assert(tctx,
 		test_devmode_set_level(tctx, b, handle, 8, devmode_ctr.devmode),
 		"failed to set devmode");
 
-	TEST_DEVMODE_INT_EXP(8, size,		8, size, ndr_size_spoolss_DeviceMode(devmode_ctr.devmode, 0), (devmode_ctr.devmode->__driverextra_length > 0 ) ? WERR_INVALID_PARAMETER : WERR_OK);
-	TEST_DEVMODE_INT(8, size,		8, size, ndr_size_spoolss_DeviceMode(devmode_ctr.devmode, 0) - devmode_ctr.devmode->__driverextra_length);
-
-	TEST_DEVMODE_INT(8, orientation,	8, orientation, __LINE__);
-	TEST_DEVMODE_INT(8, papersize,		8, papersize, __LINE__);
-	TEST_DEVMODE_INT(8, paperlength,	8, paperlength, __LINE__);
-	TEST_DEVMODE_INT(8, paperwidth,		8, paperwidth, __LINE__);
-	TEST_DEVMODE_INT(8, scale,		8, scale, __LINE__);
-	TEST_DEVMODE_INT(8, copies,		8, copies, __LINE__);
-	TEST_DEVMODE_INT(8, defaultsource,	8, defaultsource, __LINE__);
-	TEST_DEVMODE_INT(8, printquality,	8, printquality, __LINE__);
-	TEST_DEVMODE_INT(8, color,		8, color, __LINE__);
-	TEST_DEVMODE_INT(8, duplex,		8, duplex, __LINE__);
-	TEST_DEVMODE_INT(8, yresolution,	8, yresolution, __LINE__);
-	TEST_DEVMODE_INT(8, ttoption,		8, ttoption, __LINE__);
-	TEST_DEVMODE_INT(8, collate,		8, collate, __LINE__);
+	TEST_DEVMODE_INT_EXP(q, s, needed, blob, 8, size,		8, size, ndr_size_spoolss_DeviceMode(devmode_ctr.devmode, 0), (devmode_ctr.devmode->__driverextra_length > 0 ) ? WERR_INVALID_PARAMETER : WERR_OK);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, size,		8, size, ndr_size_spoolss_DeviceMode(devmode_ctr.devmode, 0) - devmode_ctr.devmode->__driverextra_length);
+
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, orientation,	8, orientation, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, papersize,		8, papersize, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, paperlength,	8, paperlength, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, paperwidth,		8, paperwidth, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, scale,		8, scale, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, copies,		8, copies, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, defaultsource,	8, defaultsource, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, printquality,	8, printquality, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, color,		8, color, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, duplex,		8, duplex, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, yresolution,	8, yresolution, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, ttoption,		8, ttoption, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, collate,		8, collate, __LINE__);
 #if 0
 	const char *formname;/* [charset(UTF16)] */
 #endif
-	TEST_DEVMODE_INT(8, logpixels,		8, logpixels, __LINE__);
-	TEST_DEVMODE_INT(8, bitsperpel,		8, bitsperpel, __LINE__);
-	TEST_DEVMODE_INT(8, pelswidth,		8, pelswidth, __LINE__);
-	TEST_DEVMODE_INT(8, pelsheight,		8, pelsheight, __LINE__);
-	TEST_DEVMODE_INT(8, displayflags,	8, displayflags, __LINE__);
-	TEST_DEVMODE_INT(8, displayfrequency,	8, displayfrequency, __LINE__);
-	TEST_DEVMODE_INT(8, icmmethod,		8, icmmethod, __LINE__);
-	TEST_DEVMODE_INT(8, icmintent,		8, icmintent, __LINE__);
-	TEST_DEVMODE_INT(8, mediatype,		8, mediatype, __LINE__);
-	TEST_DEVMODE_INT(8, dithertype,		8, dithertype, __LINE__);
-	TEST_DEVMODE_INT(8, reserved1,		8, reserved1, __LINE__);
-	TEST_DEVMODE_INT(8, reserved2,		8, reserved2, __LINE__);
-	TEST_DEVMODE_INT(8, panningwidth,	8, panningwidth, __LINE__);
-	TEST_DEVMODE_INT(8, panningheight,	8, panningheight, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, logpixels,		8, logpixels, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, bitsperpel,		8, bitsperpel, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, pelswidth,		8, pelswidth, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, pelsheight,		8, pelsheight, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, displayflags,	8, displayflags, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, displayfrequency,	8, displayfrequency, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, icmmethod,		8, icmmethod, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, icmintent,		8, icmintent, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, mediatype,		8, mediatype, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, dithertype,		8, dithertype, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, reserved1,		8, reserved1, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, reserved2,		8, reserved2, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, panningwidth,	8, panningwidth, __LINE__);
+	TEST_DEVMODE_INT(q, s, needed, blob, 8, panningheight,	8, panningheight, __LINE__);
 
 	return ret;
 }


-- 
Samba Shared Repository



More information about the samba-cvs mailing list