diff options
Diffstat (limited to 'source4/torture')
-rw-r--r-- | source4/torture/rpc/dfs.c | 90 | ||||
-rw-r--r-- | source4/torture/rpc/echo.c | 43 | ||||
-rw-r--r-- | source4/torture/rpc/lsa.c | 4 | ||||
-rw-r--r-- | source4/torture/torture.c | 1 |
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}}; |