summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2004-12-09 07:52:00 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:06:27 -0500
commit4141cdf62c2bbd5a081a16c8a9794062b94eed04 (patch)
treeb903fb3019cd5adc9ba5c529ad93128cb0af83ad
parentff470041c2918e12fd2c5e298fd5ecbfcc74cb5f (diff)
downloadsamba-4141cdf62c2bbd5a081a16c8a9794062b94eed04.tar.gz
samba-4141cdf62c2bbd5a081a16c8a9794062b94eed04.tar.bz2
samba-4141cdf62c2bbd5a081a16c8a9794062b94eed04.zip
r4113: modified EnumValue in winreg to take advantage of the new pidl handling
of arrays. (This used to be commit b47e203a054e26d5d0c133a3c3b8d9502bd6ac69)
-rw-r--r--source4/librpc/idl/winreg.idl50
-rw-r--r--source4/torture/rpc/winreg.c27
2 files changed, 28 insertions, 49 deletions
diff --git a/source4/librpc/idl/winreg.idl b/source4/librpc/idl/winreg.idl
index 2dbd4de944..d721172507 100644
--- a/source4/librpc/idl/winreg.idl
+++ b/source4/librpc/idl/winreg.idl
@@ -125,42 +125,30 @@
[in,out] winreg_Time *last_changed_time
);
- typedef struct {
- uint32 max_len;
- uint32 offset;
- uint32 len;
- } EnumValueIn;
-
- typedef struct {
- uint16 len;
- uint16 max_len;
- EnumValueIn *buffer;
- } EnumValueNameIn;
-
- typedef struct {
- uint32 max_len;
- uint32 offset;
- DATA_BLOB buffer;
- } EnumValueOut;
-
- typedef struct {
- uint16 len;
- uint16 max_len;
- unistr *name;
- } EnumValueNameOut;
-
/******************/
/* Function: 0x0a */
+
+ /*
+ this is equivalent IDL to a winreg_String, but we need to
+ have absolute control over the length/size fields as the
+ server looks at those to see what size buffer we have, so
+ we can't use the automatic unistr handing in pidl.
+ */
+ typedef struct {
+ uint16 length;
+ uint16 size;
+ [size_is(size/2),length_is(length/2)] uint16 *name;
+ } winreg_EnumValueString;
+
WERROR winreg_EnumValue(
[in,ref] policy_handle *handle,
- [in] uint32 enum_index,
- [in] EnumValueNameIn name_in,
- [out] EnumValueNameOut name_out,
+ [in] uint32 enum_index,
+ [in] winreg_EnumValueString name_in,
+ [out] winreg_String name_out,
[in,out] uint32 *type,
- [in] EnumValueIn *value_in,
- [out] EnumValueOut *value_out,
- [in,out] uint32 *value_len1,
- [in,out] uint32 *value_len2
+ [in,out,size_is(*size),length_is(*length)] uint8 *value,
+ [in,out] uint32 *size,
+ [in,out] uint32 *length
);
/******************/
diff --git a/source4/torture/rpc/winreg.c b/source4/torture/rpc/winreg.c
index 592f2ff86a..6f44034273 100644
--- a/source4/torture/rpc/winreg.c
+++ b/source4/torture/rpc/winreg.c
@@ -293,12 +293,9 @@ static BOOL test_QueryValue(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct p
{
struct winreg_QueryValue r;
NTSTATUS status;
- struct EnumValueNameOut valname;
uint32 zero = 0;
uint32 offered = 0xfff;
- valname.name = valuename;
-
printf("Testing QueryValue\n");
r.in.handle = handle;
@@ -325,29 +322,23 @@ static BOOL test_EnumValue(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
struct policy_handle *handle, int max_valnamelen, int max_valbufsize)
{
struct winreg_EnumValue r;
- struct EnumValueIn buf_name;
- struct EnumValueIn buf_val;
uint32 type;
- uint32 len1 = max_valbufsize, len2 = 0;
+ uint32 size = max_valbufsize, zero = 0;
BOOL ret = True;
+ uint8_t buf8;
+ uint16_t buf16;
printf("testing EnumValue\n");
r.in.handle = handle;
r.in.enum_index = 0;
- r.in.name_in.len = 0;
- r.in.name_in.max_len = max_valnamelen * 2;
- buf_name.max_len = max_valnamelen;
- buf_name.offset = 0;
- buf_name.len = 0;
- r.in.name_in.buffer = &buf_name;
+ r.in.name_in.length = 0;
+ r.in.name_in.size = 0x200;
+ r.in.name_in.name = &buf16;
r.in.type = &type;
- buf_val.max_len = max_valbufsize;
- buf_val.offset = 0;
- buf_val.len = 0;
- r.in.value_in = &buf_val;
- r.in.value_len1 = &len1;
- r.in.value_len2 = &len2;
+ r.in.value = &buf8;
+ r.in.length = &zero;
+ r.in.size = &size;
do {
NTSTATUS status = dcerpc_winreg_EnumValue(p, mem_ctx, &r);