diff options
Diffstat (limited to 'source4')
-rw-r--r-- | source4/torture/rpc/async_bind.c | 31 | ||||
-rw-r--r-- | source4/torture/smbtorture.c | 12 | ||||
-rw-r--r-- | source4/torture/torture.c | 1 | ||||
-rw-r--r-- | source4/torture/torture.h | 1 |
4 files changed, 34 insertions, 11 deletions
diff --git a/source4/torture/rpc/async_bind.c b/source4/torture/rpc/async_bind.c index 960f099c9b..aeac909e9d 100644 --- a/source4/torture/rpc/async_bind.c +++ b/source4/torture/rpc/async_bind.c @@ -24,6 +24,7 @@ #include "includes.h" #include "torture/torture.h" #include "lib/events/events.h" +#include "libcli/composite/composite.h" #include "librpc/gen_ndr/ndr_lsa.h" #include "lib/cmdline/popt_common.h" #include "librpc/rpc/dcerpc.h" @@ -43,23 +44,30 @@ BOOL torture_async_bind(struct torture_context *torture) int i; const char *binding_string; struct cli_credentials *creds; + extern int torture_numasync; -#define ASYNC_COUNT 100 - struct composite_context *bind_req[ASYNC_COUNT]; - struct dcerpc_pipe *pipe[ASYNC_COUNT]; - struct dcerpc_interface_table *table[ASYNC_COUNT]; + struct composite_context **bind_req; + struct dcerpc_pipe **pipe; + const struct dcerpc_interface_table **table; - if (!lp_parm_bool(-1, "torture", "dangerous", False)) { + if (!lp_parm_bool(-1, "torture", "async", False)) { printf("async bind test disabled - enable dangerous tests to use\n"); return True; } - + binding_string = lp_parm_string(-1, "torture", "binding"); /* talloc context */ mem_ctx = talloc_init("torture_async_bind"); if (mem_ctx == NULL) return False; + bind_req = talloc_array(torture, struct composite_context*, torture_numasync); + if (bind_req == NULL) return False; + pipe = talloc_array(torture, struct dcerpc_pipe*, torture_numasync); + if (pipe == NULL) return False; + table = talloc_array(torture, const struct dcerpc_interface_table*, torture_numasync); + if (table == NULL) return False; + /* event context */ evt_ctx = event_context_init(mem_ctx); if (evt_ctx == NULL) return False; @@ -67,15 +75,20 @@ BOOL torture_async_bind(struct torture_context *torture) /* credentials */ creds = cmdline_credentials; - for (i = 0; i < ASYNC_COUNT; i++) { + /* send bind requests */ + for (i = 0; i < torture_numasync; i++) { table[i] = &dcerpc_table_lsarpc; bind_req[i] = dcerpc_pipe_connect_send(mem_ctx, &pipe[i], binding_string, table[i], creds, evt_ctx); } - for (i = 0; i < ASYNC_COUNT; i++) { + /* recv bind requests */ + for (i = 0; i < torture_numasync; i++) { status = dcerpc_pipe_connect_recv(bind_req[i], mem_ctx, &pipe[i]); - if (!NT_STATUS_IS_OK(status)) return False; + if (!NT_STATUS_IS_OK(status)) { + printf("async rpc connection failed: %s\n", nt_errstr(status)); + return False; + } } talloc_free(mem_ctx); diff --git a/source4/torture/smbtorture.c b/source4/torture/smbtorture.c index 22e69120df..271444ed9c 100644 --- a/source4/torture/smbtorture.c +++ b/source4/torture/smbtorture.c @@ -265,7 +265,7 @@ const static struct torture_ui_ops std_ui_ops = { char **argv_new; poptContext pc; enum {OPT_LOADFILE=1000,OPT_UNCLIST,OPT_TIMELIMIT,OPT_DNS, - OPT_DANGEROUS,OPT_SMB_PORTS}; + OPT_DANGEROUS,OPT_SMB_PORTS,OPT_ASYNC}; struct poptOption long_options[] = { POPT_AUTOHELP @@ -281,7 +281,12 @@ const static struct torture_ui_ops std_ui_ops = { {"timelimit", 't', POPT_ARG_STRING, NULL, OPT_TIMELIMIT, "timelimit", NULL}, {"failures", 'f', POPT_ARG_INT, &torture_failures, 0, "failures", NULL}, {"parse-dns", 'D', POPT_ARG_STRING, NULL, OPT_DNS, "parse-dns", NULL}, - {"dangerous", 'X', POPT_ARG_NONE, NULL, OPT_DANGEROUS, "dangerous", NULL}, + {"dangerous", 'X', POPT_ARG_NONE, NULL, OPT_DANGEROUS, + "run dangerous tests (eg. wiping out password database)", NULL}, + {"async", 'a', POPT_ARG_NONE, NULL, OPT_ASYNC, + "run async tests", NULL}, + {"num-async", 0, POPT_ARG_INT, &torture_numasync, 0, + "number of simultaneous async requests", NULL}, {"maximum-runtime", 0, POPT_ARG_INT, &max_runtime, 0, "set maximum time for smbtorture to live", "seconds"}, POPT_COMMON_SAMBA @@ -320,6 +325,9 @@ const static struct torture_ui_ops std_ui_ops = { case OPT_DANGEROUS: lp_set_cmdline("torture:dangerous", "Yes"); break; + case OPT_ASYNC: + lp_set_cmdline("torture:async", "Yes"); + break; case OPT_SMB_PORTS: lp_set_cmdline("smb ports", poptGetOptArg(pc)); break; diff --git a/source4/torture/torture.c b/source4/torture/torture.c index 9852d886f8..e4470991a4 100644 --- a/source4/torture/torture.c +++ b/source4/torture/torture.c @@ -55,6 +55,7 @@ _PUBLIC_ int torture_numops=10; _PUBLIC_ int torture_entries=1000; _PUBLIC_ int torture_failures=1; _PUBLIC_ int torture_seed=0; +_PUBLIC_ int torture_numasync=100; _PUBLIC_ BOOL use_oplocks; static int procnum; /* records process count number when forking */ static struct smbcli_state *current_cli; diff --git a/source4/torture/torture.h b/source4/torture/torture.h index 271a9bf4a3..ce55ac037d 100644 --- a/source4/torture/torture.h +++ b/source4/torture/torture.h @@ -40,6 +40,7 @@ extern int torture_nprocs; extern int torture_seed; extern int torture_numops; extern int torture_failures; +extern int torture_numasync; extern BOOL use_level_II_oplocks; struct torture_test; |