svn commit: samba r2302 - in branches/SAMBA_4_0/source: lib/cmdline param

tridge at samba.org tridge at samba.org
Mon Sep 13 01:27:37 GMT 2004


Author: tridge
Date: 2004-09-13 01:27:37 +0000 (Mon, 13 Sep 2004)
New Revision: 2302

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source&rev=2302&nolog=1

Log:
added a '--option' option, allowing any global or default option in
smb.conf to be set on the command line. For example, you can use:

  smbtorture --option 'unicode=false'
or
  smbtorture --option 'netbios name=myname'





Modified:
   branches/SAMBA_4_0/source/lib/cmdline/popt_common.c
   branches/SAMBA_4_0/source/param/loadparm.c


Changeset:
Modified: branches/SAMBA_4_0/source/lib/cmdline/popt_common.c
===================================================================
--- branches/SAMBA_4_0/source/lib/cmdline/popt_common.c	2004-09-13 01:23:09 UTC (rev 2301)
+++ branches/SAMBA_4_0/source/lib/cmdline/popt_common.c	2004-09-13 01:27:37 UTC (rev 2302)
@@ -33,6 +33,9 @@
  *		-i,--scope
  */
 
+
+enum {OPT_OPTION=1};
+
 static struct cmdline_auth_info cmdline_auth_info;
 
 static void popt_common_callback(poptContext con, 
@@ -40,7 +43,6 @@
 			   const struct poptOption *opt,
 			   const char *arg, const void *data)
 {
-	pstring logfile;
 	const char *pname;
 	
 	/* Find out basename of current program */
@@ -52,8 +54,9 @@
 		pname++;
 
 	if (reason == POPT_CALLBACK_REASON_PRE) {
-		pstr_sprintf(logfile, "%s/log.%s", dyn_LOGFILEBASE, pname);
+		char *logfile = talloc_asprintf(NULL, "%s/log.%s", dyn_LOGFILEBASE, pname);
 		lp_set_cmdline("log file", logfile);
+		talloc_free(logfile);
 		return;
 	}
 
@@ -81,8 +84,9 @@
 
 	case 'l':
 		if (arg) {
-			pstr_sprintf(logfile, "%s/log.%s", arg, pname);
+			char *logfile = talloc_asprintf(NULL, "%s/log.%s", arg, pname);
 			lp_set_cmdline("log file", logfile);
+			talloc_free(logfile);
 		}
 		break;
 		
@@ -105,6 +109,13 @@
 	case 'R':
 		lp_set_cmdline("name resolve order", arg);
 		break;
+
+	case OPT_OPTION:
+		if (!lp_set_option(arg)) {
+			fprintf(stderr, "Error setting option '%s'\n", arg);
+			exit(1);
+		}
+		break;
 	}
 }
 
@@ -123,6 +134,7 @@
 	{ NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE, popt_common_callback },
 	{ "debuglevel", 'd', POPT_ARG_STRING, NULL, 'd', "Set debug level", "DEBUGLEVEL" },
 	{ "configfile", 's', POPT_ARG_STRING, NULL, 's', "Use alternative configuration file", "CONFIGFILE" },
+	{ "option",       0, POPT_ARG_STRING, NULL, OPT_OPTION, "Set smb.conf option from command line", "name=value" },
 	{ "log-basename", 'l', POPT_ARG_STRING, NULL, 'l', "Basename for log/debug files", "LOGFILEBASE" },
 	POPT_TABLEEND
 };

Modified: branches/SAMBA_4_0/source/param/loadparm.c
===================================================================
--- branches/SAMBA_4_0/source/param/loadparm.c	2004-09-13 01:23:09 UTC (rev 2301)
+++ branches/SAMBA_4_0/source/param/loadparm.c	2004-09-13 01:27:37 UTC (rev 2302)
@@ -2639,6 +2639,33 @@
 	return True;
 }
 
+/*
+  set a option from the commandline in 'a=b' format. Use to support --option
+*/
+BOOL lp_set_option(const char *option)
+{
+	char *p, *s;
+	BOOL ret;
+
+	s = strdup(option);
+	if (!s) {
+		return False;
+	}
+
+	p = strchr(s, '=');
+	if (!p) {
+		free(s);
+		return False;
+	}
+
+	*p = 0;
+
+	ret = lp_set_cmdline(s, p+1);
+	free(s);
+	return ret;
+}
+
+
 /***************************************************************************
  Print a parameter of the specified type.
 ***************************************************************************/



More information about the samba-cvs mailing list