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 <a...@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 <a...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>
    
    Autobuild-User(master): Jeremy Allison <j...@samba.org>
    Autobuild-Date(master): Tue Dec 20 06:55:45 UTC 2022 on sn-devel-184

commit e3c9bea002d6ea94bcd4dd37670f07f7e4098aff
Author: Andreas Schneider <a...@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 <a...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 34ae731b89f79998b6f3c21965d35b41e4e513da
Author: Andreas Schneider <a...@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 <a...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 0dc5f807690baae002f5c35c920663cc6c3617e0
Author: Andreas Schneider <a...@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 <a...@samba.org>
    Reviewed-by: Jeremy Allison <j...@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

Reply via email to