mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
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 commit is contained in:
parent
ea14b2780f
commit
4733dcbf5f
@ -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");*/
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 <options> 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
|
||||
|
||||
lp_load(dyn_CONFIGFILE,True,False,False);
|
||||
load_interfaces();
|
||||
pc = poptGetContext("smbtorture", argc, (const char **) argv, long_options,
|
||||
POPT_CONTEXT_KEEP_FIRST);
|
||||
|
||||
if (argc < 2) {
|
||||
usage();
|
||||
poptSetOtherOptionHelp(pc, "<binding>|<unc> 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);
|
||||
}
|
||||
}
|
||||
|
||||
for(p = argv[1]; *p; p++)
|
||||
if(*p == '\\')
|
||||
*p = '/';
|
||||
lp_load(dyn_CONFIGFILE,True,False,False);
|
||||
load_interfaces();
|
||||
srandom(time(NULL));
|
||||
|
||||
argv_new = (const char **)poptGetArgs(pc);
|
||||
|
||||
argc_new = argc;
|
||||
for (i=0; i<argc; i++) {
|
||||
if (argv_new[i] == NULL) {
|
||||
argc_new = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (argc_new < 3) {
|
||||
usage(pc);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for(p = argv_new[1]; *p; p++) {
|
||||
if(*p == '\\')
|
||||
*p = '/';
|
||||
}
|
||||
|
||||
/* see if its a RPC transport specifier */
|
||||
if (strncmp(argv[1], "ncacn_", 6) == 0) {
|
||||
lp_set_cmdline("torture:binding", argv[1]);
|
||||
if (strncmp(argv_new[1], "ncacn_", 6) == 0) {
|
||||
lp_set_cmdline("torture:binding", argv_new[1]);
|
||||
} else {
|
||||
char *binding = NULL;
|
||||
char *host = NULL, *share = NULL;
|
||||
|
||||
if (!parse_unc(argv[1], &host, &share)) {
|
||||
usage();
|
||||
if (!parse_unc(argv_new[1], &host, &share)) {
|
||||
usage(pc);
|
||||
}
|
||||
|
||||
lp_set_cmdline("torture:host", host);
|
||||
@ -4420,102 +4447,30 @@ static void usage(void)
|
||||
lp_set_cmdline("torture:binding", binding);
|
||||
}
|
||||
|
||||
if (getenv("LOGNAME")) {
|
||||
username = strdup(getenv("LOGNAME"));
|
||||
if (!lp_parm_string(-1,"torture","username")) {
|
||||
lp_set_cmdline("torture:username", cmdline_get_username());
|
||||
}
|
||||
lp_set_cmdline("torture:username", username);
|
||||
|
||||
|
||||
argc--;
|
||||
argv++;
|
||||
|
||||
srandom(time(NULL));
|
||||
|
||||
while ((opt = getopt(argc, argv, "p:hW:D:U:n:N:O:o:e:m:Ld:Ac:ks:f:s:t:C:X")) != EOF) {
|
||||
switch (opt) {
|
||||
case 'p':
|
||||
lp_set_cmdline("smb ports", optarg);
|
||||
break;
|
||||
case 'W':
|
||||
lp_set_cmdline("workgroup", optarg);
|
||||
break;
|
||||
case 'm':
|
||||
lp_set_cmdline("protocol", optarg);
|
||||
break;
|
||||
case 'n':
|
||||
lp_set_cmdline("netbios name", optarg);
|
||||
break;
|
||||
case 'd':
|
||||
lp_set_cmdline("debug level", optarg);
|
||||
setup_logging(NULL, DEBUG_STDOUT);
|
||||
break;
|
||||
case 'O':
|
||||
lp_set_cmdline("socket options", optarg);
|
||||
break;
|
||||
case 's':
|
||||
srandom(atoi(optarg));
|
||||
break;
|
||||
case 'N':
|
||||
torture_nprocs = atoi(optarg);
|
||||
break;
|
||||
case 'o':
|
||||
torture_numops = atoi(optarg);
|
||||
break;
|
||||
case 'e':
|
||||
torture_entries = atoi(optarg);
|
||||
break;
|
||||
case 'L':
|
||||
use_oplocks = True;
|
||||
break;
|
||||
case 'A':
|
||||
torture_showall = True;
|
||||
break;
|
||||
case 'c':
|
||||
lp_set_cmdline("torture:loadfile", optarg);
|
||||
break;
|
||||
case 'C':
|
||||
lp_set_cmdline("torture:unclist", optarg);
|
||||
break;
|
||||
case 't':
|
||||
lp_set_cmdline("torture:timelimit", optarg);
|
||||
break;
|
||||
case 'k':
|
||||
#ifdef HAVE_KRB5
|
||||
use_kerberos = True;
|
||||
#else
|
||||
d_printf("No kerberos support compiled in\n");
|
||||
exit(1);
|
||||
#endif
|
||||
break;
|
||||
case 'U':
|
||||
parse_user(optarg);
|
||||
break;
|
||||
case 'D':
|
||||
parse_dns(optarg);
|
||||
break;
|
||||
case 'f':
|
||||
torture_failures = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'X':
|
||||
lp_set_cmdline("torture:dangerous", "1");
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("Unknown option %c (%d)\n", (char)opt, opt);
|
||||
usage();
|
||||
if (!lp_parm_string(-1,"torture","userdomain")) {
|
||||
/*
|
||||
* backward compatibility
|
||||
* maybe we should remove this to make this consistent
|
||||
* for all cmdline tools
|
||||
* --metze
|
||||
*/
|
||||
if (strequal(lp_netbios_name(),cmdline_get_userdomain())) {
|
||||
cmdline_set_userdomain(lp_workgroup());
|
||||
}
|
||||
lp_set_cmdline("torture:userdomain", cmdline_get_userdomain());
|
||||
}
|
||||
|
||||
if (!lp_parm_string(-1,"torture","password")) {
|
||||
lp_set_cmdline("torture:password", "");
|
||||
lp_set_cmdline("torture:password", cmdline_get_userpassword());
|
||||
}
|
||||
|
||||
if (argc == optind) {
|
||||
if (argc_new == 0) {
|
||||
printf("You must specify a test to run, or 'ALL'\n");
|
||||
} else {
|
||||
for (i=optind;i<argc;i++) {
|
||||
if (!run_test(argv[i])) {
|
||||
for (i=2;i<argc_new;i++) {
|
||||
if (!run_test(argv_new[i])) {
|
||||
correct = False;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user