From bf07bf2857517b0972f47f5e9b46b7bde80c041b Mon Sep 17 00:00:00 2001 From: Günther Deschner Date: Tue, 29 Jun 2010 11:40:24 +0200 Subject: winreg: fix winreg_QueryMultipleValues() IDL and torture tests. Guenther --- source4/torture/ndr/winreg.c | 34 +++++++++++++++++----------------- source4/torture/rpc/winreg.c | 12 ++++++------ 2 files changed, 23 insertions(+), 23 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/ndr/winreg.c b/source4/torture/ndr/winreg.c index 14ee84484a..2bd28f0fb7 100644 --- a/source4/torture/ndr/winreg.c +++ b/source4/torture/ndr/winreg.c @@ -242,14 +242,16 @@ static const uint8_t querymultiplevalues_in_data[] = { static bool querymultiplevalues_in_check(struct torture_context *tctx, struct winreg_QueryMultipleValues *r) { + torture_assert_mem_equal(tctx, r->in.key_handle, querymultiplevalues_in_data, sizeof(struct policy_handle), "key handle"); torture_assert_int_equal(tctx, r->in.num_values, 1, "num values"); - torture_assert_str_equal(tctx, r->in.values[0].name->name, "HOMEPATH", - "name"); - - torture_assert_int_equal(tctx, r->in.values[0].type, 0, "type"); - torture_assert_int_equal(tctx, r->in.values[0].offset, 0, "offset"); - torture_assert_int_equal(tctx, r->in.values[0].length, 0, "length"); - torture_assert_int_equal(tctx, *r->in.buffer_size, 76, "buffer size"); + torture_assert_str_equal(tctx, r->in.values_in[0].ve_valuename->name, "HOMEPATH", "name"); + torture_assert_int_equal(tctx, r->in.values_in[0].ve_valuename->length, 18, "name len"); + torture_assert_int_equal(tctx, r->in.values_in[0].ve_valuename->size, 18, "name size"); + torture_assert_int_equal(tctx, r->in.values_in[0].ve_valuelen, 0, "length"); + torture_assert(tctx, (r->in.values_in[0].ve_valueptr == NULL), "ve_valueptr"); + torture_assert_int_equal(tctx, r->in.values_in[0].ve_type, 0, "type"); + torture_assert_mem_equal(tctx, r->in.buffer, querymultiplevalues_in_data+0x6C, *r->in.buffer_size, "buffer"); + torture_assert_int_equal(tctx, *r->in.buffer_size, 32, "buffer size"); return true; } @@ -274,16 +276,12 @@ static const uint8_t querymultiplevalues_out_data[] = { static bool querymultiplevalues_out_check(struct torture_context *tctx, struct winreg_QueryMultipleValues *r) { - torture_assert_str_equal(tctx, r->out.values[0].name->name, "HOMEPATH", - "name"); - - torture_assert_int_equal(tctx, r->out.values[0].type, 0, "type"); - torture_assert_int_equal(tctx, r->out.values[0].offset, 0, "offset"); - torture_assert_int_equal(tctx, r->out.values[0].length, 0, "length"); + torture_assert_str_equal(tctx, r->out.values_out[0].ve_valuename->name, "HOMEPATH", "name"); + torture_assert_int_equal(tctx, r->out.values_out[0].ve_type, 0, "type"); + torture_assert_int_equal(tctx, r->out.values_out[0].ve_valuelen, 0, "length"); /* FIXME: r->out.buffer */ torture_assert_int_equal(tctx, *r->out.buffer_size, 76, "buffer size"); - torture_assert_werr_equal(tctx, r->out.result, WERR_MORE_DATA, - "return code"); + torture_assert_werr_equal(tctx, r->out.result, WERR_MORE_DATA, "return code"); return true; } @@ -543,8 +541,10 @@ struct torture_suite *ndr_winreg_suite(TALLOC_CTX *ctx) torture_suite_add_ndr_pull_fn_test(suite, winreg_QueryValue, queryvalue_in_data, NDR_IN, queryvalue_in_check ); torture_suite_add_ndr_pull_fn_test(suite, winreg_QueryValue, queryvalue_out_data, NDR_OUT, queryvalue_out_check ); - /*torture_suite_add_ndr_pull_fn_test(suite, winreg_QueryMultipleValues, querymultiplevalues_in_data, NDR_IN, querymultiplevalues_in_check ); - torture_suite_add_ndr_pull_fn_test(suite, winreg_QueryMultipleValues, querymultiplevalues_out_data, NDR_OUT, querymultiplevalues_out_check );*/ + torture_suite_add_ndr_pull_fn_test(suite, winreg_QueryMultipleValues, querymultiplevalues_in_data, NDR_IN, querymultiplevalues_in_check ); + /* we cannot do this as long we don't have the ability to bring in + * r->in.num_values */ +/* torture_suite_add_ndr_pull_fn_test(suite, winreg_QueryMultipleValues, querymultiplevalues_out_data, NDR_OUT, querymultiplevalues_out_check ); */ torture_suite_add_ndr_pull_fn_test(suite, winreg_FlushKey, flushkey_in_data, NDR_IN, flushkey_in_check ); torture_suite_add_ndr_pull_fn_test(suite, winreg_FlushKey, flushkey_out_data, NDR_OUT, flushkey_out_check ); diff --git a/source4/torture/rpc/winreg.c b/source4/torture/rpc/winreg.c index f0510d879a..9deedbf46f 100644 --- a/source4/torture/rpc/winreg.c +++ b/source4/torture/rpc/winreg.c @@ -1616,13 +1616,13 @@ static bool test_QueryMultipleValues(struct dcerpc_binding_handle *b, uint32_t bufsize=0; ZERO_STRUCT(r); + r.in.key_handle = handle; - r.in.values = r.out.values = talloc_array(tctx, struct QueryMultipleValue, 1); - r.in.values[0].name = talloc(tctx, 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.values_in = r.out.values_out = talloc_zero_array(tctx, struct QueryMultipleValue, 1); + r.in.values_in[0].ve_valuename = talloc(tctx, struct winreg_ValNameBuf); + r.in.values_in[0].ve_valuename->name = valuename; + /* size needs to be set manually for winreg_ValNameBuf */ + r.in.values_in[0].ve_valuename->size = strlen_m_term(valuename)*2; r.in.num_values = 1; r.in.buffer_size = r.out.buffer_size = talloc(tctx, uint32_t); -- cgit