[SCM] Samba Shared Repository - branch master updated

Matthieu Patou mat at samba.org
Mon Jun 21 15:09:07 MDT 2010


James,

It seems that something is wrong with your patch set, I get:

mat at ares:/usr/local/src/samba4/source4$ make
WAF_MAKE=1 ../buildtools/bin/waf build
Waf: Entering directory `/usr/local/src/samba4/source4/bin'
[1775/1973] Compiling torture/shell.c
../torture/shell.c: In function ‘shell_set’:
../torture/shell.c:181: error: implicit declaration of function ‘lp_dump’
../torture/shell.c:188: error: implicit declaration of function 
‘lp_set_cmdline’
Waf: Leaving directory `/usr/local/src/samba4/source4/bin'
Build failed: -> task failed (err #1):
{task: cc shell.c -> shell_28.o}
make: *** [all] Erreur 1

reseting to acf54c3... s3-winbind: Make KRB5_EVENT_REFRESH_TIME a 
function, allow me to build !

Can you have a look ?

On 21/06/2010 22:31, James Peach wrote:
> The branch, master has been updated
>         via  6227eac... smbtorture: Fixx off-by-one command line parsing.
>         via  0fc18ea... smbtorture: Add "target" command to interactive shell.
>         via  7a25e2e... smbtorture: Enhance shell "help" command.
>         via  bf35aa8... smbtorture: Add "auth" command to the shell.
>         via  3f398ec... smbtorture: Refactor interactive shell into independent commands.
>         via  9f69790... smbtorture: Move interactive shell into a separate file.
>         via  a5e14bd... smbtorture: Print global options for interactive "list" command.
>         via  12e15b0... smbtorture: Add history support to shell mode.
>         via  6f96293... smbtorture: Add list command to smbtorture shell.
>        from  acf54c3... s3-winbind: Make KRB5_EVENT_REFRESH_TIME a function
>
> http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
>
>
> - Log -----------------------------------------------------------------
> commit 6227eac607131ed1042af1de83af7f70d0b05375
> Author: James Peach<jpeach at samba.org>
> Date:   Mon Jun 21 11:09:45 2010 -0700
>
>      smbtorture: Fixx off-by-one command line parsing.
>
>      If we are not in shell mode we require both the target and test name
>      arguments. Make sure we process these from the correct index.
>
> commit 0fc18ead76a79286365646eeb7607b39b01a1c9f
> Author: James Peach<jpeach at samba.org>
> Date:   Mon Mar 22 21:55:49 2010 -0700
>
>      smbtorture: Add "target" command to interactive shell.
>
>      Add a "target" command to set the target server to test. Refactor
>      the command line argument processing a little so that you can run
>      --shell without any additional arguments.
>
> commit 7a25e2efe9360b333fedc3fb938774437703700e
> Author: James Peach<jpeach at samba.org>
> Date:   Sun Mar 21 22:04:37 2010 -0700
>
>      smbtorture: Enhance shell "help" command.
>
>      Sort the command list alphabetically. Let the help command print
>      usage info for other commands.
>
> commit bf35aa86038aa5bbf06bf73eb58cfa6fa1eae904
> Author: James Peach<jpeach at samba.org>
> Date:   Sun Mar 21 21:56:05 2010 -0700
>
>      smbtorture: Add "auth" command to the shell.
>
>      Add a new "auth" command to set the cmdline credentials from withing
>      the smbtorture shell.
>
> commit 3f398ec36d6b733c92682f5eb03eeacb047e582f
> Author: James Peach<jpeach at samba.org>
> Date:   Fri Mar 19 22:04:08 2010 -0700
>
>      smbtorture: Refactor interactive shell into independent commands.
>
>      Refactor the smbtorture interactive shell into a set of independent
>      command callbacks to make it easier to add more independent commands.
>
> commit 9f697903556529bb4fedd73d027c317e56f6bf21
> Author: James Peach<jpeach at samba.org>
> Date:   Fri Mar 19 21:24:15 2010 -0700
>
>      smbtorture: Move interactive shell into a separate file.
>
> commit a5e14bded48ac53e21307eda1c9767be64b39a17
> Author: James Peach<jpeach at samba.org>
> Date:   Thu Mar 18 21:59:35 2010 -0700
>
>      smbtorture: Print global options for interactive "list" command.
>
> commit 12e15b0ac800a84d553ff82c4c61ccc8da9fd5fd
> Author: James Peach<jpeach at samba.org>
> Date:   Thu Mar 18 21:25:17 2010 -0700
>
>      smbtorture: Add history support to shell mode.
>
> commit 6f96293406bfaff35e7588d0624842de145ff249
> Author: James Peach<jpeach at samba.org>
> Date:   Thu Mar 18 21:14:47 2010 -0700
>
>      smbtorture: Add list command to smbtorture shell.
>
> -----------------------------------------------------------------------
>
> Summary of changes:
>   lib/torture/torture.c               |    2 +-
>   lib/torture/torture.h               |    2 +-
>   source4/lib/smbreadline/readline.m4 |    5 +
>   source4/torture/config.mk           |    5 +-
>   source4/torture/shell.c             |  318 +++++++++++++++++++++++++++++++++++
>   source4/torture/smbtorture.c        |  141 ++++++++++------
>   source4/torture/smbtorture.h        |    5 +
>   source4/torture/wscript_build       |    2 +-
>   8 files changed, 422 insertions(+), 58 deletions(-)
>   create mode 100644 source4/torture/shell.c
>
>
> Changeset truncated at 500 lines:
>
> diff --git a/lib/torture/torture.c b/lib/torture/torture.c
> index dcb28ee..4333f98 100644
> --- a/lib/torture/torture.c
> +++ b/lib/torture/torture.c
> @@ -305,7 +305,7 @@ bool torture_run_suite(struct torture_context *context,
>   }
>
>   bool torture_run_suite_restricted(struct torture_context *context,
> -		       struct torture_suite *suite, char **restricted)
> +		       struct torture_suite *suite, const char **restricted)
>   {
>   	/* FIXME */
>   	return false;
> diff --git a/lib/torture/torture.h b/lib/torture/torture.h
> index 931937c..6482e89 100644
> --- a/lib/torture/torture.h
> +++ b/lib/torture/torture.h
> @@ -221,7 +221,7 @@ bool torture_run_suite(struct torture_context *context,
>   /* Run the specified testsuite recursively, but only the specified
>    * tests */
>   bool torture_run_suite_restricted(struct torture_context *context,
> -		       struct torture_suite *suite, char **restricted);
> +		       struct torture_suite *suite, const char **restricted);
>
>   /* Run the specified testcase */
>   bool torture_run_tcase(struct torture_context *context,
> diff --git a/source4/lib/smbreadline/readline.m4 b/source4/lib/smbreadline/readline.m4
> index df15440..06d60ca 100644
> --- a/source4/lib/smbreadline/readline.m4
> +++ b/source4/lib/smbreadline/readline.m4
> @@ -78,6 +78,11 @@ AC_CHECK_LIB(readline, history_list,
>   	     [],
>   	     [$TERMLIBS])
>
> +AC_CHECK_LIB(readline, add_history,
> +	     [AC_DEFINE(HAVE_ADD_HISTORY, 1, [Do we have add_history?])],
> +	     [],
> +	     [$TERMLIBS])
> +
>   AC_MSG_CHECKING(whether to use extern readline)
>   if test x"$EXTERNAL_READLINE" = x"yes"; then
>   	AC_MSG_RESULT(yes)
> diff --git a/source4/torture/config.mk b/source4/torture/config.mk
> index 25e9b53..09af078 100644
> --- a/source4/torture/config.mk
> +++ b/source4/torture/config.mk
> @@ -280,7 +280,10 @@ PRIVATE_DEPENDENCIES = \
>   # End BINARY smbtorture
>   #################################
>
> -smbtorture_OBJ_FILES = $(torturesrcdir)/smbtorture.o $(torturesrcdir)/torture.o
> +smbtorture_OBJ_FILES = \
> +		$(torturesrcdir)/smbtorture.o \
> +		$(torturesrcdir)/torture.o  \
> +		$(torturesrcdir)/shell.o
>
>   PUBLIC_HEADERS += $(torturesrcdir)/smbtorture.h
>   MANPAGES += $(torturesrcdir)/man/smbtorture.1
> diff --git a/source4/torture/shell.c b/source4/torture/shell.c
> new file mode 100644
> index 0000000..2f58eb9
> --- /dev/null
> +++ b/source4/torture/shell.c
> @@ -0,0 +1,318 @@
> +/*
> +   Unix SMB/CIFS implementation.
> +   SMB torture tester
> +   Copyright (C) Andrew Tridgell 1997-2003
> +   Copyright (C) Jelmer Vernooij 2006-2008
> +   Copyright (C) James Peach 2010
> +
> +   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 3 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, see<http://www.gnu.org/licenses/>.
> +*/
> +
> +#include "includes.h"
> +#include "system/readline.h"
> +#include "lib/smbreadline/smbreadline.h"
> +#include "lib/cmdline/popt_common.h"
> +#include "auth/credentials/credentials.h"
> +#include "torture/smbtorture.h"
> +
> +struct shell_command;
> +
> +typedef void (*shell_function)(const struct shell_command *,
> +	struct torture_context *, int, const char **);
> +
> +static void shell_quit(const struct shell_command *,
> +	struct torture_context *, int, const char **);
> +static void shell_help(const struct shell_command *,
> +	struct torture_context *, int, const char **);
> +static void shell_set(const struct shell_command *,
> +	struct torture_context *, int, const char **);
> +static void shell_run(const struct shell_command *,
> +	struct torture_context *, int, const char **);
> +static void shell_list(const struct shell_command *,
> +	struct torture_context *, int, const char **);
> +static void shell_auth(const struct shell_command *,
> +	struct torture_context *, int, const char **);
> +static void shell_target(const struct shell_command *,
> +	struct torture_context *, int, const char **);
> +
> +static void shell_usage(const struct shell_command *);
> +static bool match_command(const char *, const struct shell_command *);
> +
> +struct shell_command
> +{
> +    shell_function  handler;
> +    const char *    name;
> +    const char *    usage;
> +    const char *    help;
> +} shell_command;
> +
> +static const struct shell_command commands[] =
> +{
> +    {
> +	shell_auth, "auth",
> +	"[[username | principal | domain | realm | password] STRING]",
> +	"set authentication parameters"
> +    },
> +
> +    {
> +	shell_help, "help", NULL,
> +	"print this help message"
> +    },
> +
> +    {
> +	shell_list, "list", NULL,
> +	"list the available tests"
> +    },
> +
> +    {
> +	shell_quit, "quit", NULL,
> +	"exit smbtorture"
> +    },
> +
> +    {
> +	shell_run, "run", "[TESTNAME]",
> +	"run the specified test"
> +    },
> +
> +    {
> +	shell_set, "set", "[NAME VALUE]",
> +	"print or set test configuration parameters"
> +    },
> +
> +    {
> +	shell_target, "target", "[TARGET]",
> +	"print or set the test target"
> +    }
> +
> +};
> +
> +void torture_shell(struct torture_context *tctx)
> +{
> +	char *cline;
> +	int argc;
> +	const char **argv;
> +	int ret;
> +	int i;
> +
> +	/* If we don't have a specified password, specify it as empty. This
> +	 * stops the credentials system prompting when we use the "auth"
> +	 * command to display the current auth parameters.
> +	 */
> +	if (cmdline_credentials->password_obtained != CRED_SPECIFIED) {
> +	    cli_credentials_set_password(cmdline_credentials, "",
> +		    CRED_SPECIFIED);
> +	}
> +
> +	while (1) {
> +		cline = smb_readline("torture>  ", NULL, NULL);
> +
> +		if (cline == NULL)
> +			return;
> +
> +#if HAVE_ADD_HISTORY
> +		add_history(cline);
> +#endif
> +
> +		ret = poptParseArgvString(cline,&argc,&argv);
> +		if (ret != 0) {
> +			fprintf(stderr, "Error parsing line\n");
> +			continue;
> +		}
> +
> +		for (i = 0; i<  ARRAY_SIZE(commands); i++) {
> +			if (match_command(argv[0],&commands[i])) {
> +				argc--;
> +				argv++;
> +				commands[i].handler(&commands[i],
> +					tctx, argc, argv);
> +				break;
> +			}
> +		}
> +
> +		free(cline);
> +	}
> +}
> +
> +static void shell_quit(const struct shell_command * command,
> +	struct torture_context *tctx, int argc, const char **argv)
> +{
> +    exit(0);
> +}
> +
> +static void shell_help(const struct shell_command * command,
> +	struct torture_context *tctx, int argc, const char **argv)
> +{
> +    int i;
> +
> +    if (argc == 1) {
> +	    for (i = 0; i<  ARRAY_SIZE(commands); i++) {
> +		    if (match_command(argv[0],&commands[i])) {
> +			    shell_usage(&commands[i]);
> +			    return;
> +		    }
> +	    }
> +    } else {
> +	    fprintf(stdout, "Available commands:\n");
> +	    for (i = 0; i<  ARRAY_SIZE(commands); i++) {
> +		    fprintf(stdout, "\t%s - %s\n",
> +			    commands[i].name, commands[i].help);
> +	    }
> +    }
> +}
> +
> +static void shell_set(const struct shell_command *command,
> +	struct torture_context *tctx, int argc, const char **argv)
> +{
> +	char * name;
> +
> +	switch (argc) {
> +	case 0:
> +	    lp_dump(tctx->lp_ctx, stdout,
> +		    false /* show_defaults */,
> +		    0 /* skip services */);
> +	    break;
> +
> +	case 2:
> +	    name = talloc_asprintf(NULL, "torture:%s", argv[0]);
> +	    lp_set_cmdline(tctx->lp_ctx, name, argv[1]);
> +	    talloc_free(name);
> +	    break;
> +
> +	default:
> +	    shell_usage(command);
> +	}
> +}
> +
> +static void shell_run(const struct shell_command * command,
> +	struct torture_context *tctx, int argc, const char **argv)
> +{
> +    if (argc != 1) {
> +	shell_usage(command);
> +	return;
> +    }
> +
> +    torture_run_named_tests(tctx, argv[0], NULL /* restricted */);
> +}
> +
> +static void shell_list(const struct shell_command * command,
> +	struct torture_context *tctx, int argc, const char **argv)
> +{
> +    if (argc != 0) {
> +	shell_usage(command);
> +	return;
> +    }
> +
> +    torture_print_tests(true);
> +}
> +
> +static void shell_auth(const struct shell_command * command,
> +	struct torture_context *tctx, int argc, const char **argv)
> +{
> +
> +    if (argc == 0) {
> +	    const char * username;
> +	    const char * domain;
> +	    const char * realm;
> +	    const char * password;
> +	    const char * principal;
> +
> +	    username = cli_credentials_get_username(cmdline_credentials);
> +	    principal = cli_credentials_get_principal(cmdline_credentials, tctx);
> +	    domain = cli_credentials_get_domain(cmdline_credentials);
> +	    realm = cli_credentials_get_realm(cmdline_credentials);
> +	    password = cli_credentials_get_password(cmdline_credentials);
> +
> +	    printf("Username: %s\n", username ? username : "");
> +	    printf("User Principal: %s\n", principal ? principal : "");
> +	    printf("Domain: %s\n", domain ? domain : "");
> +	    printf("Realm: %s\n", realm ? realm : "");
> +	    printf("Password: %s\n", password ? password : "");
> +    } else if (argc == 2) {
> +	    bool result;
> +
> +	    if (!strcmp(argv[0], "username")) {
> +		    result = cli_credentials_set_username(
> +			cmdline_credentials, argv[1], CRED_SPECIFIED);
> +	    } else if (!strcmp(argv[0], "principal")) {
> +		    result = cli_credentials_set_principal(
> +			cmdline_credentials, argv[1], CRED_SPECIFIED);
> +	    } else if (!strcmp(argv[0], "domain")) {
> +		    result = cli_credentials_set_domain(
> +			cmdline_credentials, argv[1], CRED_SPECIFIED);
> +	    } else if (!strcmp(argv[0], "realm")) {
> +		    result = cli_credentials_set_realm(
> +			cmdline_credentials, argv[1], CRED_SPECIFIED);
> +	    } else if (!strcmp(argv[0], "password")) {
> +		    result = cli_credentials_set_password(
> +			cmdline_credentials, argv[1], CRED_SPECIFIED);
> +	    } else {
> +		    shell_usage(command);
> +		    return;
> +	    }
> +
> +	    if (!result) {
> +		    printf("failed to set %s\n", argv[0]);
> +	    }
> +    } else {
> +	    shell_usage(command);
> +    }
> +
> +}
> +
> +static void shell_target(const struct shell_command *command,
> +	struct torture_context *tctx, int argc, const char **argv)
> +{
> +	if (argc == 0) {
> +		const char * host;
> +		const char * share;
> +		const char * binding;
> +
> +		host = torture_setting_string(tctx, "host", NULL);
> +		share = torture_setting_string(tctx, "share", NULL);
> +		binding = torture_setting_string(tctx, "binding", NULL);
> +
> +		printf("Target host: %s\n", host ? host : "");
> +		printf("Target share: %s\n", share ? share : "");
> +		printf("Target binding: %s\n", binding ? binding : "");
> +	} else if (argc == 1) {
> +		torture_parse_target(tctx->lp_ctx, argv[0]);
> +	} else {
> +		shell_usage(command);
> +	}
> +}
> +
> +static void shell_usage(const struct shell_command * command)
> +{
> +    if (command->usage) {
> +	    fprintf(stderr, "Usage: %s %s\n",
> +		    command->name, command->usage);
> +    } else {
> +	    fprintf(stderr, "Usage: %s\n",
> +		    command->name);
> +    }
> +}
> +
> +static bool match_command(const char * name,
> +	const struct shell_command * command)
> +{
> +	if (!strcmp(name, command->name)) {
> +		return true;
> +	}
> +
> +	if (name[0] == command->name[0]&&  name[1] == '\0') {
> +	    return true;
> +	}
> +
> +	return false;
> +}
> diff --git a/source4/torture/smbtorture.c b/source4/torture/smbtorture.c
> index 4b5eef6..14eeff9 100644
> --- a/source4/torture/smbtorture.c
> +++ b/source4/torture/smbtorture.c
> @@ -33,11 +33,14 @@
>   #include "auth/gensec/gensec.h"
>   #include "param/param.h"
>
> +#if HAVE_READLINE_HISTORY_H
> +#include<readline/history.h>
> +#endif
>
>   static bool run_matching(struct torture_context *torture,
>   						 const char *prefix,
>   						 const char *expr,
> -						 char **restricted,
> +						 const char **restricted,
>   						 struct torture_suite *suite,
>   						 bool *matched)
>   {
> @@ -91,8 +94,8 @@ static bool run_matching(struct torture_context *torture,
>   /****************************************************************************
>   run a specified test or "ALL"
>   ****************************************************************************/
> -static bool run_test(struct torture_context *torture, const char *name,
> -					 char **restricted)
> +bool torture_run_named_tests(struct torture_context *torture, const char *name,
> +			    const char **restricted)
>   {
>   	bool ret = true;
>   	bool matched = false;
> @@ -119,7 +122,7 @@ static bool run_test(struct torture_context *torture, const char *name,
>   	return ret;
>   }
>
> -static bool parse_target(struct loadparm_context *lp_ctx, const char *target)
> +bool torture_parse_target(struct loadparm_context *lp_ctx, const char *target)
>   {
>   	char *host = NULL, *share = NULL;
>   	struct dcerpc_binding *binding_struct;
> @@ -185,6 +188,47 @@ static void parse_dns(struct loadparm_context *lp_ctx, const char *dns)
>
>   }
>
> +/* Print the full test list, formatted into separate labelled test
> + * groups.
> + */
> +static void print_structured_test_list(void)
> +{
> +	struct torture_suite *o;
> +	struct torture_suite *s;
> +	struct torture_tcase *t;
> +	int i;
> +
> +	if (torture_root == NULL) {
> +	    printf("NO TESTS LOADED\n");
> +	    return;
> +	}
> +
> +	for (o = torture_root->children; o; o = o->next) {
> +		printf("\n%s (%s):\n  ", o->description, o->name);
> +
> +		i = 0;
> +		for (s = o->children; s; s = s->next) {
> +			if (i + strlen(o->name) + strlen(s->name)>= (MAX_COLS - 3)) {
> +				printf("\n  ");
> +				i = 0;
> +			}
> +			i+=printf("%s-%s ", o->name, s->name);
> +		}
> +
> +		for (t = o->testcases; t; t = t->next) {
> +			if (i + strlen(o->name) + strlen(t->name)>= (MAX_COLS - 3)) {
> +				printf("\n  ");
> +				i = 0;
> +			}
> +			i+=printf("%s-%s ", o->name, t->name);
> +		}
> +
> +		if (i) printf("\n");
> +	}
> +
> +	printf("\nThe default test is ALL.\n");
> +}
> +
>   static void print_test_list(void)
>   {
>   	struct torture_suite *o;
> @@ -205,13 +249,17 @@ static void print_test_list(void)
>   	}
>   }
>
> -_NORETURN_ static void usage(poptContext pc)
> +void torture_print_tests(bool structured)
>   {
> -	struct torture_suite *o;
> -	struct torture_suite *s;
> -	struct torture_tcase *t;
> -	int i;
> +	if (structured) {
> +		print_structured_test_list();
> +	} else {
> +		print_test_list();
> +	}
> +}
>
> +_NORETURN_ static void usage(poptContext pc)
> +{
>   	poptPrintUsage(pc, stdout, 0);
>   	printf("\n");
>
> @@ -264,35 +312,7 @@ _NORETURN_ static void usage(poptContext pc)
>
>   	printf("Tests are:");
>
> -	if (torture_root == NULL) {
> -	    printf("NO TESTS LOADED\n");
> -	    exit(1);
>
>
>    


-- 
Matthieu Patou
Samba Team        http://samba.org



More information about the samba-technical mailing list