From 7d212460a5c00b4039440c2db0dde56e7d519d66 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 8 Nov 2003 11:21:57 +0000 Subject: - corrected some lsa idl - updated lsa parse code from pidl (This used to be commit 3983b2aee77b0e093847bfc02e02b83ab281f5dd) --- source4/torture/rpc/lsa.c | 56 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 7 deletions(-) (limited to 'source4/torture/rpc') diff --git a/source4/torture/rpc/lsa.c b/source4/torture/rpc/lsa.c index a542cad636..5cf56acd30 100644 --- a/source4/torture/rpc/lsa.c +++ b/source4/torture/rpc/lsa.c @@ -22,7 +22,7 @@ #include "includes.h" /* - this really shouldn't be here .... + these really shouldn't be here .... */ static char *lsa_sid_string_talloc(TALLOC_CTX *mem_ctx, struct dom_sid *sid) { @@ -53,6 +53,31 @@ static char *lsa_sid_string_talloc(TALLOC_CTX *mem_ctx, struct dom_sid *sid) return ret; } +static int dom_sid_compare(struct dom_sid *sid1, struct dom_sid *sid2) +{ + int i; + + if (sid1 == sid2) return 0; + if (!sid1) return -1; + if (!sid2) return 1; + + /* Compare most likely different rids, first: i.e start at end */ + if (sid1->num_auths != sid2->num_auths) + return sid1->num_auths - sid2->num_auths; + + for (i = sid1->num_auths-1; i >= 0; --i) + if (sid1->sub_auths[i] != sid2->sub_auths[i]) + return sid1->sub_auths[i] - sid2->sub_auths[i]; + + if (sid1->sid_rev_num != sid2->sid_rev_num) + return sid1->sid_rev_num - sid2->sid_rev_num; + + for (i = 0; i < 6; i++) + if (sid1->id_auth[i] != sid2->id_auth[i]) + return sid1->id_auth[i] - sid2->id_auth[i]; + + return 0; +} static BOOL test_OpenPolicy(struct dcerpc_pipe *p) { @@ -124,24 +149,41 @@ static BOOL test_EnumSids(struct dcerpc_pipe *p, struct policy_handle *handle) { NTSTATUS status; - struct dom_sid **sids; - uint32 num_entries = 100; + struct lsa_SidArray sids1, sids2; + uint32 resume_handle; int i; printf("\ntesting EnumSids\n"); - status = dcerpc_lsa_EnumSids(p, mem_ctx, handle, 0, &num_entries, &sids); + resume_handle = 0; + status = dcerpc_lsa_EnumSids(p, mem_ctx, handle, &resume_handle, 100, &sids1); if (!NT_STATUS_IS_OK(status)) { printf("EnumSids failed - %s\n", nt_errstr(status)); return False; } - printf("Got %d sids\n", num_entries); + printf("Got %d sids resume_handle=%u\n", sids1.num_sids, resume_handle); - for (i=0;i