From b03a02ab25df3d6d043c75a77b6f17cbe0bb454f Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 15 Apr 2004 13:17:36 +0000 Subject: r232: Test whether querydispinfo and enumdomgroups return the same set of group names. Volker (This used to be commit 481cec94c47ffda341e00d628cf34c2c7b5de2fa) --- source4/torture/rpc/samr.c | 133 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) (limited to 'source4/torture/rpc') diff --git a/source4/torture/rpc/samr.c b/source4/torture/rpc/samr.c index 7970e67cef..39b181e1ad 100644 --- a/source4/torture/rpc/samr.c +++ b/source4/torture/rpc/samr.c @@ -1176,6 +1176,135 @@ static BOOL test_QueryDomainInfo(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, return True; } +void add_string_to_array(TALLOC_CTX *mem_ctx, + const char *str, const char ***strings, int *num) +{ + *strings = talloc_realloc(mem_ctx, *strings, + ((*num)+1) * sizeof(**strings)); + + if (*strings == NULL) + return; + + (*strings)[*num] = str; + *num += 1; + + return; +} + +/* Test whether querydispinfo level 5 and enumdomgroups return the same + set of group names. */ + +static BOOL test_GroupList(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, + struct policy_handle *handle) +{ + struct samr_EnumDomainGroups q1; + struct samr_QueryDisplayInfo q2; + NTSTATUS status; + uint32 resume_handle=0; + int i; + BOOL ret = True; + + int num_names = 0; + const char **names = NULL; + + printf("Testing coherency of querydispinfo vs enumdomgroups\n"); + + q1.in.handle = handle; + q1.in.resume_handle = &resume_handle; + q1.in.max_size = 5; + q1.out.resume_handle = &resume_handle; + + status = STATUS_MORE_ENTRIES; + while (NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES)) { + status = dcerpc_samr_EnumDomainGroups(p, mem_ctx, &q1); + + if (!NT_STATUS_IS_OK(status) && + !NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES)) + break; + + for (i=0; icount; i++) { + add_string_to_array(mem_ctx, + q1.out.sam->entries[i].name.name, + &names, &num_names); + } + } + + if (!NT_STATUS_IS_OK(status)) { + printf("EnumDomainGroups failed - %s\n", nt_errstr(status)); + return False; + } + + if (!q1.out.sam) { + return False; + } + + q2.in.handle = handle; + q2.in.level = 5; + q2.in.start_idx = 0; + q2.in.max_entries = 5; + q2.in.buf_size = (uint32)-1; + + status = STATUS_MORE_ENTRIES; + while (NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES)) { + status = dcerpc_samr_QueryDisplayInfo(p, mem_ctx, &q2); + + if (!NT_STATUS_IS_OK(status) && + !NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES)) + break; + + for (i=0; i