s4-smbtorture: fix test_GetPrinterDriverDirectory.
[kai/samba-autobuild/.git] / source4 / torture / rpc / spoolss.c
index 4a6ff480c47270e800a457a6cf16f42e4a9b5f7b..3c5fcabbd2c93f4576de57acfb0088068ff0d6e1 100644 (file)
@@ -191,6 +191,7 @@ static bool test_GetPrinterDriverDirectory(struct torture_context *tctx,
                }
        };
        int i;
+       uint32_t needed;
 
        for (i=0;i<ARRAY_SIZE(levels);i++) {
                int level = levels[i].level;
@@ -201,6 +202,7 @@ static bool test_GetPrinterDriverDirectory(struct torture_context *tctx,
                r.in.level              = level;
                r.in.buffer             = NULL;
                r.in.offered            = 0;
+               r.out.needed            = &needed;
 
                torture_comment(tctx, "Testing GetPrinterDriverDirectory level %u\n", r.in.level);
 
@@ -210,10 +212,10 @@ static bool test_GetPrinterDriverDirectory(struct torture_context *tctx,
                torture_assert_werr_equal(tctx, r.out.result, WERR_INSUFFICIENT_BUFFER, 
                        "GetPrinterDriverDirectory unexpected return code");
 
-               blob = data_blob_talloc(ctx, NULL, r.out.needed);
+               blob = data_blob_talloc(ctx, NULL, needed);
                data_blob_clear(&blob);
                r.in.buffer = &blob;
-               r.in.offered = r.out.needed;
+               r.in.offered = needed;
 
                status = dcerpc_spoolss_GetPrinterDriverDirectory(p, ctx, &r);
                torture_assert_ntstatus_ok(tctx, status, "dcerpc_spoolss_GetPrinterDriverDirectory failed");
@@ -605,12 +607,14 @@ static bool test_GetPrinter(struct torture_context *tctx,
        struct spoolss_GetPrinter r;
        uint16_t levels[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
        int i;
+       uint32_t needed;
        
        for (i=0;i<ARRAY_SIZE(levels);i++) {
                r.in.handle = handle;
                r.in.level = levels[i];
                r.in.buffer = NULL;
                r.in.offered = 0;
+               r.out.needed = &needed;
 
                torture_comment(tctx, "Testing GetPrinter level %u\n", r.in.level);
 
@@ -618,10 +622,10 @@ static bool test_GetPrinter(struct torture_context *tctx,
                torture_assert_ntstatus_ok(tctx, status, "GetPrinter failed");
                
                if (W_ERROR_EQUAL(r.out.result, WERR_INSUFFICIENT_BUFFER)) {
-                       DATA_BLOB blob = data_blob_talloc(tctx, NULL, r.out.needed);
+                       DATA_BLOB blob = data_blob_talloc(tctx, NULL, needed);
                        data_blob_clear(&blob);
                        r.in.buffer = &blob;
-                       r.in.offered = r.out.needed;
+                       r.in.offered = needed;
                        status = dcerpc_spoolss_GetPrinter(p, tctx, &r);
                }
                
@@ -888,12 +892,14 @@ static bool test_GetJob(struct torture_context *tctx,
 {
        NTSTATUS status;
        struct spoolss_GetJob r;
+       uint32_t needed;
 
        r.in.handle = handle;
        r.in.job_id = job_id;
        r.in.level = 1;
        r.in.buffer = NULL;
        r.in.offered = 0;
+       r.out.needed = &needed;
 
        torture_comment(tctx, "Testing GetJob\n");
 
@@ -901,10 +907,10 @@ static bool test_GetJob(struct torture_context *tctx,
        torture_assert_ntstatus_ok(tctx, status, "GetJob failed");
 
        if (W_ERROR_EQUAL(r.out.result, WERR_INSUFFICIENT_BUFFER)) {
-               DATA_BLOB blob = data_blob_talloc(tctx, NULL, r.out.needed);
+               DATA_BLOB blob = data_blob_talloc(tctx, NULL, needed);
                data_blob_clear(&blob);
                r.in.buffer = &blob;
-               r.in.offered = r.out.needed;
+               r.in.offered = needed;
 
                status = dcerpc_spoolss_GetJob(p, tctx, &r);