summaryrefslogtreecommitdiff
path: root/source4/torture/rpc
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2003-11-15 06:00:21 +0000
committerAndrew Tridgell <tridge@samba.org>2003-11-15 06:00:21 +0000
commitba5a060136145abdfa4915fe0fecc4afe1180627 (patch)
treea63f5c07b979c3ba44a31f53959761f857c3d912 /source4/torture/rpc
parent78b7118d1aeccc9da490af614d4646a328ac2c46 (diff)
downloadsamba-ba5a060136145abdfa4915fe0fecc4afe1180627.tar.gz
samba-ba5a060136145abdfa4915fe0fecc4afe1180627.tar.bz2
samba-ba5a060136145abdfa4915fe0fecc4afe1180627.zip
added the first couple of calls from samr as IDL
samr_EnumDomains() works nicely (This used to be commit 7c162eaf3bb0195f9a2da05d6acd3c8e620f08d1)
Diffstat (limited to 'source4/torture/rpc')
-rw-r--r--source4/torture/rpc/lsa.c67
-rw-r--r--source4/torture/rpc/samr.c97
2 files changed, 101 insertions, 63 deletions
diff --git a/source4/torture/rpc/lsa.c b/source4/torture/rpc/lsa.c
index 726281e0d6..f65f49bafd 100644
--- a/source4/torture/rpc/lsa.c
+++ b/source4/torture/rpc/lsa.c
@@ -21,65 +21,6 @@
#include "includes.h"
-
-/*
- these really shouldn't be here ....
-*/
-static char *lsa_sid_string_talloc(TALLOC_CTX *mem_ctx, struct dom_sid *sid)
-{
- int i, ofs, maxlen;
- uint32 ia;
- char *ret;
-
- if (!sid) {
- return talloc_asprintf(mem_ctx, "(NULL SID)");
- }
-
- maxlen = sid->num_auths * 11 + 25;
- ret = talloc(mem_ctx, maxlen);
- if (!ret) return NULL;
-
- ia = (sid->id_auth[5]) +
- (sid->id_auth[4] << 8 ) +
- (sid->id_auth[3] << 16) +
- (sid->id_auth[2] << 24);
-
- ofs = snprintf(ret, maxlen, "S-%u-%lu",
- (unsigned int)sid->sid_rev_num, (unsigned long)ia);
-
- for (i = 0; i < sid->num_auths; i++) {
- ofs += snprintf(ret + ofs, maxlen - ofs, "-%lu", (unsigned long)sid->sub_auths[i]);
- }
-
- 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, TALLOC_CTX *mem_ctx)
{
struct lsa_ObjectAttribute attr;
@@ -335,8 +276,8 @@ static BOOL test_EnumAccountRights(struct dcerpc_pipe *p,
static BOOL test_QuerySecObj(struct dcerpc_pipe *p,
TALLOC_CTX *mem_ctx,
- struct policy_handle *acct_handle,
- struct dom_sid *sid)
+ struct policy_handle *handle,
+ struct policy_handle *acct_handle)
{
NTSTATUS status;
struct lsa_QuerySecObj r;
@@ -366,7 +307,7 @@ static BOOL test_OpenAccount(struct dcerpc_pipe *p,
struct lsa_OpenAccount r;
struct policy_handle acct_handle;
- printf("Testing OpenAccount(%s)\n", lsa_sid_string_talloc(mem_ctx, sid));
+ printf("Testing OpenAccount\n");
r.in.handle = handle;
r.in.sid = sid;
@@ -590,7 +531,7 @@ static BOOL test_Close(struct dcerpc_pipe *p,
status = dcerpc_lsa_Close(p, mem_ctx, &r);
/* its really a fault - we need a status code for rpc fault */
- if (!NT_STATUS_EQUAL(status, NT_STATUS_INVALID_LEVEL)) {
+ if (!NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
printf("Close failed - %s\n", nt_errstr(status));
return False;
}
diff --git a/source4/torture/rpc/samr.c b/source4/torture/rpc/samr.c
new file mode 100644
index 0000000000..12d4ebbe93
--- /dev/null
+++ b/source4/torture/rpc/samr.c
@@ -0,0 +1,97 @@
+/*
+ Unix SMB/CIFS implementation.
+ test suite for samr rpc operations
+
+ Copyright (C) Andrew Tridgell 2003
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+
+static BOOL test_EnumDomains(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+ struct policy_handle *handle)
+{
+ NTSTATUS status;
+ struct samr_EnumDomains r;
+ uint32 resume_handle = 0;
+ uint32 num_entries;
+
+ r.in.handle = handle;
+ r.in.resume_handle = &resume_handle;
+ r.in.buf_size = (uint32)-1;
+ r.out.resume_handle = &resume_handle;
+ r.out.num_entries = &num_entries;
+
+ status = dcerpc_samr_EnumDomains(p, mem_ctx, &r);
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("EnumDomains failed - %s\n", nt_errstr(status));
+ return False;
+ }
+
+ NDR_PRINT_DEBUG(samr_SamArray, r.out.sam);
+
+ return True;
+}
+
+
+static BOOL test_Connect(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+ struct policy_handle *handle)
+{
+ NTSTATUS status;
+ struct samr_Connect r;
+
+ r.in.system_name = 0;
+ r.in.access_mask = SEC_RIGHTS_MAXIMUM_ALLOWED;
+ r.out.handle = handle;
+
+ status = dcerpc_samr_Connect(p, mem_ctx, &r);
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("Connect failed - %s\n", nt_errstr(status));
+ return False;
+ }
+
+ return True;
+}
+
+
+BOOL torture_rpc_samr(int dummy)
+{
+ NTSTATUS status;
+ struct dcerpc_pipe *p;
+ TALLOC_CTX *mem_ctx;
+ BOOL ret = True;
+ struct policy_handle handle;
+
+ mem_ctx = talloc_init("torture_rpc_samr");
+
+ status = torture_rpc_connection(&p, "samr");
+ if (!NT_STATUS_IS_OK(status)) {
+ return False;
+ }
+
+ if (!test_Connect(p, mem_ctx, &handle)) {
+ ret = False;
+ }
+
+ if (!test_EnumDomains(p, mem_ctx, &handle)) {
+ ret = False;
+ }
+
+ torture_rpc_close(p);
+
+ return ret;
+}