From ea7442720fbde39817abf9a6f312a940d634e6d8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?G=C3=BCnther=20Deschner?= Date: Tue, 15 Dec 2009 22:26:39 +0100 Subject: [PATCH] s4-smbtorture: run GetPrinterDriver2 tests against each printer's driver. Guenther (cherry picked from commit 308b50a7bb07a7db6d2119f9ff08f33fce922562) --- source4/torture/rpc/spoolss.c | 62 +++++++++++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 17 deletions(-) diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c index 772ca09f134..91364541d0c 100644 --- a/source4/torture/rpc/spoolss.c +++ b/source4/torture/rpc/spoolss.c @@ -860,6 +860,11 @@ static bool test_EnumPrinters(struct torture_context *tctx, return true; } +static bool test_GetPrinterDriver2(struct torture_context *tctx, + struct dcerpc_pipe *p, + struct policy_handle *handle, + const char *driver_name); + static bool test_GetPrinter(struct torture_context *tctx, struct dcerpc_pipe *p, struct policy_handle *handle) @@ -895,6 +900,12 @@ static bool test_GetPrinter(struct torture_context *tctx, torture_assert_werr_ok(tctx, r.out.result, "GetPrinter failed"); CHECK_NEEDED_SIZE_LEVEL(spoolss_PrinterInfo, r.out.info, r.in.level, lp_iconv_convenience(tctx->lp_ctx), needed, 4); + + if ((r.in.level == 2) && r.out.info->info2.drivername && strlen(r.out.info->info2.drivername)) { + torture_assert(tctx, + test_GetPrinterDriver2(tctx, p, handle, r.out.info->info2.drivername), + "failed to call test_GetPrinterDriver2"); + } } return true; @@ -2965,38 +2976,55 @@ static bool test_GetPrinterDriver2(struct torture_context *tctx, const char *driver_name) { struct spoolss_GetPrinterDriver2 r; + uint16_t levels[] = {1, 2, 3, 4, 5, 6, 8, 101 }; uint32_t needed; uint32_t server_major_version; uint32_t server_minor_version; + int i; r.in.handle = handle; - r.in.architecture = "W32X86"; - r.in.level = 1; - r.in.buffer = NULL; - r.in.offered = 0; - r.in.client_major_version = 0; + r.in.architecture = SPOOLSS_ARCHITECTURE_NT_X86; + r.in.client_major_version = 3; r.in.client_minor_version = 0; r.out.needed = &needed; r.out.server_major_version = &server_major_version; r.out.server_minor_version = &server_minor_version; - torture_comment(tctx, "Testing GetPrinterDriver2 level %d\n", r.in.level); + for (i=0;ilp_ctx), needed, 4); + torture_assert_werr_ok(tctx, r.out.result, + "failed to call GetPrinterDriver2"); + + CHECK_NEEDED_SIZE_LEVEL(spoolss_DriverInfo, r.out.info, r.in.level, lp_iconv_convenience(tctx->lp_ctx), needed, 4); + } return true; } -- 2.11.4.GIT