r13244: Allow control of the location of the Samba3-compatible winbindd pipe
[jelmer/samba4-debian.git] / source / param / loadparm.c
index a92bc68371c21f9115af694edec2fcc788887eb8..96ba2bbc736795b7dfa1dcbe26cbb328d82835ea 100644 (file)
@@ -127,6 +127,7 @@ typedef struct
        char **server_services;
        char *ntptr_providor;
        char *szWinbindSeparator;
+       char *szWinbinddSocketDirectory;
        BOOL bWinbindSealedPipes;
        char *swat_directory;
        BOOL tls_enabled;
@@ -545,6 +546,7 @@ static struct parm_struct parm_table[] = {
        {"msdfs root", P_BOOL, P_LOCAL, &sDefault.bMSDfsRoot, NULL, NULL, FLAG_SHARE},
        {"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"winbind separator", P_STRING, P_GLOBAL, &Globals.szWinbindSeparator, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER },
+       {"winbindd socket directory", P_STRING, P_GLOBAL, &Globals.szWinbinddSocketDirectory, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER },
        {"winbind sealed pipes", P_BOOL, P_GLOBAL, &Globals.bWinbindSealedPipes, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER },
 
        {NULL, P_BOOL, P_NONE, NULL, NULL, NULL, 0}
@@ -599,7 +601,7 @@ static void init_globals(void)
        do_parameter("max connections", "-1", NULL);
 
        do_parameter("dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg dssetup", NULL);
-       do_parameter("server services", "smb rpc nbt wrepl ldap cldap web kdc", NULL);
+       do_parameter("server services", "smb rpc nbt wrepl ldap cldap web kdc winbind", NULL);
        do_parameter("ntptr providor", "simple_ldb", NULL);
        do_parameter("auth methods", "anonymous sam_ignoredomain", NULL);
        do_parameter("private dir", dyn_PRIVATE_DIR, NULL);
@@ -670,6 +672,7 @@ static void init_globals(void)
 
        do_parameter("winbind separator", "\\", NULL);
        do_parameter("winbind sealed pipes", "True", NULL);
+       do_parameter("winbindd socket directory", dyn_WINBINDD_SOCKET_DIR, NULL);
 
        do_parameter("client signing", "Yes", NULL);
        do_parameter("server signing", "auto", NULL);
@@ -820,6 +823,7 @@ FN_GLOBAL_STRING(lp_spoolss_url, &Globals.szSPOOLSS_URL)
 FN_GLOBAL_STRING(lp_wins_config_url, &Globals.szWINS_CONFIG_URL)
 FN_GLOBAL_STRING(lp_wins_url, &Globals.szWINS_URL)
 FN_GLOBAL_CONST_STRING(lp_winbind_separator, &Globals.szWinbindSeparator)
+FN_GLOBAL_CONST_STRING(lp_winbindd_socket_directory, &Globals.szWinbinddSocketDirectory)
 FN_GLOBAL_BOOL(lp_winbind_sealed_pipes, &Globals.bWinbindSealedPipes)
 FN_GLOBAL_STRING(lp_private_dir, &Globals.szPrivateDir)
 FN_GLOBAL_STRING(lp_serverstring, &Globals.szServerString)
@@ -912,7 +916,6 @@ FN_GLOBAL_INTEGER(lp_client_signing, &Globals.client_signing)
 /* local prototypes */
 
 static int map_parameter(const char *pszParmName);
-static BOOL set_boolean(BOOL *pb, const char *pszParmValue);
 static int getservicebyname(const char *pszServiceName,
                            service * pserviceDest);
 static void copy_service(service * pserviceDest,
@@ -1004,7 +1007,7 @@ static BOOL lp_bool(const char *s)
                return False;
        }
        
-       if (!set_boolean(&ret,s)) {
+       if (!set_boolean(s, &ret)) {
                DEBUG(0,("lp_bool(%s): value is not boolean!\n",s));
                return False;
        }
@@ -1373,34 +1376,6 @@ void *lp_parm_ptr(int snum, struct parm_struct *parm)
        return ((char *)ServicePtrs[snum]) + PTR_DIFF(parm->ptr, &sDefault);
 }
 
-/***************************************************************************
- Set a boolean variable from the text value stored in the passed string.
- Returns True in success, False if the passed string does not correctly 
- represent a boolean.
-***************************************************************************/
-
-static BOOL set_boolean(BOOL *pb, const char *pszParmValue)
-{
-       BOOL bRetval;
-
-       bRetval = True;
-       if (strwicmp(pszParmValue, "yes") == 0 ||
-           strwicmp(pszParmValue, "true") == 0 ||
-           strwicmp(pszParmValue, "1") == 0)
-               *pb = True;
-       else if (strwicmp(pszParmValue, "no") == 0 ||
-                   strwicmp(pszParmValue, "False") == 0 ||
-                   strwicmp(pszParmValue, "0") == 0)
-               *pb = False;
-       else {
-               DEBUG(0,
-                     ("ERROR: Badly formed boolean in configuration file: \"%s\".\n",
-                      pszParmValue));
-               bRetval = False;
-       }
-       return (bRetval);
-}
-
 /***************************************************************************
 Find a service by name. Otherwise works like get_service.
 ***************************************************************************/
@@ -1841,7 +1816,10 @@ BOOL lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue
        switch (parm_table[parmnum].type)
        {
                case P_BOOL:
-                       set_boolean(parm_ptr, pszParmValue);
+                       if (!set_boolean(pszParmValue, parm_ptr)) {
+                               DEBUG(0,("lp_do_parameter(%s): value is not boolean!\n", pszParmValue));
+                               return False;
+                       }
                        break;
 
                case P_INTEGER: