diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-11-02 01:01:17 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:45:39 -0500 |
commit | e8c23e4e2d9aab7fcf0e7653756c84ef6cf34ed6 (patch) | |
tree | 5a5064b83fd38b3813bacb45b942022492f07125 | |
parent | 9aa3c44f70e1102be64c503da43718b2c187dde3 (diff) | |
download | samba-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.idl | 5 | ||||
-rw-r--r-- | source4/torture/rpc/winreg.c | 16 |
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; } |