summaryrefslogtreecommitdiff
path: root/source4
diff options
context:
space:
mode:
Diffstat (limited to 'source4')
-rw-r--r--source4/librpc/rpc/rpc_lsa.c88
-rw-r--r--source4/torture/rpc/lsa.c50
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;
}