mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
r4157: QueryMultipleValues IDL and torture test
Initialisation data pointer in QueryValue torture test
(This used to be commit 72618dfe95
)
This commit is contained in:
parent
43ddb0a7ae
commit
59cfd5495e
@ -174,6 +174,9 @@
|
||||
/******************/
|
||||
/* Function: 0x0d */
|
||||
WERROR winreg_LoadKey(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in] winreg_String *keyname,
|
||||
[in] winreg_String *filename
|
||||
);
|
||||
|
||||
/******************/
|
||||
@ -237,8 +240,8 @@
|
||||
/* Function: 0x15 */
|
||||
WERROR winreg_SetKeySecurity(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in] uint32 sec_info,
|
||||
[in] sec_desc_buf *sec_desc
|
||||
[in] uint32 access_mask,
|
||||
[in,out,ref] KeySecurityData *data
|
||||
);
|
||||
|
||||
/******************/
|
||||
@ -295,9 +298,21 @@
|
||||
[out,ref] policy_handle *handle
|
||||
);
|
||||
|
||||
typedef struct {
|
||||
winreg_String *name;
|
||||
uint32 type;
|
||||
uint32 offset;
|
||||
uint32 length;
|
||||
} QueryMultipleValue;
|
||||
|
||||
/******************/
|
||||
/* Function: 0x1d */
|
||||
WERROR winreg_QueryMultipleValues(
|
||||
[in,ref] policy_handle *key_handle,
|
||||
[in,out,size_is(num_values),length_is(num_values),ref] QueryMultipleValue *values,
|
||||
[in] uint32 num_values,
|
||||
[in,out,size_is(*buffer_size),length_is(*buffer_size)] uint8 *buffer,
|
||||
[in,out,ref] uint32 *buffer_size
|
||||
);
|
||||
|
||||
/******************/
|
||||
|
@ -319,6 +319,40 @@ static BOOL test_EnumKey(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
|
||||
return True;
|
||||
}
|
||||
|
||||
static BOOL test_QueryMultipleValues(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct policy_handle *handle, const char *valuename)
|
||||
{
|
||||
struct winreg_QueryMultipleValues r;
|
||||
NTSTATUS status;
|
||||
|
||||
printf("Testing QueryMultipleValues\n");
|
||||
|
||||
r.in.key_handle = handle;
|
||||
r.in.values = r.out.values = talloc_array_p(mem_ctx, struct QueryMultipleValue, 1);
|
||||
r.in.values[0].name = talloc_p(mem_ctx, struct winreg_String);
|
||||
r.in.values[0].name->name = valuename;
|
||||
r.in.values[0].offset = 0;
|
||||
r.in.values[0].length = 0;
|
||||
r.in.values[0].type = 0;
|
||||
|
||||
r.in.num_values = 1;
|
||||
r.in.buffer_size = r.out.buffer_size = talloc_p(mem_ctx, uint32);
|
||||
*r.in.buffer_size = 0x20;
|
||||
r.in.buffer = r.out.buffer = talloc_zero_array_p(mem_ctx, uint8, *r.in.buffer_size);
|
||||
|
||||
status = dcerpc_winreg_QueryMultipleValues(p, mem_ctx, &r);
|
||||
if(NT_STATUS_IS_ERR(status)) {
|
||||
printf("QueryMultipleValues failed - %s\n", nt_errstr(status));
|
||||
return False;
|
||||
}
|
||||
|
||||
if (!W_ERROR_IS_OK(r.out.result)) {
|
||||
printf("QueryMultipleValues failed - %s\n", win_errstr(r.out.result));
|
||||
return False;
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
static BOOL test_QueryValue(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct policy_handle *handle, const char *valuename)
|
||||
{
|
||||
struct winreg_QueryValue r;
|
||||
@ -329,6 +363,7 @@ static BOOL test_QueryValue(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct p
|
||||
printf("Testing QueryValue\n");
|
||||
|
||||
r.in.handle = handle;
|
||||
r.in.data = NULL;
|
||||
r.in.value_name.name = valuename;
|
||||
r.in.type = &zero;
|
||||
r.in.size = &offered;
|
||||
@ -379,6 +414,7 @@ static BOOL test_EnumValue(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
|
||||
|
||||
if (W_ERROR_IS_OK(r.out.result)) {
|
||||
ret &= test_QueryValue(p, mem_ctx, handle, r.out.name_out.name);
|
||||
ret &= test_QueryMultipleValues(p, mem_ctx, handle, r.out.name_out.name);
|
||||
}
|
||||
|
||||
r.in.enum_index++;
|
||||
|
Loading…
Reference in New Issue
Block a user