[SCM] Samba Shared Repository - branch v3-6-test updated
Günther Deschner
gd at samba.org
Fri Jan 21 03:47:15 MST 2011
The branch, v3-6-test has been updated
via 404a403 s3-spoolss: make it more obvious what winreg_create_printer() does.
via f3bd75c s3-rpcclient: rename duplicate enumkey command to winreg_enumkey.
via 620c09e s3-spoolss: as smbtorture testing proves: devmode size is the size of the devicemode minus the driverdata extra size.
via 773830d s4-smbtorture: make sure there is always driverextra data in spoolss devmode size tests.
via d191c2e s3-spoolss: disallow storing an invalid devmode size.
via b9b2266 s4-smbtorture: add tests for the size member of spoolss devicemodes.
via 611ff18 s4-smbtorture: prepare devicemode test for expected result tests.
via 0524e24 s4-smbtorture: add some paranoia checks for 0 sized devmodes.
from f52c294 waf: change private libraries to use the same soname as public libraries
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test
- Log -----------------------------------------------------------------
commit 404a40350d8140f4d49b9fae83971fd5e9a8a587
Author: Günther Deschner <gd at samba.org>
Date: Fri Jan 21 10:38:23 2011 +0100
s3-spoolss: make it more obvious what winreg_create_printer() does.
Guenther
Autobuild-User: Günther Deschner <gd at samba.org>
Autobuild-Date: Fri Jan 21 11:43:29 CET 2011 on sn-devel-104
(cherry picked from commit 8db3258983bcf4ad73679a5bd5a554adc062a324)
commit f3bd75c5b017a82c333f4902d0051420444c818b
Author: Günther Deschner <gd at samba.org>
Date: Fri Jan 21 10:34:38 2011 +0100
s3-rpcclient: rename duplicate enumkey command to winreg_enumkey.
Guenther
(cherry picked from commit 621fb88e331bb247d1726e7ffcd2a3c4819e6e14)
commit 620c09edcbf22bb8e9145b106f27f20090146bf0
Author: Günther Deschner <gd at samba.org>
Date: Wed Jan 19 14:39:50 2011 +0100
s3-spoolss: as smbtorture testing proves: devmode size is the size of the devicemode minus the driverdata extra size.
Jeremy, please check.
Guenther
(cherry picked from commit be884c1bfdfec24c067705af132a4d7dce807376)
commit 773830d2da1b0199286c268a9a01d86b1e79ad94
Author: Günther Deschner <gd at samba.org>
Date: Wed Jan 19 14:39:36 2011 +0100
s4-smbtorture: make sure there is always driverextra data in spoolss devmode size tests.
Guenther
(cherry picked from commit 1f3fb30ed938d1ffdf4fbdcbc8b429becbbdb801)
commit d191c2e3af202a37202f629c4f461eb751523ec6
Author: Günther Deschner <gd at samba.org>
Date: Wed Jan 19 13:49:51 2011 +0100
s3-spoolss: disallow storing an invalid devmode size.
Guenther
(cherry picked from commit 9b1878e538a39b5459a74790b371ef5c098e0642)
commit b9b226680a941cff7a805158b9099ff754041e10
Author: Günther Deschner <gd at samba.org>
Date: Wed Jan 19 13:48:17 2011 +0100
s4-smbtorture: add tests for the size member of spoolss devicemodes.
Guenther
(cherry picked from commit aefbec52703a10ebe49ddd4883ea728116825114)
commit 611ff18b7a1cedbdfd1baa9e3603f18314864718
Author: Günther Deschner <gd at samba.org>
Date: Wed Jan 19 13:44:46 2011 +0100
s4-smbtorture: prepare devicemode test for expected result tests.
Guenther
(cherry picked from commit 7a7b61ef082070de9407c937a86e299a98a6ef58)
commit 0524e247610942acb0ee13ac8c5ec29f3107ed8c
Author: Günther Deschner <gd at samba.org>
Date: Wed Jan 19 00:15:09 2011 +0100
s4-smbtorture: add some paranoia checks for 0 sized devmodes.
Guenther
(cherry picked from commit bb51c050149c2e2ea5bf81f283da862fc1e840d2)
-----------------------------------------------------------------------
Summary of changes:
source3/rpc_server/srv_spoolss_util.c | 14 +++++----
source3/rpcclient/cmd_winreg.c | 2 +-
source4/torture/rpc/spoolss.c | 53 ++++++++++++++++++++++++++------
3 files changed, 52 insertions(+), 17 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/rpc_server/srv_spoolss_util.c b/source3/rpc_server/srv_spoolss_util.c
index 89cdc2d..79549ac 100644
--- a/source3/rpc_server/srv_spoolss_util.c
+++ b/source3/rpc_server/srv_spoolss_util.c
@@ -1457,8 +1457,7 @@ WERROR winreg_create_printer(TALLOC_CTX *mem_ctx,
goto done;
}
- switch (i) {
- case 1: {
+ if (strequal(subkeys[i], SPOOL_DSSPOOLER_KEY)) {
const char *dnssuffix;
const char *longname;
const char *uncname;
@@ -1565,9 +1564,6 @@ WERROR winreg_create_printer(TALLOC_CTX *mem_ctx,
if (!W_ERROR_IS_OK(result)) {
goto done;
}
- } /* case 1 */
- default:
- break;
}
if (is_valid_policy_hnd(&key_hnd)) {
@@ -1773,6 +1769,12 @@ WERROR winreg_update_printer(TALLOC_CTX *mem_ctx,
goto done;
}
}
+
+ if (devmode->size != (ndr_size_spoolss_DeviceMode(devmode, 0) - devmode->__driverextra_length)) {
+ result = WERR_INVALID_PARAM;
+ goto done;
+ }
+
ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, devmode,
(ndr_push_flags_fn_t) ndr_push_spoolss_DeviceMode);
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
@@ -2211,7 +2213,7 @@ WERROR winreg_get_printer(TALLOC_CTX *mem_ctx,
}
if (info2->devmode) {
- info2->devmode->size = ndr_size_spoolss_DeviceMode(info2->devmode, 0);
+ info2->devmode->size = ndr_size_spoolss_DeviceMode(info2->devmode, 0) - info2->devmode->driverextra_data.length;
}
result = winreg_get_printer_secdesc(info2,
diff --git a/source3/rpcclient/cmd_winreg.c b/source3/rpcclient/cmd_winreg.c
index cf0df24..2ba2d6d 100644
--- a/source3/rpcclient/cmd_winreg.c
+++ b/source3/rpcclient/cmd_winreg.c
@@ -319,7 +319,7 @@ static WERROR cmd_winreg_querymultiplevalues2(struct rpc_pipe_client *cli,
struct cmd_set winreg_commands[] = {
{ "WINREG" },
- { "enumkey", RPC_RTYPE_WERROR, NULL, cmd_winreg_enumkeys, &ndr_table_winreg.syntax_id, NULL, "Enumerate Keys", "" },
+ { "winreg_enumkey", RPC_RTYPE_WERROR, NULL, cmd_winreg_enumkeys, &ndr_table_winreg.syntax_id, NULL, "Enumerate Keys", "" },
{ "querymultiplevalues", RPC_RTYPE_WERROR, NULL, cmd_winreg_querymultiplevalues, &ndr_table_winreg.syntax_id, NULL, "Query multiple values", "" },
{ "querymultiplevalues2", RPC_RTYPE_WERROR, NULL, cmd_winreg_querymultiplevalues2, &ndr_table_winreg.syntax_id, NULL, "Query multiple values", "" },
{ NULL }
diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c
index 2dd7164..dc9f704 100644
--- a/source4/torture/rpc/spoolss.c
+++ b/source4/torture/rpc/spoolss.c
@@ -5,7 +5,7 @@
Copyright (C) Tim Potter 2003
Copyright (C) Stefan Metzmacher 2005
Copyright (C) Jelmer Vernooij 2007
- Copyright (C) Guenther Deschner 2009-2010
+ Copyright (C) Guenther Deschner 2009-2011
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -2135,7 +2135,7 @@ static bool test_devicemode_full(struct torture_context *tctx,
bool ret = true;
NTSTATUS status;
-#define TEST_DEVMODE_INT_EXP(lvl1, field1, lvl2, field2, value, exp_value) do { \
+#define TEST_DEVMODE_INT_EXP_RESULT(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) \
@@ -2147,16 +2147,22 @@ static bool test_devicemode_full(struct torture_context *tctx,
}\
devmode_ctr.devmode = q.out.info->info ## lvl1.devmode; \
devmode_ctr.devmode->field1 = value; \
- TESTSETCALL(SetPrinter, s) \
- TESTGETCALL(GetPrinter, q) \
- INT_EQUAL(q.out.info->info ## lvl1.devmode->field1, exp_value, field1); \
- q.in.level = lvl2; \
- TESTGETCALL(GetPrinter, q) \
- INT_EQUAL(q.out.info->info ## lvl2.devmode->field2, exp_value, field1); \
+ TESTSETCALL_EXP(SetPrinter, s, expected_result) \
+ if (W_ERROR_IS_OK(expected_result)) { \
+ TESTGETCALL(GetPrinter, q) \
+ INT_EQUAL(q.out.info->info ## lvl1.devmode->field1, exp_value, field1); \
+ q.in.level = lvl2; \
+ TESTGETCALL(GetPrinter, q) \
+ 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); \
+ } while (0)
+
#define TEST_DEVMODE_INT(lvl1, field1, lvl2, field2, value) do { \
- TEST_DEVMODE_INT_EXP(lvl1, field1, lvl2, field2, value, value); \
+ TEST_DEVMODE_INT_EXP_RESULT(lvl1, field1, lvl2, field2, value, value, WERR_OK); \
} while (0)
ZERO_STRUCT(devmode_ctr);
@@ -2177,10 +2183,22 @@ static bool test_devicemode_full(struct torture_context *tctx,
const char *devicename;/* [charset(UTF16)] */
enum spoolss_DeviceModeSpecVersion specversion;
uint16_t driverversion;
- uint16_t size;
uint16_t __driverextra_length;/* [value(r->driverextra_data.length)] */
uint32_t fields;
#endif
+ TEST_DEVMODE_INT_EXP(8, size, 8, size, __LINE__, WERR_INVALID_PARAM);
+ TEST_DEVMODE_INT_EXP(8, size, 8, size, 0, WERR_INVALID_PARAM);
+ TEST_DEVMODE_INT_EXP(8, size, 8, size, 0xffff, WERR_INVALID_PARAM);
+ TEST_DEVMODE_INT_EXP(8, size, 8, size, ndr_size_spoolss_DeviceMode(devmode_ctr.devmode, 0), (devmode_ctr.devmode->__driverextra_length > 0 ) ? WERR_INVALID_PARAM : WERR_OK);
+ TEST_DEVMODE_INT(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_PARAM : 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__);
@@ -2239,10 +2257,20 @@ static bool test_PrinterInfo_DevModes(struct torture_context *tctx,
devmode = info.info8.devmode;
+ if (devmode && devmode->size == 0) {
+ torture_fail(tctx,
+ "devmode of zero size!");
+ }
+
torture_assert(tctx, test_GetPrinter_level(tctx, b, handle, 2, &info), "");
devmode2 = info.info2.devmode;
+ if (devmode2 && devmode2->size == 0) {
+ torture_fail(tctx,
+ "devmode of zero size!");
+ }
+
torture_assert(tctx, test_devicemode_equal(tctx, devmode, devmode2),
"DM level 8 != DM level 2");
@@ -2384,6 +2412,11 @@ static bool test_PrinterInfo_DevMode(struct torture_context *tctx,
devmode = info.info8.devmode;
+ if (devmode && devmode->size == 0) {
+ torture_fail(tctx,
+ "devmode of zero size!");
+ }
+
if (addprinter_devmode) {
if (!test_devicemode_equal(tctx, devmode, addprinter_devmode)) {
torture_warning(tctx, "current global DM is != DM provided in addprinter");
--
Samba Shared Repository
More information about the samba-cvs
mailing list