From 8aa051c7b2fa651d284321715f16d94215128abf Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 25 Aug 2004 14:31:59 +0000 Subject: [PATCH] r2071: - change smbtorture to use the popt_common stuff this means -U DOM\\user is know allowed - torture:userdomain is a new smb.conf parameter because lp_workgroup is not the domain of the user - we use torture:userdomain now in the tests instad of lp_workgroup - for backward compat the userdomain is lp_workgroup() by default and not lp_netbios_name(), which my change later to match 'net' and 'smbclient'.. - we now have dublicate options e.g. -N -s ... tridge: can we change this? metze (This used to be commit 4733dcbf5f17422a8a4c9f99664270b3aa66c586) --- source4/torture/ldap/basic.c | 2 +- source4/torture/raw/context.c | 2 +- source4/torture/rpc/bind.c | 2 +- source4/torture/rpc/netlogon.c | 8 +- source4/torture/torture.c | 261 ++++++++++++++------------------- 5 files changed, 116 insertions(+), 159 deletions(-) diff --git a/source4/torture/ldap/basic.c b/source4/torture/ldap/basic.c index 468cacc032f..06b703b4baa 100644 --- a/source4/torture/ldap/basic.c +++ b/source4/torture/ldap/basic.c @@ -79,7 +79,7 @@ BOOL torture_ldap_basic(int dummy) BOOL ret = True; const char *host = lp_parm_string(-1, "torture", "host"); const char *username = lp_parm_string(-1, "torture", "username"); - const char *domain = lp_workgroup(); + const char *domain = lp_parm_string(-1, "torture", "userdomain"); const char *password = lp_parm_string(-1, "torture", "password"); const char *userdn = lp_parm_string(-1, "torture", "ldap_userdn"); /*const char *basedn = lp_parm_string(-1, "torture", "ldap_basedn");*/ diff --git a/source4/torture/raw/context.c b/source4/torture/raw/context.c index 26039191f4c..7bc75a66272 100644 --- a/source4/torture/raw/context.c +++ b/source4/torture/raw/context.c @@ -77,7 +77,7 @@ static BOOL test_session(struct smbcli_state *cli, TALLOC_CTX *mem_ctx) username = lp_parm_string(-1, "torture", "username"); password = lp_parm_string(-1, "torture", "password"); - domain = lp_workgroup(); + domain = lp_parm_string(-1, "torture", "userdomain"); printf("create a second security context on the same transport\n"); session = smbcli_session_init(cli->transport); diff --git a/source4/torture/rpc/bind.c b/source4/torture/rpc/bind.c index 3402e3b7073..6602a9bcfd9 100644 --- a/source4/torture/rpc/bind.c +++ b/source4/torture/rpc/bind.c @@ -36,7 +36,7 @@ BOOL torture_multi_bind(int dummy) { struct dcerpc_pipe *p; - const char *domain = lp_workgroup(); + const char *domain = lp_parm_string(-1, "torture", "userdomain"); const char *username = lp_parm_string(-1, "torture", "username"); const char *password = lp_parm_string(-1, "torture", "password"); const char *pipe_uuid = DCERPC_LSARPC_UUID; diff --git a/source4/torture/rpc/netlogon.c b/source4/torture/rpc/netlogon.c index 205ff1e610d..1dec1f51098 100644 --- a/source4/torture/rpc/netlogon.c +++ b/source4/torture/rpc/netlogon.c @@ -272,6 +272,7 @@ enum ntlm_break { struct samlogon_state { TALLOC_CTX *mem_ctx; const char *account_name; + const char *account_domain; const char *password; struct dcerpc_pipe *p; struct netr_LogonSamLogon r; @@ -307,7 +308,7 @@ static NTSTATUS check_samlogon(struct samlogon_state *samlogon_state, samlogon_state->r.in.logon_level = levels[i]; samlogon_state->r.in.logon.network = &ninfo; - ninfo.identity_info.domain_name.string = lp_workgroup(); + ninfo.identity_info.domain_name.string = samlogon_state->account_domain; ninfo.identity_info.parameter_control = 0; ninfo.identity_info.logon_id_low = 0; ninfo.identity_info.logon_id_high = 0; @@ -663,7 +664,7 @@ static BOOL test_lmv2_ntlmv2_broken(struct samlogon_state *samlogon_state, enum ZERO_STRUCT(user_session_key); /* TODO - test with various domain cases, and without domain */ - if (!SMBNTLMv2encrypt(samlogon_state->account_name, lp_workgroup(), + if (!SMBNTLMv2encrypt(samlogon_state->account_name, samlogon_state->account_domain, samlogon_state->password, &samlogon_state->chall, &names_blob, &lmv2_response, &ntlmv2_response, @@ -888,6 +889,7 @@ static BOOL test_SamLogon(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx) samlogon_state.mem_ctx = mem_ctx; samlogon_state.account_name = lp_parm_string(-1, "torture", "username"); + samlogon_state.account_domain = lp_parm_string(-1, "torture", "userdomain"); samlogon_state.password = lp_parm_string(-1, "torture", "password"); samlogon_state.p = p; @@ -1534,7 +1536,7 @@ static BOOL test_InteractiveLogin(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, r.in.validation_level = 6; r.in.flags = 0; - pinfo.identity_info.domain_name.string = lp_workgroup(); + pinfo.identity_info.domain_name.string = lp_parm_string(-1, "torture", "userdomain"); pinfo.identity_info.parameter_control = 0; pinfo.identity_info.logon_id_low = 0; pinfo.identity_info.logon_id_high = 0; diff --git a/source4/torture/torture.c b/source4/torture/torture.c index d59218009cf..9488c987eca 100644 --- a/source4/torture/torture.c +++ b/source4/torture/torture.c @@ -87,6 +87,7 @@ BOOL torture_open_connection_share(struct smbcli_state **c, int flags = 0; NTSTATUS status; const char *username = lp_parm_string(-1, "torture", "username"); + const char *userdomain = lp_parm_string(-1, "torture", "userdomain"); const char *password = lp_parm_string(-1, "torture", "password"); if (use_kerberos) @@ -95,7 +96,7 @@ BOOL torture_open_connection_share(struct smbcli_state **c, status = smbcli_full_connection(c, lp_netbios_name(), hostname, NULL, sharename, "?????", - username, username[0]?lp_workgroup():"", + username, username[0]?userdomain:"", password, flags, &retry); if (!NT_STATUS_IS_OK(status)) { printf("Failed to open connection - %s\n", nt_errstr(status)); @@ -150,7 +151,7 @@ NTSTATUS torture_rpc_connection(struct dcerpc_pipe **p, } status = dcerpc_pipe_connect(p, binding, pipe_uuid, pipe_version, - lp_workgroup(), + lp_parm_string(-1, "torture", "userdomain"), lp_parm_string(-1, "torture", "username"), lp_parm_string(-1, "torture", "password")); @@ -822,12 +823,13 @@ static BOOL run_tcon_devtype_test(int dummy) const char *host = lp_parm_string(-1, "torture", "host"); const char *share = lp_parm_string(-1, "torture", "share"); const char *username = lp_parm_string(-1, "torture", "username"); + const char *userdomain = lp_parm_string(-1, "torture", "userdomain"); const char *password = lp_parm_string(-1, "torture", "password"); status = smbcli_full_connection(&cli1, lp_netbios_name(), host, NULL, share, "?????", - username, lp_workgroup(), + username, userdomain, password, flags, &retry); if (!NT_STATUS_IS_OK(status)) { @@ -4271,33 +4273,6 @@ static BOOL run_test(const char *name) } -/* - parse a username%password -*/ -static void parse_user(const char *user) -{ - char *username, *password = NULL, *p; - - username = strdup(user); - p = strchr_m(username,'%'); - if (p) { - *p = 0; - password = strdup(p+1); - } - - lp_set_cmdline("torture:username", username); - - if (password) { - lp_set_cmdline("torture:password", password); - } - - if (!lp_parm_string(-1,"torture","password")) { - password = getpass("password:"); - - lp_set_cmdline("torture:password", password); - } -} - static void parse_dns(const char *dns) { char *userdn, *basedn, *secret; @@ -4338,38 +4313,22 @@ static void parse_dns(const char *dns) } -static void usage(void) +static void usage(poptContext pc) { int i; + int perline = 5; - printf("Usage: smbtorture //server/share TEST1 TEST2 ...\n"); - - printf("\t-d debuglevel\n"); - printf("\t-U user%%pass\n"); - printf("\t-k use kerberos\n"); - printf("\t-N numprocs\n"); - printf("\t-n my_netbios_name\n"); - printf("\t-W workgroup\n"); - printf("\t-o num_operations\n"); - printf("\t-e num files(entries)\n"); - printf("\t-O socket_options\n"); - printf("\t-m maximum protocol\n"); - printf("\t-L use oplocks\n"); - printf("\t-c CLIENT.TXT specify client load file for NBENCH\n"); - printf("\t-t timelimit specify NBENCH time limit (seconds)\n"); - printf("\t-C filename specifies file with list of UNCs for connections\n"); - printf("\t-A showall\n"); - printf("\t-p port\n"); - printf("\t-s seed\n"); - printf("\t-f max failures\n"); - printf("\t-X enable dangerous tests\n"); - printf("\n\n"); + poptPrintUsage(pc, stdout, 0); + printf("\n"); printf("tests are:"); for (i=0;torture_ops[i].name;i++) { - printf(" %s", torture_ops[i].name); + if ((i%perline)==0) { + printf("\n"); + } + printf("%s ", torture_ops[i].name); } - printf("\n"); + printf("\n\n"); printf("default test is ALL\n"); @@ -4384,7 +4343,30 @@ static void usage(void) int opt, i; char *p; BOOL correct = True; - char *host, *share, *username; + int argc_new; + char **argv_new; + poptContext pc; + struct poptOption long_options[] = { + POPT_AUTOHELP + {"smb-ports", 'p', POPT_ARG_STRING, NULL, 0, "SMB ports", NULL}, + {"seed", 's', POPT_ARG_STRING, NULL, 0, "seed", NULL}, + {"num-progs", 'N', POPT_ARG_INT, &torture_nprocs, 4, "num progs", NULL}, + {"num-ops", 'o', POPT_ARG_INT, &torture_numops, 100, "num ops", NULL}, + {"entries", 'e', POPT_ARG_INT, &torture_entries, 1000, "entries", NULL}, + {"use-oplocks", 'L', POPT_ARG_NONE, &use_oplocks, True, "use oplocks", NULL}, + {"show-all", 'A', POPT_ARG_NONE, &torture_showall, True, "show all", NULL}, + {"loadfile", 'c', POPT_ARG_STRING, NULL, 0, "loadfile", NULL}, + {"unclist", 'C', POPT_ARG_STRING, NULL, 0, "unclist", NULL}, + {"timelimit", 't', POPT_ARG_STRING, NULL, 0, "timelimit", NULL}, + {"failures", 'f', POPT_ARG_INT, &torture_failures, 1, "failures", NULL}, + {"parse-dns", 'D', POPT_ARG_STRING, NULL, 0, "parse-dns", NULL}, + {"dangerous", 'X', POPT_ARG_NONE, NULL, 0, "dangerous", NULL}, + POPT_COMMON_SAMBA + POPT_COMMON_CONNECTION + POPT_COMMON_CREDENTIALS + POPT_COMMON_VERSION + POPT_TABLEEND + }; setup_logging("smbtorture", DEBUG_STDOUT); @@ -4392,26 +4374,71 @@ static void usage(void) setbuffer(stdout, NULL, 0); #endif + pc = poptGetContext("smbtorture", argc, (const char **) argv, long_options, + POPT_CONTEXT_KEEP_FIRST); + + poptSetOtherOptionHelp(pc, "| TEST1 TEST2 ..."); + + while((opt = poptGetNextOpt(pc)) != -1) { + switch (opt) { + case 'c': + lp_set_cmdline("torture:loadfile", poptGetOptArg(pc)); + break; + case 'C': + lp_set_cmdline("torture:unclist", poptGetOptArg(pc)); + break; + case 't': + lp_set_cmdline("torture:timelimit", poptGetOptArg(pc)); + break; + case 'D': + parse_dns(poptGetOptArg(pc)); + break; + + case 'X': + lp_set_cmdline("torture:dangerous", "1"); + break; + + default: + d_printf("Invalid option %s: %s\n", + poptBadOption(pc, 0), poptStrerror(opt)); + usage(pc); + exit(1); + } + } + lp_load(dyn_CONFIGFILE,True,False,False); load_interfaces(); + srandom(time(NULL)); + + argv_new = (const char **)poptGetArgs(pc); - if (argc < 2) { - usage(); + argc_new = argc; + for (i=0; i