diff options
Diffstat (limited to 'source4')
-rw-r--r-- | source4/librpc/rpc/rpc_lsa.c | 88 | ||||
-rw-r--r-- | source4/torture/rpc/lsa.c | 50 |
2 files changed, 47 insertions, 91 deletions
diff --git a/source4/librpc/rpc/rpc_lsa.c b/source4/librpc/rpc/rpc_lsa.c index 2eff2838fc..ee8075d5bd 100644 --- a/source4/librpc/rpc/rpc_lsa.c +++ b/source4/librpc/rpc/rpc_lsa.c @@ -27,43 +27,20 @@ OpenPolicy interface */ NTSTATUS dcerpc_lsa_OpenPolicy(struct dcerpc_pipe *p, - const char *server, - struct lsa_ObjectAttribute *attr, - uint32 access_mask, - struct policy_handle *handle) + TALLOC_CTX *mem_ctx, + struct lsa_OpenPolicy *r) { - struct lsa_OpenPolicy r; NTSTATUS status; - TALLOC_CTX *mem_ctx; - uint16 s; - - mem_ctx = talloc_init("dcerpc_lsa_openpolicy"); - if (!mem_ctx) { - return NT_STATUS_NO_MEMORY; - } - /* fill the .in side of the call */ - s = server[0]; - r.in.system_name = &s; - r.in.attr = attr; - r.in.desired_access = access_mask; - r.out.handle = handle; - - /* make the call */ status = dcerpc_ndr_request(p, LSA_OPENPOLICY, mem_ctx, (ndr_push_fn_t) ndr_push_lsa_OpenPolicy, (ndr_pull_fn_t) ndr_pull_lsa_OpenPolicy, - &r); + r); if (!NT_STATUS_IS_OK(status)) { - goto done; + return status; } - /* and extract the .out parameters */ - status = r.out.result; - -done: - talloc_destroy(mem_ctx); - return status; + return r->out.result; } @@ -71,41 +48,20 @@ done: OpenPolicy2 interface */ NTSTATUS dcerpc_lsa_OpenPolicy2(struct dcerpc_pipe *p, - const char *server, - struct lsa_ObjectAttribute *attr, - uint32 access_mask, - struct policy_handle *handle) + TALLOC_CTX *mem_ctx, + struct lsa_OpenPolicy2 *r) { - struct lsa_OpenPolicy2 r; NTSTATUS status; - TALLOC_CTX *mem_ctx; - - mem_ctx = talloc_init("dcerpc_lsa_openpolicy2"); - if (!mem_ctx) { - return NT_STATUS_NO_MEMORY; - } - - /* fill the .in side of the call */ - r.in.system_name = server; - r.in.attr = attr; - r.in.desired_access = access_mask; - r.out.handle = handle; - /* make the call */ status = dcerpc_ndr_request(p, LSA_OPENPOLICY2, mem_ctx, (ndr_push_fn_t) ndr_push_lsa_OpenPolicy2, (ndr_pull_fn_t) ndr_pull_lsa_OpenPolicy2, - &r); + r); if (!NT_STATUS_IS_OK(status)) { - goto done; + return status; } - - /* and extract the .out parameters */ - status = r.out.result; -done: - talloc_destroy(mem_ctx); - return status; + return r->out.result; } /* @@ -113,36 +69,20 @@ done: */ NTSTATUS dcerpc_lsa_EnumSids(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, - struct policy_handle *handle, - uint32 *resume_handle, - uint32 num_entries, - struct lsa_SidArray *sids) + struct lsa_EnumSids *r) { - struct lsa_EnumSids r; NTSTATUS status; - /* fill the .in side of the call */ - r.in.handle = handle; - r.in.resume_handle = resume_handle; - r.in.num_entries = num_entries; - - r.out.resume_handle = resume_handle; - r.out.sids = sids; - /* make the call */ status = dcerpc_ndr_request(p, LSA_ENUM_ACCOUNTS, mem_ctx, (ndr_push_fn_t) ndr_push_lsa_EnumSids, (ndr_pull_fn_t) ndr_pull_lsa_EnumSids, - &r); + r); if (!NT_STATUS_IS_OK(status)) { - goto done; + return status; } - /* and extract the .out parameters */ - status = r.out.result; - -done: - return status; + return r->out.result; } /* diff --git a/source4/torture/rpc/lsa.c b/source4/torture/rpc/lsa.c index 3f107be41e..61288b5f5b 100644 --- a/source4/torture/rpc/lsa.c +++ b/source4/torture/rpc/lsa.c @@ -79,12 +79,14 @@ static int dom_sid_compare(struct dom_sid *sid1, struct dom_sid *sid2) return 0; } -static BOOL test_OpenPolicy(struct dcerpc_pipe *p) +static BOOL test_OpenPolicy(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx) { struct lsa_ObjectAttribute attr; struct policy_handle handle; struct lsa_QosInfo qos; + struct lsa_OpenPolicy r; NTSTATUS status; + uint16 system_name = '\\'; printf("\ntesting OpenPolicy\n"); @@ -98,11 +100,12 @@ static BOOL test_OpenPolicy(struct dcerpc_pipe *p) attr.sec_desc = NULL; attr.sec_qos = &qos; - status = dcerpc_lsa_OpenPolicy(p, - "\\", - &attr, - SEC_RIGHTS_MAXIMUM_ALLOWED, - &handle); + r.in.system_name = &system_name; + r.in.attr = &attr; + r.in.desired_access = SEC_RIGHTS_MAXIMUM_ALLOWED; + r.out.handle = &handle; + + status = dcerpc_lsa_OpenPolicy(p, mem_ctx, &r); if (!NT_STATUS_IS_OK(status)) { printf("OpenPolicy failed - %s\n", nt_errstr(status)); return False; @@ -112,10 +115,12 @@ static BOOL test_OpenPolicy(struct dcerpc_pipe *p) } -static BOOL test_OpenPolicy2(struct dcerpc_pipe *p, struct policy_handle *handle) +static BOOL test_OpenPolicy2(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, + struct policy_handle *handle) { struct lsa_ObjectAttribute attr; struct lsa_QosInfo qos; + struct lsa_OpenPolicy2 r; NTSTATUS status; printf("\ntesting OpenPolicy2\n"); @@ -130,11 +135,12 @@ static BOOL test_OpenPolicy2(struct dcerpc_pipe *p, struct policy_handle *handle attr.sec_desc = NULL; attr.sec_qos = &qos; - status = dcerpc_lsa_OpenPolicy2(p, - "\\", - &attr, - SEC_RIGHTS_MAXIMUM_ALLOWED, - handle); + r.in.system_name = "\\"; + r.in.attr = &attr; + r.in.desired_access = SEC_RIGHTS_MAXIMUM_ALLOWED; + r.out.handle = handle; + + status = dcerpc_lsa_OpenPolicy2(p, mem_ctx, &r); if (!NT_STATUS_IS_OK(status)) { printf("OpenPolicy2 failed - %s\n", nt_errstr(status)); return False; @@ -270,14 +276,21 @@ static BOOL test_EnumSids(struct dcerpc_pipe *p, struct policy_handle *handle) { NTSTATUS status; + struct lsa_EnumSids r; struct lsa_SidArray sids1, sids2; - uint32 resume_handle; + uint32 resume_handle = 0; int i; printf("\ntesting EnumSids\n"); + r.in.handle = handle; + r.in.resume_handle = &resume_handle; + r.in.num_entries = 100; + r.out.resume_handle = &resume_handle; + r.out.sids = &sids1; + resume_handle = 0; - status = dcerpc_lsa_EnumSids(p, mem_ctx, handle, &resume_handle, 100, &sids1); + status = dcerpc_lsa_EnumSids(p, mem_ctx, &r); if (!NT_STATUS_IS_OK(status)) { printf("EnumSids failed - %s\n", nt_errstr(status)); return False; @@ -299,7 +312,10 @@ static BOOL test_EnumSids(struct dcerpc_pipe *p, printf("trying EnumSids partial listing (asking for 1 at 2)\n"); resume_handle = 2; - status = dcerpc_lsa_EnumSids(p, mem_ctx, handle, &resume_handle, 1, &sids2); + r.in.num_entries = 1; + r.out.sids = &sids2; + + status = dcerpc_lsa_EnumSids(p, mem_ctx, &r); if (!NT_STATUS_IS_OK(status)) { printf("EnumSids failed - %s\n", nt_errstr(status)); return False; @@ -328,11 +344,11 @@ BOOL torture_rpc_lsa(int dummy) return False; } - if (!test_OpenPolicy(p)) { + if (!test_OpenPolicy(p, mem_ctx)) { ret = False; } - if (!test_OpenPolicy2(p, &handle)) { + if (!test_OpenPolicy2(p, mem_ctx, &handle)) { ret = False; } |