svn commit: samba r4113 - in branches/SAMBA_4_0/source: librpc/idl torture/rpc

tridge at samba.org tridge at samba.org
Thu Dec 9 07:52:00 GMT 2004


Author: tridge
Date: 2004-12-09 07:52:00 +0000 (Thu, 09 Dec 2004)
New Revision: 4113

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=4113

Log:
modified EnumValue in winreg to take advantage of the new pidl handling
of arrays.



Modified:
   branches/SAMBA_4_0/source/librpc/idl/winreg.idl
   branches/SAMBA_4_0/source/torture/rpc/winreg.c


Changeset:
Modified: branches/SAMBA_4_0/source/librpc/idl/winreg.idl
===================================================================
--- branches/SAMBA_4_0/source/librpc/idl/winreg.idl	2004-12-09 07:51:20 UTC (rev 4112)
+++ branches/SAMBA_4_0/source/librpc/idl/winreg.idl	2004-12-09 07:52:00 UTC (rev 4113)
@@ -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
 	);
 
 	/******************/

Modified: branches/SAMBA_4_0/source/torture/rpc/winreg.c
===================================================================
--- branches/SAMBA_4_0/source/torture/rpc/winreg.c	2004-12-09 07:51:20 UTC (rev 4112)
+++ branches/SAMBA_4_0/source/torture/rpc/winreg.c	2004-12-09 07:52:00 UTC (rev 4113)
@@ -293,12 +293,9 @@
 {
 	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 @@
 			   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);



More information about the samba-cvs mailing list