Unix SMB/CIFS implementation.
SMB torture tester
Copyright (C) Andrew Tridgell 1997-2003
- Copyright (C) Jelmer Vernooij 2006
+ Copyright (C) Jelmer Vernooij 2006-2008
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
#include "system/readline.h"
#include "lib/smbreadline/smbreadline.h"
#include "libcli/libcli.h"
-#include "lib/ldb/include/ldb.h"
#include "lib/events/events.h"
-#include "dynconfig.h"
-#include "torture/torture.h"
-#include "build.h"
-#include "lib/util/dlinklist.h"
+#include "torture/smbtorture.h"
#include "librpc/rpc/dcerpc.h"
+#include "auth/gensec/gensec.h"
#include "param/param.h"
+
static bool run_matching(struct torture_context *torture,
const char *prefix,
const char *expr,
if (suite == NULL) {
struct torture_suite *o;
- for (o = torture_root->children; o; o = o->next) {
+ for (o = (torture_root == NULL?NULL:torture_root->children); o; o = o->next) {
if (gen_fnmatch(expr, o->name) == 0) {
*matched = true;
reload_charcnv(torture->lp_ctx);
.test_result = simple_test_result
};
-static void subunit_init(struct torture_context *ctx)
-{
- /* FIXME: register segv and bus handler */
-}
-
-static void subunit_suite_start(struct torture_context *ctx,
- struct torture_suite *suite)
-{
-}
-
-static void subunit_test_start(struct torture_context *ctx,
- struct torture_tcase *tcase,
- struct torture_test *test)
-{
- printf("test: %s\n", test->name);
-}
-
-static void subunit_test_result(struct torture_context *context,
- enum torture_result res, const char *reason)
-{
- switch (res) {
- case TORTURE_OK:
- printf("success: %s", context->active_test->name);
- break;
- case TORTURE_FAIL:
- printf("failure: %s", context->active_test->name);
- break;
- case TORTURE_ERROR:
- printf("error: %s", context->active_test->name);
- break;
- case TORTURE_SKIP:
- printf("skip: %s", context->active_test->name);
- break;
- }
- if (reason)
- printf(" [\n%s\n]", reason);
- printf("\n");
-}
-
-static void subunit_comment(struct torture_context *test,
- const char *comment)
-{
- fprintf(stderr, "%s", comment);
-}
-static void subunit_warning(struct torture_context *test,
- const char *comment)
-{
- fprintf(stderr, "WARNING!: %s\n", comment);
-}
-
-const static struct torture_ui_ops subunit_ui_ops = {
- .init = subunit_init,
- .comment = subunit_comment,
- .warning = subunit_warning,
- .test_start = subunit_test_start,
- .test_result = subunit_test_result,
- .suite_start = subunit_suite_start
-};
-
-static void quiet_suite_start(struct torture_context *ctx,
- struct torture_suite *suite)
-{
- int i;
- ctx->quiet = true;
- for (i = 1; i < ctx->level; i++) putchar('\t');
- printf("%s: ", suite->name);
- fflush(stdout);
-}
-
-static void quiet_suite_finish(struct torture_context *ctx,
- struct torture_suite *suite)
-{
- putchar('\n');
-}
-
-static void quiet_test_result(struct torture_context *context,
- enum torture_result res, const char *reason)
-{
- fflush(stdout);
- switch (res) {
- case TORTURE_OK: putchar('.'); break;
- case TORTURE_FAIL: putchar('F'); break;
- case TORTURE_ERROR: putchar('E'); break;
- case TORTURE_SKIP: putchar('I'); break;
- }
-}
-
-const static struct torture_ui_ops quiet_ui_ops = {
- .suite_start = quiet_suite_start,
- .suite_finish = quiet_suite_finish,
- .test_result = quiet_test_result
-};
-
-void run_shell(struct torture_context *tctx)
+static void run_shell(struct torture_context *tctx)
{
char *cline;
int argc;
int max_runtime=0;
int argc_new;
struct torture_context *torture;
+ struct torture_results *results;
const struct torture_ui_ops *ui_ops;
char **argv_new;
poptContext pc;
static const char *target = "other";
NTSTATUS status;
int shell = false;
- static const char *ui_ops_name = "simple";
+ static const char *ui_ops_name = "subunit";
const char *basedir = NULL;
const char *extra_module = NULL;
static int list_tests = 0;
+ int num_extra_users = 0;
enum {OPT_LOADFILE=1000,OPT_UNCLIST,OPT_TIMELIMIT,OPT_DNS, OPT_LIST,
- OPT_DANGEROUS,OPT_SMB_PORTS,OPT_ASYNC,OPT_NUMPROGS};
-
+ OPT_DANGEROUS,OPT_SMB_PORTS,OPT_ASYNC,OPT_NUMPROGS,
+ OPT_EXTRA_USER,};
+
struct poptOption long_options[] = {
POPT_AUTOHELP
{"format", 0, POPT_ARG_STRING, &ui_ops_name, 0, "Output format (one of: simple, subunit)", NULL },
"number of simultaneous async requests", NULL},
{"maximum-runtime", 0, POPT_ARG_INT, &max_runtime, 0,
"set maximum time for smbtorture to live", "seconds"},
+ {"extra-user", 0, POPT_ARG_STRING, NULL, OPT_EXTRA_USER,
+ "extra user credentials", NULL},
POPT_COMMON_SAMBA
POPT_COMMON_CONNECTION
POPT_COMMON_CREDENTIALS
case OPT_SMB_PORTS:
lp_set_cmdline(cmdline_lp_ctx, "smb ports", poptGetOptArg(pc));
break;
+ case OPT_EXTRA_USER:
+ {
+ char *option = talloc_asprintf(NULL, "torture:extra_user%u",
+ ++num_extra_users);
+ const char *value = poptGetOptArg(pc);
+ lp_set_cmdline(cmdline_lp_ctx, option, value);
+ talloc_free(option);
+ }
+ break;
+ default:
+ printf("bad command line option\n");
+ exit(1);
}
}
lp_set_cmdline(cmdline_lp_ctx, "torture:samba3", "true");
} else if (strcmp(target, "samba4") == 0) {
lp_set_cmdline(cmdline_lp_ctx, "torture:samba4", "true");
+ } else if (strcmp(target, "w2k8") == 0) {
+ lp_set_cmdline(cmdline_lp_ctx, "torture:w2k8", "true");
+ } else if (strcmp(target, "win7") == 0) {
+ lp_set_cmdline(cmdline_lp_ctx, "torture:win7", "true");
+ } else if (strcmp(target, "onefs") == 0) {
+ lp_set_cmdline(cmdline_lp_ctx, "torture:sacl_support", "false");
}
if (max_runtime) {
if (!strcmp(ui_ops_name, "simple")) {
ui_ops = &std_ui_ops;
} else if (!strcmp(ui_ops_name, "subunit")) {
- ui_ops = &subunit_ui_ops;
- } else if (!strcmp(ui_ops_name, "quiet")) {
- ui_ops = &quiet_ui_ops;
+ ui_ops = &torture_subunit_ui_ops;
} else {
printf("Unknown output format '%s'\n", ui_ops_name);
exit(1);
}
- torture = torture_context_init(talloc_autofree_context(), ui_ops);
+ results = torture_results_init(talloc_autofree_context(), ui_ops);
+
+ torture = torture_context_init(s4_event_context_init(NULL), results);
if (basedir != NULL) {
if (basedir[0] != '/') {
fprintf(stderr, "Please specify an absolute path to --basedir\n");
torture->lp_ctx = cmdline_lp_ctx;
+ gensec_init(cmdline_lp_ctx);
+
if (argc_new == 0) {
printf("You must specify a test to run, or 'ALL'\n");
} else if (shell) {
}
}
- if (torture->returncode && correct) {
+ if (torture->results->returncode && correct) {
return(0);
} else {
return(1);