The branch, master has been updated via 0833c96... s4-smbtorture: add function to get a printserver's environment. via 545ef2c... s4-smbtorture: simplify macros used in PrinterInfo winreg consistency teste. via e647b8c... s4-smbtorture: refactor test_GetPrinterDriver2(). from 7e9e529... s4:dynconfig: fix the autoconf build and pass -DPYTHONDIR=\"$(pythondir)\"
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 0833c9639e3e7fb7e14dc25d90f4a9973e717cbc Author: Günther Deschner <g...@samba.org> Date: Tue Apr 20 19:29:12 2010 +0200 s4-smbtorture: add function to get a printserver's environment. Guenther commit 545ef2ca7636507f86f370ae57937de7a6bd5d2e Author: Günther Deschner <g...@samba.org> Date: Tue Apr 20 18:16:03 2010 +0200 s4-smbtorture: simplify macros used in PrinterInfo winreg consistency teste. Guenther commit e647b8c61f9b65e4c4d07eae7f1a4c2be711b8de Author: Günther Deschner <g...@samba.org> Date: Tue Apr 20 16:25:27 2010 +0200 s4-smbtorture: refactor test_GetPrinterDriver2(). Guenther ----------------------------------------------------------------------- Summary of changes: source4/torture/rpc/spoolss.c | 166 ++++++++++++++++++++++++++-------------- 1 files changed, 108 insertions(+), 58 deletions(-) Changeset truncated at 500 lines: diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c index 55af920..9203a72 100644 --- a/source4/torture/rpc/spoolss.c +++ b/source4/torture/rpc/spoolss.c @@ -3284,6 +3284,28 @@ static bool test_GetPrinterDataEx(struct torture_context *tctx, return true; } +static bool test_get_environment(struct torture_context *tctx, + struct dcerpc_binding_handle *b, + struct policy_handle *handle, + const char **architecture) +{ + DATA_BLOB blob; + enum winreg_Type type; + uint8_t *data; + uint32_t needed; + + torture_assert(tctx, + test_GetPrinterData(tctx, b, handle, "Architecture", &type, &data, &needed), + "failed to get Architecture"); + + torture_assert_int_equal(tctx, type, REG_SZ, "unexpected type"); + + blob = data_blob_const(data, needed); + *architecture = reg_val_data_string(tctx, lp_iconv_convenience(tctx->lp_ctx), REG_SZ, blob); + + return true; +} + static bool test_GetPrinterData_list(struct torture_context *tctx, struct dcerpc_pipe *p, struct policy_handle *handle, @@ -3956,7 +3978,7 @@ static bool test_GetPrinterInfo_winreg(struct torture_context *tctx, printername = strip_unc(info.info2.printername); sharename = strip_unc(info.info2.sharename); -#define test_sz(key, wname, iname) \ +#define test_sz(wname, iname) \ do {\ DATA_BLOB blob;\ const char *str;\ @@ -3979,7 +4001,7 @@ do {\ }\ } while(0); -#define test_dword(key, wname, iname) \ +#define test_dword(wname, iname) \ do {\ uint32_t value;\ enum winreg_Type w_type;\ @@ -3998,7 +4020,7 @@ do {\ talloc_asprintf(tctx, "%s - %s mismatch", #wname, #iname));\ } while(0); -#define test_dm(key, wname, iname) \ +#define test_dm(wname, iname) \ do {\ DATA_BLOB blob;\ struct spoolss_DeviceMode dm;\ @@ -4020,7 +4042,7 @@ do {\ "dm unequal");\ } while(0); -#define test_sd(key, wname, iname) \ +#define test_sd(wname, iname) \ do {\ DATA_BLOB blob;\ struct security_descriptor sd;\ @@ -4062,27 +4084,27 @@ do {\ torture_assert(tctx, test_winreg_OpenKey(tctx, winreg_handle, hive_handle, printer_key, &key_handle), ""); - test_sz(keys[i], "Name", printername); - test_sz(keys[i], "Share Name", sharename); - test_sz(keys[i], "Port", info.info2.portname); - test_sz(keys[i], "Printer Driver", info.info2.drivername); - test_sz(keys[i], "Description", info.info2.comment); - test_sz(keys[i], "Location", info.info2.location); - test_sz(keys[i], "Separator File", info.info2.sepfile); - test_sz(keys[i], "Print Processor", info.info2.printprocessor); - test_sz(keys[i], "Datatype", info.info2.datatype); - test_sz(keys[i], "Parameters", info.info2.parameters); + test_sz("Name", printername); + test_sz("Share Name", sharename); + test_sz("Port", info.info2.portname); + test_sz("Printer Driver", info.info2.drivername); + test_sz("Description", info.info2.comment); + test_sz("Location", info.info2.location); + test_sz("Separator File", info.info2.sepfile); + test_sz("Print Processor", info.info2.printprocessor); + test_sz("Datatype", info.info2.datatype); + test_sz("Parameters", info.info2.parameters); /* winreg: 0, spoolss not */ -/* test_dword(keys[i], "Attributes", info.info2.attributes); */ - test_dword(keys[i], "Priority", info.info2.priority); - test_dword(keys[i], "Default Priority", info.info2.defaultpriority); +/* test_dword("Attributes", info.info2.attributes); */ + test_dword("Priority", info.info2.priority); + test_dword("Default Priority", info.info2.defaultpriority); /* winreg: 60, spoolss: 0 */ -/* test_dword(keys[i], "StartTime", info.info2.starttime); */ -/* test_dword(keys[i], "UntilTime", info.info2.untiltime); */ +/* test_dword("StartTime", info.info2.starttime); */ +/* test_dword("UntilTime", info.info2.untiltime); */ /* winreg != spoolss */ -/* test_dword(keys[i], "Status", info.info2.status); */ - test_dm(keys[i], "Default DevMode", info.info2.devmode); - test_sd(keys[i], "Security", info.info2.secdesc); +/* test_dword("Status", info.info2.status); */ + test_dm("Default DevMode", info.info2.devmode); + test_sd("Security", info.info2.secdesc); torture_assert(tctx, test_winreg_CloseKey(tctx, winreg_handle, &key_handle), ""); @@ -5158,60 +5180,88 @@ static bool test_GetPrinterDriver(struct torture_context *tctx, return true; } -static bool test_GetPrinterDriver2(struct torture_context *tctx, - struct dcerpc_binding_handle *b, - struct policy_handle *handle, - const char *driver_name, - const char *architecture) +static bool test_GetPrinterDriver2_level(struct torture_context *tctx, + struct dcerpc_binding_handle *b, + struct policy_handle *handle, + const char *driver_name, + const char *architecture, + uint32_t level, + uint32_t client_major_version, + uint32_t client_minor_version, + union spoolss_DriverInfo *info_p) + { 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 = architecture; - r.in.client_major_version = 3; - r.in.client_minor_version = 0; + r.in.client_major_version = client_major_version; + r.in.client_minor_version = client_minor_version; + r.in.buffer = NULL; + r.in.offered = 0; + r.in.level = level; r.out.needed = &needed; r.out.server_major_version = &server_major_version; r.out.server_minor_version = &server_minor_version; - for (i=0;i<ARRAY_SIZE(levels);i++) { - - r.in.buffer = NULL; - r.in.offered = 0; - r.in.level = levels[i]; + torture_comment(tctx, "Testing GetPrinterDriver2(%s) level %d\n", + driver_name, r.in.level); - torture_comment(tctx, "Testing GetPrinterDriver2(%s) level %d\n", - driver_name, r.in.level); - - torture_assert_ntstatus_ok(tctx, dcerpc_spoolss_GetPrinterDriver2_r(b, tctx, &r), + torture_assert_ntstatus_ok(tctx, + dcerpc_spoolss_GetPrinterDriver2_r(b, tctx, &r), + "failed to call GetPrinterDriver2"); + if (W_ERROR_EQUAL(r.out.result, WERR_INSUFFICIENT_BUFFER)) { + DATA_BLOB blob = data_blob_talloc_zero(tctx, needed); + r.in.buffer = &blob; + r.in.offered = needed; + torture_assert_ntstatus_ok(tctx, + dcerpc_spoolss_GetPrinterDriver2_r(b, tctx, &r), "failed to call GetPrinterDriver2"); - if (W_ERROR_EQUAL(r.out.result, WERR_INSUFFICIENT_BUFFER)) { - DATA_BLOB blob = data_blob_talloc_zero(tctx, needed); - r.in.buffer = &blob; - r.in.offered = needed; - torture_assert_ntstatus_ok(tctx, dcerpc_spoolss_GetPrinterDriver2_r(b, tctx, &r), - "failed to call GetPrinterDriver2"); - } + } - if (W_ERROR_EQUAL(r.out.result, WERR_INVALID_LEVEL)) { - switch (r.in.level) { - case 101: - case 8: - continue; - default: - break; - } + if (W_ERROR_EQUAL(r.out.result, WERR_INVALID_LEVEL)) { + switch (r.in.level) { + case 101: + case 8: + torture_comment(tctx, + "level %d not implemented, not considering as an error\n", + r.in.level); + return true; + default: + break; } + } - torture_assert_werr_ok(tctx, r.out.result, - "failed to call GetPrinterDriver2"); + 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); + + if (info_p) { + *info_p = *r.out.info; + } + + return true; +} + +static bool test_GetPrinterDriver2(struct torture_context *tctx, + struct dcerpc_binding_handle *b, + struct policy_handle *handle, + const char *driver_name, + const char *architecture) +{ + uint16_t levels[] = {1, 2, 3, 4, 5, 6, 8, 101 }; + int i; - CHECK_NEEDED_SIZE_LEVEL(spoolss_DriverInfo, r.out.info, r.in.level, lp_iconv_convenience(tctx->lp_ctx), needed, 4); + + for (i=0;i<ARRAY_SIZE(levels);i++) { + + torture_assert(tctx, + test_GetPrinterDriver2_level(tctx, b, handle, driver_name, architecture, levels[i], 3, 0, NULL), + ""); } return true; -- Samba Shared Repository