svn commit: samba r25037 - in branches/SAMBA_4_0: . source/param

jelmer at samba.org jelmer at samba.org
Sat Sep 8 17:25:27 GMT 2007


Author: jelmer
Date: 2007-09-08 17:25:24 +0000 (Sat, 08 Sep 2007)
New Revision: 25037

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=25037

Log:
Start passing the context around.
Modified:
   branches/SAMBA_4_0/
   branches/SAMBA_4_0/source/param/loadparm.c
   branches/SAMBA_4_0/source/param/param.h


Changeset:

Property changes on: branches/SAMBA_4_0
___________________________________________________________________
Name: bzr:revision-info
...skipped...
Name: bzr:revision-id:v3-trunk0
...skipped...

Modified: branches/SAMBA_4_0/source/param/loadparm.c
===================================================================
--- branches/SAMBA_4_0/source/param/loadparm.c	2007-09-08 17:08:59 UTC (rev 25036)
+++ branches/SAMBA_4_0/source/param/loadparm.c	2007-09-08 17:25:24 UTC (rev 25037)
@@ -578,165 +578,6 @@
 	return parm_table;
 }
 
-/***************************************************************************
- Initialise the global parameter structure.
-***************************************************************************/
-static void init_globals(void)
-{
-	int i;
-	char *myname;
-
-	DEBUG(3, ("Initialising global parameters\n"));
-
-	for (i = 0; parm_table[i].label; i++) {
-		if ((parm_table[i].type == P_STRING ||
-		     parm_table[i].type == P_USTRING) &&
-		    parm_table[i].ptr &&
-		    !(parm_table[i].flags & FLAG_CMDLINE)) {
-			string_set(talloc_autofree_context(), 
-				   (char **)parm_table[i].ptr, "");
-		}
-	}
-
-	lp_do_global_parameter("config file", dyn_CONFIGFILE);
-
-	lp_do_global_parameter("share backend", "classic");
-	
-	lp_do_global_parameter("server role", "standalone");
-
-	/* options that can be set on the command line must be initialised via
-	   the slower lp_do_global_parameter() to ensure that FLAG_CMDLINE is obeyed */
-#ifdef TCP_NODELAY
-	lp_do_global_parameter("socket options", "TCP_NODELAY");
-#endif
-	lp_do_global_parameter("workgroup", DEFAULT_WORKGROUP);
-	myname = get_myname();
-	lp_do_global_parameter("netbios name", myname);
-	SAFE_FREE(myname);
-	lp_do_global_parameter("name resolve order", "lmhosts wins host bcast");
-
-	lp_do_global_parameter("fstype", FSTYPE_STRING);
-	lp_do_global_parameter("ntvfs handler", "unixuid default");
-	lp_do_global_parameter("max connections", "-1");
-
-	lp_do_global_parameter("dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg dssetup unixinfo");
-	lp_do_global_parameter("server services", "smb rpc nbt wrepl ldap cldap web kdc drepl winbind");
-	lp_do_global_parameter("ntptr providor", "simple_ldb");
-	lp_do_global_parameter("auth methods:domain controller", "anonymous sam_ignoredomain");
-	lp_do_global_parameter("auth methods:member server", "anonymous sam winbind");
-	lp_do_global_parameter("auth methods:standalone", "anonymous sam_ignoredomain");
-	lp_do_global_parameter("private dir", dyn_PRIVATE_DIR);
-	lp_do_global_parameter("sam database", "sam.ldb");
-	lp_do_global_parameter("secrets database", "secrets.ldb");
-	lp_do_global_parameter("spoolss database", "spoolss.ldb");
-	lp_do_global_parameter("wins config database", "wins_config.ldb");
-	lp_do_global_parameter("wins database", "wins.ldb");
-	lp_do_global_parameter("registry:HKEY_LOCAL_MACHINE", "hklm.ldb");
-
-	/* This hive should be dynamically generated by Samba using
-	   data from the sam, but for the moment leave it in a tdb to
-	   keep regedt32 from popping up an annoying dialog. */
-	lp_do_global_parameter("registry:HKEY_USERS", "hku.ldb");
-	
-	/* using UTF8 by default allows us to support all chars */
-	lp_do_global_parameter("unix charset", "UTF8");
-
-	/* Use codepage 850 as a default for the dos character set */
-	lp_do_global_parameter("dos charset", "CP850");
-
-	/*
-	 * Allow the default PASSWD_CHAT to be overridden in local.h.
-	 */
-	lp_do_global_parameter("passwd chat", DEFAULT_PASSWD_CHAT);
-
-	lp_do_global_parameter("pid directory", dyn_PIDDIR);
-	lp_do_global_parameter("lock dir", dyn_LOCKDIR);
-	lp_do_global_parameter("modules dir", dyn_MODULESDIR);
-	lp_do_global_parameter("ncalrpc dir", dyn_NCALRPCDIR);
-
-	lp_do_global_parameter("socket address", "0.0.0.0");
-	lp_do_global_parameter_var("server string", 
-				   "Samba %s", SAMBA_VERSION_STRING);
-
-	lp_do_global_parameter_var("announce version", "%d.%d", 
-			 DEFAULT_MAJOR_VERSION,
-			 DEFAULT_MINOR_VERSION);
-
-	lp_do_global_parameter("password server", "*");
-
-	lp_do_global_parameter("max mux", "50");
-	lp_do_global_parameter("max xmit", "12288");
-	lp_do_global_parameter("password level", "0");
-	lp_do_global_parameter("LargeReadwrite", "True");
-	lp_do_global_parameter("server min protocol", "CORE");
-	lp_do_global_parameter("server max protocol", "NT1");
-	lp_do_global_parameter("client min protocol", "CORE");
-	lp_do_global_parameter("client max protocol", "NT1");
-	lp_do_global_parameter("security", "USER");
-	lp_do_global_parameter("paranoid server security", "True");
-	lp_do_global_parameter("EncryptPasswords", "True");
-	lp_do_global_parameter("ReadRaw", "True");
-	lp_do_global_parameter("WriteRaw", "True");
-	lp_do_global_parameter("NullPasswords", "False");
-	lp_do_global_parameter("ObeyPamRestrictions", "False");
-	lp_do_global_parameter("announce as", "NT SERVER");
-
-	lp_do_global_parameter("TimeServer", "False");
-	lp_do_global_parameter("BindInterfacesOnly", "False");
-	lp_do_global_parameter("Unicode", "True");
-	lp_do_global_parameter("ClientLanManAuth", "True");
-	lp_do_global_parameter("LanmanAuth", "True");
-	lp_do_global_parameter("NTLMAuth", "True");
-	lp_do_global_parameter("client use spnego principal", "False");
-	
-	lp_do_global_parameter("UnixExtensions", "False");
-
-	lp_do_global_parameter("PreferredMaster", "Auto");
-	lp_do_global_parameter("LocalMaster", "True");
-
-	lp_do_global_parameter("wins support", "False");
-	lp_do_global_parameter("dns proxy", "True");
-
-	lp_do_global_parameter("winbind separator", "\\");
-	lp_do_global_parameter("winbind sealed pipes", "True");
-	lp_do_global_parameter("winbindd socket directory", dyn_WINBINDD_SOCKET_DIR);
-	lp_do_global_parameter("template shell", "/bin/false");
-	lp_do_global_parameter("template homedir", "/home/%WORKGROUP%/%ACCOUNTNAME%");
-
-	lp_do_global_parameter("client signing", "Yes");
-	lp_do_global_parameter("server signing", "auto");
-
-	lp_do_global_parameter("use spnego", "True");
-
-	lp_do_global_parameter("smb ports", "445 139");
-	lp_do_global_parameter("nbt port", "137");
-	lp_do_global_parameter("dgram port", "138");
-	lp_do_global_parameter("cldap port", "389");
-	lp_do_global_parameter("krb5 port", "88");
-	lp_do_global_parameter("kpasswd port", "464");
-	lp_do_global_parameter("web port", "901");
-	lp_do_global_parameter("web application directory", dyn_WEBAPPSDIR);
-	lp_do_global_parameter("jsonrpc services directory", dyn_SERVICESDIR);
-
-	lp_do_global_parameter("nt status support", "True");
-
-	lp_do_global_parameter("max wins ttl", "518400"); /* 6 days */
-	lp_do_global_parameter("min wins ttl", "10");
-
-	lp_do_global_parameter("tls enabled", "True");
-	lp_do_global_parameter("tls keyfile", "tls/key.pem");
-	lp_do_global_parameter("tls certfile", "tls/cert.pem");
-	lp_do_global_parameter("tls cafile", "tls/ca.pem");
-	lp_do_global_parameter_var("js include", "%s", dyn_JSDIR);
-	lp_do_global_parameter_var("setup directory", "%s", dyn_SETUPDIR);
-
-	for (i = 0; parm_table[i].label; i++) {
-		if (!(parm_table[i].flags & FLAG_CMDLINE)) {
-			parm_table[i].flags |= FLAG_DEFAULT;
-		}
-	}
-}
-
 static TALLOC_CTX *lp_talloc;
 
 /******************************************************************* a
@@ -1878,7 +1719,8 @@
 }
 
 
-bool lp_do_global_parameter(const char *pszParmName, const char *pszParmValue)
+bool lp_do_global_parameter(struct loadparm_context *lp_ctx, 
+			    const char *pszParmName, const char *pszParmValue)
 {
 	int parmnum = map_parameter(pszParmName);
 	void *parm_ptr;
@@ -1962,12 +1804,14 @@
  Process a parameter for a particular service number. If snum < 0
  then assume we are in the globals.
 ***************************************************************************/
-bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue)
+bool lp_do_parameter(struct service *service, const char *pszParmName, 
+		     const char *pszParmValue)
 {
-	if (snum < 0) {
-		return lp_do_global_parameter(pszParmName, pszParmValue);
+	if (service == NULL) {
+		return lp_do_global_parameter(&loadparm, pszParmName, 
+					      pszParmValue);
 	} else {
-		return lp_do_service_parameter(loadparm.ServicePtrs[snum],
+		return lp_do_service_parameter(service,
 					pszParmName, pszParmValue);
 	}
 	return true;
@@ -1981,7 +1825,8 @@
 			 void *userdata)
 {
 	if (loadparm.bInGlobalSection) 
-		return lp_do_global_parameter(pszParmName, pszParmValue);
+		return lp_do_global_parameter(&loadparm, pszParmName, 
+					      pszParmValue);
 	else 
 		return lp_do_service_parameter(loadparm.currentService,
 					       pszParmName, pszParmValue);
@@ -1990,8 +1835,9 @@
 /*
   variable argument do parameter
 */
-bool lp_do_global_parameter_var(const char *pszParmName, const char *fmt, ...) PRINTF_ATTRIBUTE(2, 3);
-bool lp_do_global_parameter_var(const char *pszParmName, const char *fmt, ...) 
+bool lp_do_global_parameter_var(struct loadparm_context *lp_ctx, const char *pszParmName, const char *fmt, ...) PRINTF_ATTRIBUTE(3, 4);
+bool lp_do_global_parameter_var(struct loadparm_context *lp_ctx, 
+				const char *pszParmName, const char *fmt, ...) 
 {
 	char *s;
 	bool ret;
@@ -2000,7 +1846,7 @@
 	va_start(ap, fmt);	
 	s = talloc_vasprintf(NULL, fmt, ap);
 	va_end(ap);
-	ret = lp_do_global_parameter(pszParmName, s);
+	ret = lp_do_global_parameter(lp_ctx, pszParmName, s);
 	talloc_free(s);
 	return ret;
 }
@@ -2032,7 +1878,7 @@
 	/* reset the CMDLINE flag in case this has been called before */
 	parm_table[parmnum].flags &= ~FLAG_CMDLINE;
 
-	if (!lp_do_parameter(-2, pszParmName, pszParmValue)) {
+	if (!lp_do_parameter(NULL, pszParmName, pszParmValue)) {
 		return false;
 	}
 
@@ -2456,6 +2302,168 @@
 }
 
 /***************************************************************************
+ Initialise the global parameter structure.
+***************************************************************************/
+bool loadparm_init(struct loadparm_context *lp_ctx)
+{
+	int i;
+	char *myname;
+
+	DEBUG(3, ("Initialising global parameters\n"));
+
+	for (i = 0; parm_table[i].label; i++) {
+		if ((parm_table[i].type == P_STRING ||
+		     parm_table[i].type == P_USTRING) &&
+		    parm_table[i].ptr &&
+		    !(parm_table[i].flags & FLAG_CMDLINE)) {
+			string_set(talloc_autofree_context(), 
+				   (char **)parm_table[i].ptr, "");
+		}
+	}
+
+	lp_do_global_parameter(lp_ctx, "config file", dyn_CONFIGFILE);
+
+	lp_do_global_parameter(lp_ctx, "share backend", "classic");
+	
+	lp_do_global_parameter(lp_ctx, "server role", "standalone");
+
+	/* options that can be set on the command line must be initialised via
+	   the slower lp_do_global_parameter() to ensure that FLAG_CMDLINE is obeyed */
+#ifdef TCP_NODELAY
+	lp_do_global_parameter(lp_ctx, "socket options", "TCP_NODELAY");
+#endif
+	lp_do_global_parameter(lp_ctx, "workgroup", DEFAULT_WORKGROUP);
+	myname = get_myname();
+	lp_do_global_parameter(lp_ctx, "netbios name", myname);
+	SAFE_FREE(myname);
+	lp_do_global_parameter(lp_ctx, "name resolve order", "lmhosts wins host bcast");
+
+	lp_do_global_parameter(lp_ctx, "fstype", FSTYPE_STRING);
+	lp_do_global_parameter(lp_ctx, "ntvfs handler", "unixuid default");
+	lp_do_global_parameter(lp_ctx, "max connections", "-1");
+
+	lp_do_global_parameter(lp_ctx, "dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg dssetup unixinfo");
+	lp_do_global_parameter(lp_ctx, "server services", "smb rpc nbt wrepl ldap cldap web kdc drepl winbind");
+	lp_do_global_parameter(lp_ctx, "ntptr providor", "simple_ldb");
+	lp_do_global_parameter(lp_ctx, "auth methods:domain controller", "anonymous sam_ignoredomain");
+	lp_do_global_parameter(lp_ctx, "auth methods:member server", "anonymous sam winbind");
+	lp_do_global_parameter(lp_ctx, "auth methods:standalone", "anonymous sam_ignoredomain");
+	lp_do_global_parameter(lp_ctx, "private dir", dyn_PRIVATE_DIR);
+	lp_do_global_parameter(lp_ctx, "sam database", "sam.ldb");
+	lp_do_global_parameter(lp_ctx, "secrets database", "secrets.ldb");
+	lp_do_global_parameter(lp_ctx, "spoolss database", "spoolss.ldb");
+	lp_do_global_parameter(lp_ctx, "wins config database", "wins_config.ldb");
+	lp_do_global_parameter(lp_ctx, "wins database", "wins.ldb");
+	lp_do_global_parameter(lp_ctx, "registry:HKEY_LOCAL_MACHINE", "hklm.ldb");
+
+	/* This hive should be dynamically generated by Samba using
+	   data from the sam, but for the moment leave it in a tdb to
+	   keep regedt32 from popping up an annoying dialog. */
+	lp_do_global_parameter(lp_ctx, "registry:HKEY_USERS", "hku.ldb");
+	
+	/* using UTF8 by default allows us to support all chars */
+	lp_do_global_parameter(lp_ctx, "unix charset", "UTF8");
+
+	/* Use codepage 850 as a default for the dos character set */
+	lp_do_global_parameter(lp_ctx, "dos charset", "CP850");
+
+	/*
+	 * Allow the default PASSWD_CHAT to be overridden in local.h.
+	 */
+	lp_do_global_parameter(lp_ctx, "passwd chat", DEFAULT_PASSWD_CHAT);
+
+	lp_do_global_parameter(lp_ctx, "pid directory", dyn_PIDDIR);
+	lp_do_global_parameter(lp_ctx, "lock dir", dyn_LOCKDIR);
+	lp_do_global_parameter(lp_ctx, "modules dir", dyn_MODULESDIR);
+	lp_do_global_parameter(lp_ctx, "ncalrpc dir", dyn_NCALRPCDIR);
+
+	lp_do_global_parameter(lp_ctx, "socket address", "0.0.0.0");
+	lp_do_global_parameter_var(lp_ctx, "server string", 
+				   "Samba %s", SAMBA_VERSION_STRING);
+
+	lp_do_global_parameter_var(lp_ctx, "announce version", "%d.%d", 
+			 DEFAULT_MAJOR_VERSION,
+			 DEFAULT_MINOR_VERSION);
+
+	lp_do_global_parameter(lp_ctx, "password server", "*");
+
+	lp_do_global_parameter(lp_ctx, "max mux", "50");
+	lp_do_global_parameter(lp_ctx, "max xmit", "12288");
+	lp_do_global_parameter(lp_ctx, "password level", "0");
+	lp_do_global_parameter(lp_ctx, "LargeReadwrite", "True");
+	lp_do_global_parameter(lp_ctx, "server min protocol", "CORE");
+	lp_do_global_parameter(lp_ctx, "server max protocol", "NT1");
+	lp_do_global_parameter(lp_ctx, "client min protocol", "CORE");
+	lp_do_global_parameter(lp_ctx, "client max protocol", "NT1");
+	lp_do_global_parameter(lp_ctx, "security", "USER");
+	lp_do_global_parameter(lp_ctx, "paranoid server security", "True");
+	lp_do_global_parameter(lp_ctx, "EncryptPasswords", "True");
+	lp_do_global_parameter(lp_ctx, "ReadRaw", "True");
+	lp_do_global_parameter(lp_ctx, "WriteRaw", "True");
+	lp_do_global_parameter(lp_ctx, "NullPasswords", "False");
+	lp_do_global_parameter(lp_ctx, "ObeyPamRestrictions", "False");
+	lp_do_global_parameter(lp_ctx, "announce as", "NT SERVER");
+
+	lp_do_global_parameter(lp_ctx, "TimeServer", "False");
+	lp_do_global_parameter(lp_ctx, "BindInterfacesOnly", "False");
+	lp_do_global_parameter(lp_ctx, "Unicode", "True");
+	lp_do_global_parameter(lp_ctx, "ClientLanManAuth", "True");
+	lp_do_global_parameter(lp_ctx, "LanmanAuth", "True");
+	lp_do_global_parameter(lp_ctx, "NTLMAuth", "True");
+	lp_do_global_parameter(lp_ctx, "client use spnego principal", "False");
+	
+	lp_do_global_parameter(lp_ctx, "UnixExtensions", "False");
+
+	lp_do_global_parameter(lp_ctx, "PreferredMaster", "Auto");
+	lp_do_global_parameter(lp_ctx, "LocalMaster", "True");
+
+	lp_do_global_parameter(lp_ctx, "wins support", "False");
+	lp_do_global_parameter(lp_ctx, "dns proxy", "True");
+
+	lp_do_global_parameter(lp_ctx, "winbind separator", "\\");
+	lp_do_global_parameter(lp_ctx, "winbind sealed pipes", "True");
+	lp_do_global_parameter(lp_ctx, "winbindd socket directory", dyn_WINBINDD_SOCKET_DIR);
+	lp_do_global_parameter(lp_ctx, "template shell", "/bin/false");
+	lp_do_global_parameter(lp_ctx, "template homedir", "/home/%WORKGROUP%/%ACCOUNTNAME%");
+
+	lp_do_global_parameter(lp_ctx, "client signing", "Yes");
+	lp_do_global_parameter(lp_ctx, "server signing", "auto");
+
+	lp_do_global_parameter(lp_ctx, "use spnego", "True");
+
+	lp_do_global_parameter(lp_ctx, "smb ports", "445 139");
+	lp_do_global_parameter(lp_ctx, "nbt port", "137");
+	lp_do_global_parameter(lp_ctx, "dgram port", "138");
+	lp_do_global_parameter(lp_ctx, "cldap port", "389");
+	lp_do_global_parameter(lp_ctx, "krb5 port", "88");
+	lp_do_global_parameter(lp_ctx, "kpasswd port", "464");
+	lp_do_global_parameter(lp_ctx, "web port", "901");
+	lp_do_global_parameter(lp_ctx, "web application directory", dyn_WEBAPPSDIR);
+	lp_do_global_parameter(lp_ctx, "jsonrpc services directory", dyn_SERVICESDIR);
+
+	lp_do_global_parameter(lp_ctx, "nt status support", "True");
+
+	lp_do_global_parameter(lp_ctx, "max wins ttl", "518400"); /* 6 days */
+	lp_do_global_parameter(lp_ctx, "min wins ttl", "10");
+
+	lp_do_global_parameter(lp_ctx, "tls enabled", "True");
+	lp_do_global_parameter(lp_ctx, "tls keyfile", "tls/key.pem");
+	lp_do_global_parameter(lp_ctx, "tls certfile", "tls/cert.pem");
+	lp_do_global_parameter(lp_ctx, "tls cafile", "tls/ca.pem");
+	lp_do_global_parameter_var(lp_ctx, "js include", "%s", dyn_JSDIR);
+	lp_do_global_parameter_var(lp_ctx, "setup directory", "%s", 
+				   dyn_SETUPDIR);
+
+	for (i = 0; parm_table[i].label; i++) {
+		if (!(parm_table[i].flags & FLAG_CMDLINE)) {
+			parm_table[i].flags |= FLAG_DEFAULT;
+		}
+	}
+
+	return true;
+}
+
+/***************************************************************************
  Load the services array from the services file. Return True on success, 
  False on failure.
 ***************************************************************************/
@@ -2468,8 +2476,6 @@
 
 	bRetval = false;
 
-	loadparm.bInGlobalSection = true;
-
 	if (loadparm.Globals.param_opt != NULL) {
 		struct param_opt *next;
 		for (data=loadparm.Globals.param_opt; data; data=next) {
@@ -2479,9 +2485,11 @@
 			talloc_free(data);
 		}
 	}
+
+	if (!loadparm_init(&loadparm))
+		return false;
 	
-	init_globals();
-
+	loadparm.bInGlobalSection = true;
 	n2 = standard_sub_basic(talloc_autofree_context(), lp_configfile());
 	DEBUG(2, ("lp_load: refreshing parameters from %s\n", n2));
 	
@@ -2505,7 +2513,7 @@
 	bLoaded = true;
 
 	if (!loadparm.Globals.szWINSservers && loadparm.Globals.bWINSsupport) {
-		lp_do_parameter(-1, "wins server", "127.0.0.1");
+		lp_do_parameter(NULL, "wins server", "127.0.0.1");
 	}
 
 	init_iconv();

Modified: branches/SAMBA_4_0/source/param/param.h
===================================================================
--- branches/SAMBA_4_0/source/param/param.h	2007-09-08 17:08:59 UTC (rev 25036)
+++ branches/SAMBA_4_0/source/param/param.h	2007-09-08 17:25:24 UTC (rev 25037)
@@ -57,6 +57,7 @@
 	ANNOUNCE_AS_NT_WORKSTATION=4
 };
 
+struct loadparm_context;
 struct service;
 
 #include "param/proto.h"



More information about the samba-cvs mailing list