1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-02 09:47:23 +03:00

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)
This commit is contained in:
Andrew Tridgell 2005-11-02 01:01:17 +00:00 committed by Gerald (Jerry) Carter
parent 9aa3c44f70
commit e8c23e4e2d
2 changed files with 12 additions and 9 deletions

View File

@ -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;

View File

@ -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;
}