From 6adb5717f5d6d4cb67b4d5baef8d99edaadd9a23 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 15 Sep 2006 20:36:38 +0000 Subject: r18566: fixed the winreg pipe and winreg tests Jerry, there is a big difference on the wire between these two: [out] uint32 x; and [out] uint32 *x; if you change from [out] uint32 x; then you need to change to: [out,ref] uint32 *x; otherwise it changes the format on the wire, which means we are no longer compatible with MS servers. but be aware that even if you change to a ref ptr, you also need to change all the client code to set all the return variables in the out part of the structure. That's why I don't like the MIDL restriction of forcing the use of ref pointers for output variables - it makes life much harder when writing client code, and makes the code much more error prone (just look at all the extra code needed to make this work again). I know we could auto-allocate these variables in the generated client side NDR code, but if we did that then we would have no way of doing a _real_ ref out pointer, which we really wanted to set to some already allocated variable. So please hold off on changing our idl to use the MIDL convention for output variables until Jelmer and I have had a good "chat" about this :-) (This used to be commit 555aed43ba3c08360ca7fa921622b80732a7f657) --- source4/torture/rpc/winreg.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'source4/torture') diff --git a/source4/torture/rpc/winreg.c b/source4/torture/rpc/winreg.c index 025411f3bd..370a023dd5 100644 --- a/source4/torture/rpc/winreg.c +++ b/source4/torture/rpc/winreg.c @@ -54,10 +54,12 @@ static BOOL test_GetVersion(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, { NTSTATUS status; struct winreg_GetVersion r; - + uint32_t v; printf("\ntesting GetVersion\n"); + ZERO_STRUCT(r); r.in.handle = handle; + r.out.version = &v; status = dcerpc_winreg_GetVersion(p, mem_ctx, &r); @@ -372,10 +374,24 @@ static BOOL test_QueryInfoKey(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, { NTSTATUS status; struct winreg_QueryInfoKey r; + uint32_t num_subkeys, max_subkeylen, max_subkeysize, + num_values, max_valnamelen, max_valbufsize, + secdescsize; + NTTIME last_changed_time; printf("\ntesting QueryInfoKey\n"); + ZERO_STRUCT(r); r.in.handle = handle; + r.out.num_subkeys = &num_subkeys; + r.out.max_subkeylen = &max_subkeylen; + r.out.max_subkeysize = &max_subkeysize; + r.out.num_values = &num_values; + r.out.max_valnamelen = &max_valnamelen; + r.out.max_valbufsize = &max_valbufsize; + r.out.secdescsize = &secdescsize; + r.out.last_changed_time = &last_changed_time; + init_winreg_String(&r.in.class_in, class); status = dcerpc_winreg_QueryInfoKey(p, mem_ctx, &r); -- cgit