r4157: QueryMultipleValues IDL and torture test
authorJelmer Vernooij <jelmer@samba.org>
Sun, 12 Dec 2004 00:22:30 +0000 (00:22 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:07:20 +0000 (13:07 -0500)
Initialisation data pointer in QueryValue torture test

source/librpc/idl/winreg.idl
source/torture/rpc/winreg.c

index 370ca828b13b654403d756b56381b767c7a46136..c80130c9aff7a678065cb8a5b79d687ed4e6f7b5 100644 (file)
        /******************/
        /* Function: 0x0d */
        WERROR winreg_LoadKey(
+               [in,ref] policy_handle *handle,
+               [in] winreg_String *keyname,
+               [in] winreg_String *filename
        );
 
        /******************/
        /* 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
        );
 
        /******************/
                [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
        );
 
        /******************/
index 183128d3718367991c9781f1493ef2920de82150..3ed7af0e29112561347296c4b2207b0e311f1cb8 100644 (file)
@@ -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++;