summaryrefslogtreecommitdiff
path: root/source4/torture
diff options
context:
space:
mode:
Diffstat (limited to 'source4/torture')
-rw-r--r--source4/torture/rpc/dfs.c90
-rw-r--r--source4/torture/rpc/echo.c43
-rw-r--r--source4/torture/rpc/lsa.c4
-rw-r--r--source4/torture/torture.c1
4 files changed, 131 insertions, 7 deletions
diff --git a/source4/torture/rpc/dfs.c b/source4/torture/rpc/dfs.c
new file mode 100644
index 0000000000..3f8d789fe8
--- /dev/null
+++ b/source4/torture/rpc/dfs.c
@@ -0,0 +1,90 @@
+/*
+ Unix SMB/CIFS implementation.
+ test suite for lsa dfs 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_Exist(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
+{
+ NTSTATUS status;
+ struct dfs_Exist r;
+ uint32 exist = 0;
+
+ r.out.exist_flag = ∃
+
+ status = dcerpc_dfs_Exist(p, mem_ctx, &r);
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("Exist failed - %s\n", nt_errstr(status));
+ return False;
+ }
+
+ printf("exist=%d\n", exist);
+
+ return True;
+}
+
+static BOOL test_Enum(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
+{
+ NTSTATUS status;
+ struct dfs_Enum r;
+ uint32 resume_handle = 0;
+
+ r.in.name = "";
+ r.in.level = 1;
+ r.in.buffer_size = 20000;
+ r.in.resume_handle = &resume_handle;
+ r.out.resume_handle = &resume_handle;
+
+ status = dcerpc_dfs_Enum(p, mem_ctx, &r);
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("Enum failed - %s\n", nt_errstr(status));
+ return False;
+ }
+
+ return True;
+}
+
+BOOL torture_rpc_dfs(int dummy)
+{
+ NTSTATUS status;
+ struct dcerpc_pipe *p;
+ TALLOC_CTX *mem_ctx;
+ BOOL ret = True;
+
+ mem_ctx = talloc_init("torture_rpc_dfs");
+
+ status = torture_rpc_connection(&p, "netdfs");
+ if (!NT_STATUS_IS_OK(status)) {
+ return False;
+ }
+
+ if (!test_Exist(p, mem_ctx)) {
+ ret = False;
+ }
+
+ if (!test_Enum(p, mem_ctx)) {
+ ret = False;
+ }
+
+ torture_rpc_close(p);
+
+ return ret;
+}
diff --git a/source4/torture/rpc/echo.c b/source4/torture/rpc/echo.c
index ebf82c692e..b8c2437e4b 100644
--- a/source4/torture/rpc/echo.c
+++ b/source4/torture/rpc/echo.c
@@ -68,8 +68,7 @@ static BOOL test_echodata(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
}
r.in.len = len;
- r.in.data = data_in;
- r.out.data = data_out;
+ r.in.in_data = data_in;
status = dcerpc_echo_EchoData(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
@@ -77,9 +76,18 @@ static BOOL test_echodata(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
return False;
}
- if (memcmp(data_in, data_out, len) != 0) {
- printf("Bad data returned for len %d!\n", len);
- return False;
+ data_out = r.out.out_data;
+
+ for (i=0;i<len;i++) {
+ if (data_in[i] != data_out[i]) {
+ printf("Bad data returned for len %d at offset %d\n",
+ len, i);
+ printf("in:\n");
+ dump_data(0, data_in, MIN(len, 16));
+ printf("out:\n");
+ dump_data(0, data_out, MIN(len, 16));
+ return False;
+ }
}
@@ -154,6 +162,27 @@ static BOOL test_sinkdata(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
return True;
}
+
+/*
+ test the testcall interface
+*/
+static BOOL test_testcall(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
+{
+ NTSTATUS status;
+ struct TestCall r;
+
+ printf("\nTesting TestCall\n");
+ status = dcerpc_TestCall(p, mem_ctx, &r);
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("TestCall failed - %s\n", nt_errstr(status));
+ return False;
+ }
+
+ NDR_PRINT_DEBUG(Struct1, r.out.s1);
+
+ return True;
+}
+
BOOL torture_rpc_echo(int dummy)
{
NTSTATUS status;
@@ -184,6 +213,10 @@ BOOL torture_rpc_echo(int dummy)
ret = False;
}
+ if (!test_testcall(p, mem_ctx)) {
+ ret = False;
+ }
+
printf("\n");
torture_rpc_close(p);
diff --git a/source4/torture/rpc/lsa.c b/source4/torture/rpc/lsa.c
index 9d0177edfa..10a2545b96 100644
--- a/source4/torture/rpc/lsa.c
+++ b/source4/torture/rpc/lsa.c
@@ -288,8 +288,8 @@ static BOOL test_EnumPrivsAccount(struct dcerpc_pipe *p,
return False;
}
- printf("received %d privileges with unknown=0x%x\n",
- r.out.privs?r.out.privs->count:0, r.out.unknown);
+ printf("received %d privileges\n",
+ r.out.privs?r.out.privs->count:0);
if (r.out.privs) {
int i;
diff --git a/source4/torture/torture.c b/source4/torture/torture.c
index d88a58032f..967631c66b 100644
--- a/source4/torture/torture.c
+++ b/source4/torture/torture.c
@@ -3986,6 +3986,7 @@ static struct {
{"SCAN-SMB", torture_smb_scan, 0},
{"RPC-LSA", torture_rpc_lsa, 0},
{"RPC-ECHO", torture_rpc_echo, 0},
+ {"RPC-DFS", torture_rpc_dfs, 0},
{NULL, NULL, 0}};