summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-11-02 01:01:17 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:45:39 -0500
commite8c23e4e2d9aab7fcf0e7653756c84ef6cf34ed6 (patch)
tree5a5064b83fd38b3813bacb45b942022492f07125
parent9aa3c44f70e1102be64c503da43718b2c187dde3 (diff)
downloadsamba-e8c23e4e2d9aab7fcf0e7653756c84ef6cf34ed6.tar.gz
samba-e8c23e4e2d9aab7fcf0e7653756c84ef6cf34ed6.tar.bz2
samba-e8c23e4e2d9aab7fcf0e7653756c84ef6cf34ed6.zip
r11457: fixed the winreg IDL and torture code so key and value enumerations
work again. The automatic value() is fine for the length, but cannot be used for the size as the size is not the number of bytes being sent, but the number of bytes that the server is allowed to use in the reply (This used to be commit 46e91f269c83707863a726e716325eade38e1142)
-rw-r--r--source4/librpc/idl/winreg.idl5
-rw-r--r--source4/torture/rpc/winreg.c16
2 files changed, 12 insertions, 9 deletions
diff --git a/source4/librpc/idl/winreg.idl b/source4/librpc/idl/winreg.idl
index 83a95ebac4..d0da5fcc24 100644
--- a/source4/librpc/idl/winreg.idl
+++ b/source4/librpc/idl/winreg.idl
@@ -131,7 +131,10 @@
typedef struct {
[value(strlen_m(name)*2)] uint16 length;
- [value(strlen_m(name)*2)] uint16 size;
+ /* size cannot be auto-set by value() as it is the
+ amount of space the server is allowed to use for this
+ string in the reply, not its current size */
+ uint16 size;
[size_is(size/2),length_is(length/2),charset(UTF16)] uint16 *name;
} winreg_StringBuf;
diff --git a/source4/torture/rpc/winreg.c b/source4/torture/rpc/winreg.c
index 873ad10a23..cfcb91cafb 100644
--- a/source4/torture/rpc/winreg.c
+++ b/source4/torture/rpc/winreg.c
@@ -403,6 +403,7 @@ static BOOL test_EnumKey(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
printf("Testing EnumKey\n\n");
class.name = "";
+ class.size = 1024;
r.in.handle = handle;
r.in.enum_index = 0;
@@ -413,6 +414,7 @@ static BOOL test_EnumKey(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
do {
name.name = NULL;
+ name.size = 1024;
status = dcerpc_winreg_EnumKey(p, mem_ctx, &r);
@@ -533,6 +535,7 @@ static BOOL test_EnumValue(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
printf("testing EnumValue\n");
name.name = "";
+ name.size = 1024;
r.in.handle = handle;
r.in.enum_index = 0;
@@ -684,7 +687,7 @@ static BOOL test_Open(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
const char *name, winreg_open_fn open_fn)
{
struct policy_handle handle, newhandle;
- BOOL ret = True, created = False, deleted = False;
+ BOOL ret = True, created = False, created2 = False, deleted = False;
struct winreg_OpenHKLM r;
NTSTATUS status;
@@ -742,20 +745,17 @@ static BOOL test_Open(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
ret = False;
}
- if (created && !test_CreateKey_sd(p, mem_ctx, &handle, TEST_KEY2,
+ if (created && test_CreateKey_sd(p, mem_ctx, &handle, TEST_KEY2,
NULL, &newhandle)) {
- printf("CreateKey failed - not considering a failure\n");
- created = False;
- } else {
- created = True;
+ created2 = True;
}
- if (created && !test_GetKeySecurity(p, mem_ctx, &newhandle)) {
+ if (created2 && !test_GetKeySecurity(p, mem_ctx, &newhandle)) {
printf("GetKeySecurity failed\n");
ret = False;
}
- if (created && !test_CloseKey(p, mem_ctx, &newhandle)) {
+ if (created2 && !test_CloseKey(p, mem_ctx, &newhandle)) {
printf("CloseKey failed\n");
ret = False;
}