[SCM] Samba Shared Repository - branch master updated
Günther Deschner
gd at samba.org
Mon Mar 1 07:22:28 MST 2010
The branch, master has been updated
via 1a64d3c... s4-smbtorture: add stricter SetPrinterDataEx tests to spoolss tests.
via 4f6634e... s4-smbtorture: add test_SetPrinterDataEx to RPC-SPOOLSS-PRINTER.
via 74c7c1c... s4-smbtorture: return needed size pointer from test_GetPrinterDataEx.
via e76b8a0... s4-smbtorture: test at least three different regtypes in test_SetPrinterDataEx.
from 8bebb38... s3: Add connections_forall_read()
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 1a64d3cbc65b70df1f1b3f473cdbfdce5c8f2ae9
Author: Günther Deschner <gd at samba.org>
Date: Mon Mar 1 14:35:59 2010 +0100
s4-smbtorture: add stricter SetPrinterDataEx tests to spoolss tests.
Guenther
commit 4f6634e56dde97552fec69c99cbf63f80609f9f4
Author: Günther Deschner <gd at samba.org>
Date: Mon Mar 1 14:27:43 2010 +0100
s4-smbtorture: add test_SetPrinterDataEx to RPC-SPOOLSS-PRINTER.
Guenther
commit 74c7c1cc7fcaed83a86ef0708c0faf4735bc5737
Author: Günther Deschner <gd at samba.org>
Date: Mon Mar 1 14:26:30 2010 +0100
s4-smbtorture: return needed size pointer from test_GetPrinterDataEx.
Guenther
commit e76b8a07002dc3d01d5f4624c8cae25e75020099
Author: Günther Deschner <gd at samba.org>
Date: Mon Mar 1 12:53:11 2010 +0100
s4-smbtorture: test at least three different regtypes in test_SetPrinterDataEx.
Guenther
-----------------------------------------------------------------------
Summary of changes:
source4/torture/rpc/spoolss.c | 132 +++++++++++++++++++++++++++++++++--------
1 files changed, 108 insertions(+), 24 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c
index b76ae6f..2b4d948 100644
--- a/source4/torture/rpc/spoolss.c
+++ b/source4/torture/rpc/spoolss.c
@@ -30,6 +30,7 @@
#include "libcli/security/security.h"
#include "torture/rpc/rpc.h"
#include "param/param.h"
+#include "lib/registry/registry.h"
#define TORTURE_WELLKNOWN_PRINTER "torture_wkn_printer"
#define TORTURE_PRINTER "torture_printer"
@@ -2893,7 +2894,8 @@ static bool test_GetPrinterDataEx(struct torture_context *tctx,
const char *key_name,
const char *value_name,
enum winreg_Type *type_p,
- union spoolss_PrinterData *data_p)
+ union spoolss_PrinterData *data_p,
+ uint32_t *needed_p)
{
NTSTATUS status;
struct spoolss_GetPrinterDataEx r;
@@ -2940,6 +2942,10 @@ static bool test_GetPrinterDataEx(struct torture_context *tctx,
*data_p = data;
}
+ if (needed_p) {
+ *needed_p = needed;
+ }
+
return true;
}
@@ -2970,7 +2976,7 @@ static bool test_GetPrinterData_list(struct torture_context *tctx,
torture_assert(tctx, test_GetPrinterData(tctx, p, handle, list[i], &type, &data),
talloc_asprintf(tctx, "GetPrinterData failed on %s\n", list[i]));
- torture_assert(tctx, test_GetPrinterDataEx(tctx, p, handle, "random_string", list[i], &type_ex, &data_ex),
+ torture_assert(tctx, test_GetPrinterDataEx(tctx, p, handle, "random_string", list[i], &type_ex, &data_ex, NULL),
talloc_asprintf(tctx, "GetPrinterDataEx failed on %s\n", list[i]));
torture_assert_int_equal(tctx, type, type_ex, "type mismatch");
switch (type) {
@@ -3041,7 +3047,7 @@ static bool test_EnumPrinterData(struct torture_context *tctx, struct dcerpc_pip
torture_assert(tctx, test_GetPrinterData(tctx, p, handle, r.out.value_name, NULL, NULL),
talloc_asprintf(tctx, "failed to call GetPrinterData for %s\n", r.out.value_name));
- torture_assert(tctx, test_GetPrinterDataEx(tctx, p, handle, "PrinterDriverData", r.out.value_name, NULL, NULL),
+ torture_assert(tctx, test_GetPrinterDataEx(tctx, p, handle, "PrinterDriverData", r.out.value_name, NULL, NULL, NULL),
talloc_asprintf(tctx, "failed to call GetPrinterDataEx on PrinterDriverData for %s\n", r.out.value_name));
r.in.enum_index++;
@@ -3222,10 +3228,38 @@ static bool test_EnumPrinterKey(struct torture_context *tctx,
static bool test_SetPrinterDataEx(struct torture_context *tctx,
struct dcerpc_pipe *p,
- struct policy_handle *handle)
+ struct policy_handle *handle,
+ const char *key_name,
+ const char *value_name,
+ enum winreg_Type type,
+ union spoolss_PrinterData *data,
+ uint32_t _offered)
{
NTSTATUS status;
struct spoolss_SetPrinterDataEx r;
+
+ r.in.handle = handle;
+ r.in.key_name = key_name;
+ r.in.value_name = value_name;
+ r.in.type = type;
+ r.in.data = *data;
+ r.in._offered = _offered;
+
+ torture_comment(tctx, "Testing SetPrinterDataEx(%s - %s) type: %s, offered: 0x%08x\n",
+ r.in.key_name, r.in.value_name, str_regtype(r.in.type), r.in._offered);
+
+ status = dcerpc_spoolss_SetPrinterDataEx(p, tctx, &r);
+
+ torture_assert_ntstatus_ok(tctx, status, "SetPrinterDataEx failed");
+ torture_assert_werr_ok(tctx, r.out.result, "SetPrinterDataEx failed");
+
+ return true;
+}
+
+static bool test_SetPrinterDataEx_matrix(struct torture_context *tctx,
+ struct dcerpc_pipe *p,
+ struct policy_handle *handle)
+{
const char *value_name = "dog";
const char *keys[] = {
"torturedataex",
@@ -3248,45 +3282,89 @@ static bool test_SetPrinterDataEx(struct torture_context *tctx,
"torture\\data,ex"
#endif
};
- int i;
- DATA_BLOB blob = data_blob_string_const("catfoobar");
+ enum winreg_Type types[] = {
+ REG_SZ,
+ REG_DWORD,
+ REG_BINARY
+ };
+ uint32_t value = 12345678;
+ const char *str = "abcdefghijklmnopqrstuvwxzy";
+ int i, t, s;
for (i=0; i < ARRAY_SIZE(keys); i++) {
+ for (t=0; t < ARRAY_SIZE(types); t++) {
+ for (s=0; s < strlen(str); s++) {
char *c;
const char *key;
enum winreg_Type type;
+ const char *string = talloc_strndup(tctx, str, s);
+ DATA_BLOB blob = data_blob_string_const(string);
const char **subkeys;
union spoolss_PrinterData data;
+ uint32_t needed, offered = 0;
- r.in.handle = handle;
- r.in.key_name = keys[i];
- r.in.value_name = value_name;
- r.in.type = REG_BINARY;
- r.in.data.binary = blob;
+ if (types[t] == REG_DWORD) {
+ s = 0xffff;
+ }
- torture_comment(tctx, "Testing SetPrinterDataEx(%s - %s)\n", r.in.key_name, value_name);
+ switch (types[t]) {
+ case REG_BINARY:
+ data.binary = blob;
+ offered = blob.length;
+ break;
+ case REG_DWORD:
+ data.value = value;
+ offered = 4;
+ break;
+ case REG_SZ:
+ data.string = string;
+ offered = strlen_m_term(data.string)*2;
+ break;
+ default:
+ torture_fail(tctx, talloc_asprintf(tctx, "type %d untested\n", types[t]));
+ }
- status = dcerpc_spoolss_SetPrinterDataEx(p, tctx, &r);
+ torture_assert(tctx,
+ test_SetPrinterDataEx(tctx, p, handle, keys[i], value_name, types[t], &data, offered),
+ "failed to call SetPrinterDataEx");
- torture_assert_ntstatus_ok(tctx, status, "SetPrinterDataEx failed");
- torture_assert_werr_ok(tctx, r.out.result, "SetPrinterDataEx failed");
+ if (!test_GetPrinterDataEx(tctx, p, handle, keys[i], value_name, &type, &data, &needed)) {
+ return false;
+ }
- key = talloc_strdup(tctx, r.in.key_name);
+ /* special case, a REG_BINARY set with 0 size returns a 0 sized
+ * REG_NONE - gd */
+ if ((types[t] == REG_BINARY) && (offered == 0)) {
+ torture_assert_int_equal(tctx, REG_NONE, type, "type mismatch");
+ } else {
+ torture_assert_int_equal(tctx, types[t], type, "type mismatch");
+ }
- if (!test_GetPrinterDataEx(tctx, p, handle, r.in.key_name, value_name, &type, &data)) {
- return false;
+ switch (type) {
+ case REG_BINARY:
+ torture_assert_data_blob_equal(tctx, blob, data.binary, "data mismatch");
+ break;
+ case REG_DWORD:
+ torture_assert_int_equal(tctx, value, data.value, "data mismatch");
+ break;
+ case REG_SZ:
+ torture_assert_str_equal(tctx, string, data.string, "data mismatch");
+ break;
+ default:
+ break;
}
- torture_assert_int_equal(tctx, r.in.type, type, "type mismatch");
- torture_assert_data_blob_equal(tctx, blob, data.binary, "data mismatch");
+ torture_assert_int_equal(tctx, needed, offered, "size mismatch");
- if (!test_EnumPrinterDataEx(tctx, p, handle, r.in.key_name)) {
+ key = talloc_strdup(tctx, keys[i]);
+
+ if (!test_EnumPrinterDataEx(tctx, p, handle, keys[i])) {
return false;
}
- if (!test_DeletePrinterDataEx(tctx, p, handle, r.in.key_name, value_name)) {
+ if (!test_DeletePrinterDataEx(tctx, p, handle, keys[i], value_name)) {
return false;
}
@@ -3321,6 +3399,8 @@ static bool test_SetPrinterDataEx(struct torture_context *tctx,
}
}
}
+ }
+ }
return true;
}
@@ -3353,7 +3433,7 @@ static bool test_GetChangeID_PrinterDataEx(struct torture_context *tctx,
union spoolss_PrinterData data;
torture_assert(tctx,
- test_GetPrinterDataEx(tctx, p, handle, "PrinterDriverData", "ChangeID", &type, &data),
+ test_GetPrinterDataEx(tctx, p, handle, "PrinterDriverData", "ChangeID", &type, &data, NULL),
"failed to call GetPrinterData");
torture_assert(tctx, type == REG_DWORD, "unexpected type");
@@ -3734,7 +3814,7 @@ static bool test_OpenPrinterEx(struct torture_context *tctx,
ret = false;
}
- if (!test_SetPrinterDataEx(tctx, p, &handle)) {
+ if (!test_SetPrinterDataEx_matrix(tctx, p, &handle)) {
ret = false;
}
@@ -4513,6 +4593,10 @@ static bool test_one_printer(struct torture_context *tctx,
ret = false;
}
+ if (!test_SetPrinterDataEx_matrix(tctx, p, handle)) {
+ ret = false;
+ }
+
return ret;
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list