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

jelmer at samba.org jelmer at samba.org
Wed Dec 8 22:02:50 GMT 2004


Author: jelmer
Date: 2004-12-08 22:02:49 +0000 (Wed, 08 Dec 2004)
New Revision: 4105

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

Log:
Fix IDL for QueryValue() and add a torture test for it.
Thanks to Michael Allen for some hints on what was wrong with the previous IDL.


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-08 17:43:04 UTC (rev 4104)
+++ branches/SAMBA_4_0/source/librpc/idl/winreg.idl	2004-12-08 22:02:49 UTC (rev 4105)
@@ -229,15 +229,14 @@
 	/* Function: 0x11 */
 	WERROR winreg_QueryValue(
 		[in,ref] policy_handle *handle,
-		[in] winreg_String valuename,
-		[in] uint32 *reserved,
+		[in] winreg_String value_name,
+		[in,out] uint32 *type,
 		[in] uint32 *offered,
-		[in] uint32 *unknown1,
-		[in] uint32 *unknown2,
-		[out] uint32 *type, 
-		[out] uint8 *data,
-		[in,out] uint32 *offered2,
-		[in,out] uint32 *val_length
+		[in] uint32 unknown1,
+		[in] uint32 unknown2,
+		[out] EnumValueOut *value_out,
+		[in,out] uint32 *value_len1,
+		[in,out] uint32 *value_len2
 	);
 
 	/******************/

Modified: branches/SAMBA_4_0/source/torture/rpc/winreg.c
===================================================================
--- branches/SAMBA_4_0/source/torture/rpc/winreg.c	2004-12-08 17:43:04 UTC (rev 4104)
+++ branches/SAMBA_4_0/source/torture/rpc/winreg.c	2004-12-08 22:02:49 UTC (rev 4105)
@@ -168,6 +168,8 @@
 	}
 
 	if (!W_ERROR_IS_OK(r.out.result)) {
+		printf("OpenKey failed - %s\n", win_errstr(r.out.result));
+
 		return False;
 	}
 
@@ -263,9 +265,6 @@
 			if (!test_OpenKey(
 				    p, mem_ctx, handle, r.out.out_name->name,
 				    &key_handle)) {
-				printf("OpenKey(%s) failed - %s\n",
-				       r.out.out_name->name, 
-				       win_errstr(r.out.result));
 			} else {
 				test_key(p, mem_ctx, &key_handle, depth + 1);
 			}
@@ -290,6 +289,41 @@
 	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;
+	NTSTATUS status;
+	struct EnumValueNameOut valname;
+	uint32 zero = 0;
+	uint32 offered = 0xfff;
+
+	valname.name = valuename;
+
+	printf("Testing QueryValue\n");
+
+	r.in.handle = handle;
+	r.in.value_name.name = valuename;
+	r.in.type = &zero;
+	r.in.unknown1 = 0;
+	r.in.unknown2 = 0;
+	r.in.offered = &offered;
+	r.in.value_len1 = &offered;
+	r.in.value_len2 = &zero;
+
+	status = dcerpc_winreg_QueryValue(p, mem_ctx, &r);
+	if(NT_STATUS_IS_ERR(status)) {
+		printf("QueryValue failed - %s\n", nt_errstr(status));
+		return False;
+	}
+
+	if (!W_ERROR_IS_OK(r.out.result)) {
+		printf("QueryValue failed - %s\n", win_errstr(r.out.result));
+		return False;
+	}
+
+	return True;
+}
+
 static BOOL test_EnumValue(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, 
 			   struct policy_handle *handle, int max_valnamelen, int max_valbufsize)
 {
@@ -298,6 +332,7 @@
 	struct EnumValueIn buf_val;
 	uint32 type;
 	uint32 len1 = max_valbufsize, len2 = 0;
+	BOOL ret = True;
 
 	printf("testing EnumValue\n");
 
@@ -324,6 +359,10 @@
 			return False;
 		}
 
+		if (W_ERROR_IS_OK(r.out.result)) {
+			ret &= test_QueryValue(p, mem_ctx, handle, r.out.name_out.name);
+		}
+
 		r.in.enum_index++;
 	} while (W_ERROR_IS_OK(r.out.result));
 
@@ -332,7 +371,7 @@
 		return False;
 	}
 
-	return True;
+	return ret;
 }
 
 static BOOL test_OpenHKLM(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,



More information about the samba-cvs mailing list