r12442: only set the "wins server" parameter if it's not set
[samba.git] / source / param / loadparm.c
index 160a7d12deed39bdc835f05397120755d07510f1..290dd361e811e1ec77f5cb8c2a54d209a14b7483 100644 (file)
@@ -55,6 +55,7 @@
 #include "includes.h"
 #include "version.h"
 #include "dynconfig.h"
+#include "pstring.h"
 #include "system/time.h"
 #include "system/iconv.h"
 #include "system/network.h"
@@ -83,27 +84,12 @@ static BOOL bLoaded = False;
 #define LP_SNUM_OK(i) (((i) >= 0) && ((i) < iNumServices) && ServicePtrs[(i)]->valid)
 #define VALID(i) ServicePtrs[i]->valid
 
-static BOOL do_parameter(const char *, const char *);
+static BOOL do_parameter(const char *, const char *, void *);
 static BOOL do_parameter_var(const char *pszParmName, const char *fmt, ...);
 
 static BOOL defaults_saved = False;
 
 
-#define FLAG_BASIC     0x0001 /* fundamental options */
-#define FLAG_SHARE     0x0002 /* file sharing options */
-#define FLAG_PRINT     0x0004 /* printing options */
-#define FLAG_GLOBAL    0x0008 /* local options that should be globally settable in SWAT */
-#define FLAG_WIZARD    0x0010 /* Parameters that the wizard will operate on */
-#define FLAG_ADVANCED  0x0020 /* Parameters that the wizard will operate on */
-#define FLAG_DEVELOPER         0x0040 /* Parameters that the wizard will operate on */
-#define FLAG_DEPRECATED 0x1000 /* options that should no longer be used */
-#define FLAG_HIDE      0x2000 /* options that should be hidden in SWAT */
-#define FLAG_DOS_STRING 0x4000 /* convert from UNIX to DOS codepage when reading this string. */
-#define FLAG_CMDLINE    0x8000 /* this option was set from the command line */
-
-
-
-
 struct param_opt {
        struct param_opt *prev, *next;
        char *key;
@@ -116,43 +102,32 @@ struct param_opt {
  */
 typedef struct
 {
+       int server_role;
+
        char **smb_ports;
        char *dos_charset;
        char *unix_charset;
        char *ncalrpc_dir;
        char *display_charset;
-       char *szPrintcapname;
        char *szLockDir;
        char *szPidDir;
-       char *szRootdir;
        char *szSetupDir;
-       char *szDefaultService;
-       char *szHostsEquiv;
        char *szServerString;
        char *szAutoServices;
-       char *szPasswdProgram;
        char *szPasswdChat;
        char *szLogFile;
        char *szConfigFile;
-       char *szSMBPasswdFile;
        char *szSAM_URL;
        char *szSPOOLSS_URL;
+       char *szWINS_CONFIG_URL;
        char *szWINS_URL;
        char *szPrivateDir;
        char **jsInclude;
-       char **szPreloadModules;
        char **szPasswordServers;
        char *szSocketOptions;
        char *szRealm;
-       char *szADSserver;
-       char *szLogonScript;
-       char *szLogonPath;
-       char *szLogonDrive;
-       char *szLogonHome;
        char **szWINSservers;
        char **szInterfaces;
-       char *szRemoteAnnounce;
-       char *szRemoteBrowseSync;
        char *szSocketAddress;
        char *szAnnounceVersion;        /* This is initialised in init_globals */
        char *szWorkgroup;
@@ -162,24 +137,11 @@ typedef struct
        char *szDomainOtherSIDs;
        char **szNameResolveOrder;
        char *szPanicAction;
-       char *szAddUserScript; 
-       char *szAddMachineScript;
-       char *szWINSHook;
-       char *szWINSPartners;
        char **dcerpc_ep_servers;
        char **server_services;
        char *ntptr_providor;
-       char *szWinbindUID;
-       char *szWinbindGID;
-       char *szNonUnixAccountRange;
-       char *szTemplateHomedir;
-       char *szTemplateShell;
        char *szWinbindSeparator;
-       BOOL bWinbindEnumUsers;
-       BOOL bWinbindEnumGroups;
-       BOOL bWinbindUseDefaultDomain;
-       char *szIDMapBackend;
-       char *szGuestaccount;
+       BOOL bWinbindSealedPipes;
        char *swat_directory;
        BOOL tls_enabled;
        char *tls_keyfile;
@@ -189,54 +151,34 @@ typedef struct
        int max_mux;
        int max_xmit;
        int pwordlevel;
-       int unamelevel;
        int maxprotocol;
        int minprotocol;
        int security;
        char **AuthMethods;
        BOOL paranoid_server_security;
-       int lpqcachetime;
-       BOOL bDisableSpoolss;
-       int os_level;
-       int enhanced_browsing;
-       int time_offset;
-       int max_ttl;
        int max_wins_ttl;
        int min_wins_ttl;
-       int lm_announce;
-       int lm_interval;
        int announce_as;        /* This is initialised in init_globals */
-       int machine_password_timeout;
-       int winbind_cache_time;
-       int iLockSpinCount;
-       int iLockSpinTime;
        int nbt_port;
        int dgram_port;
        int cldap_port;
        int krb5_port;
+       int kpasswd_port;
        int web_port;
        char *socket_options;
-       BOOL bDNSproxy;
        BOOL bWINSsupport;
-       BOOL bWINSproxy;
        BOOL bLocalMaster;
        BOOL bPreferredMaster;
-       BOOL bDomainMaster;
-       BOOL bDomainLogons;
        BOOL bEncryptPasswords;
        BOOL bNullPasswords;
        BOOL bObeyPamRestrictions;
-       BOOL bLoadPrinters;
        BOOL bLargeReadwrite;
        BOOL bReadRaw;
        BOOL bWriteRaw;
        BOOL bTimeServer;
        BOOL bBindInterfacesOnly;
-       BOOL bPamPasswordChange;
        BOOL bNTSmbSupport;
        BOOL bNTStatusSupport;
-       BOOL bAllowTrustedDomains;
-       BOOL bPlaintextAuth;
        BOOL bLanmanAuth;
        BOOL bNTLMAuth;
        BOOL bUseSpnego;
@@ -245,16 +187,12 @@ typedef struct
        BOOL bClientPlaintextAuth;
        BOOL bClientLanManAuth;
        BOOL bClientNTLMv2Auth;
+       BOOL client_use_spnego_principal;
        BOOL bHostMSDfs;
-       BOOL bHideLocalUsers;
        BOOL bUnicode;
-       BOOL bUseMmap;
-       BOOL bHostnameLookups;
        BOOL bUnixExtensions;
        BOOL bDisableNetbios;
        BOOL bRpcBigEndian;
-       int restrict_anonymous;
-       int name_cache_timeout;
        struct param_opt *param_opt;
 }
 global;
@@ -267,34 +205,19 @@ static global Globals;
 typedef struct
 {
        BOOL valid;
-       BOOL autoloaded;
        char *szService;
        char *szPath;
-       char *szUsername;
-       char **szInvalidUsers;
-       char **szValidUsers;
-       char **szAdminUsers;
        char *szCopy;
        char *szInclude;
-       char *szPrintcommand;
-       char *szLpqcommand;
-       char *szLprmcommand;
-       char *szLppausecommand;
-       char *szLpresumecommand;
-       char *szQueuepausecommand;
-       char *szQueueresumecommand;
        char *szPrintername;
        char **szHostsallow;
        char **szHostsdeny;
        char *comment;
        char *volume;
        char *fstype;
-       char *szMSDfsProxy;
        char **ntvfs_handler;
-       int iMinPrintSpace;
        int iMaxPrintJobs;
        int iMaxConnections;
-       int iPrinting;
        int iCSCPolicy;
        BOOL bAvailable;
        BOOL bBrowseable;
@@ -303,17 +226,9 @@ typedef struct
        BOOL bMap_system;
        BOOL bMap_hidden;
        BOOL bMap_archive;
-       BOOL bLocking;
        BOOL bStrictLocking;
-       BOOL bPosixLocking;
-       BOOL bOpLocks;
-       BOOL bLevel2OpLocks;
-       BOOL bOnlyUser;
-       BOOL bGuest_only;
-       BOOL bGuest_ok;
        BOOL *copymap;
        BOOL bMSDfsRoot;
-       BOOL bShareModes;
        BOOL bStrictSync;
        BOOL bCIFileSystem;
        struct param_opt *param_opt;
@@ -326,34 +241,19 @@ service;
 /* This is a default service used to prime a services structure */
 static service sDefault = {
        True,                   /* valid */
-       False,                  /* not autoloaded */
        NULL,                   /* szService */
        NULL,                   /* szPath */
-       NULL,                   /* szUsername */
-       NULL,                   /* szInvalidUsers */
-       NULL,                   /* szValidUsers */
-       NULL,                   /* szAdminUsers */
        NULL,                   /* szCopy */
        NULL,                   /* szInclude */
-       NULL,                   /* szPrintcommand */
-       NULL,                   /* szLpqcommand */
-       NULL,                   /* szLprmcommand */
-       NULL,                   /* szLppausecommand */
-       NULL,                   /* szLpresumecommand */
-       NULL,                   /* szQueuepausecommand */
-       NULL,                   /* szQueueresumecommand */
        NULL,                   /* szPrintername */
        NULL,                   /* szHostsallow */
        NULL,                   /* szHostsdeny */
        NULL,                   /* comment */
        NULL,                   /* volume */
        NULL,                   /* fstype */
-       NULL,                   /* szMSDfsProxy */
        NULL,                   /* ntvfs_handler */
-       0,                      /* iMinPrintSpace */
        1000,                   /* iMaxPrintJobs */
        0,                      /* iMaxConnections */
-       DEFAULT_PRINTING,       /* iPrinting */
        0,                      /* iCSCPolicy */
        True,                   /* bAvailable */
        True,                   /* bBrowseable */
@@ -362,17 +262,9 @@ static service sDefault = {
        False,                  /* bMap_system */
        False,                  /* bMap_hidden */
        True,                   /* bMap_archive */
-       True,                   /* bLocking */
        True,                   /* bStrictLocking */
-       True,                   /* bPosixLocking */
-       True,                   /* bOpLocks */
-       True,                   /* bLevel2OpLocks */
-       False,                  /* bOnlyUser */
-       False,                  /* bGuest_only */
-       False,                  /* bGuest_ok */
        NULL,                   /* copymap */
        False,                  /* bMSDfsRoot */
-       True,                   /* bShareModes */
        False,                  /* bStrictSync */
        False,                  /* bCIFileSystem */
        NULL,                   /* Parametric options */
@@ -385,7 +277,6 @@ static service **ServicePtrs = NULL;
 static int iNumServices = 0;
 static int iServiceIndex = 0;
 static BOOL bInGlobalSection = True;
-static int server_role;
 static int default_server_announce;
 
 #define NUMPARAMETERS (sizeof(parm_table) / sizeof(struct parm_struct))
@@ -393,11 +284,7 @@ static int default_server_announce;
 /* prototypes for the special type handlers */
 static BOOL handle_include(const char *pszParmValue, char **ptr);
 static BOOL handle_copy(const char *pszParmValue, char **ptr);
-static BOOL handle_winbind_uid(const char *pszParmValue, char **ptr);
-static BOOL handle_winbind_gid(const char *pszParmValue, char **ptr);
-static BOOL handle_non_unix_account_range(const char *pszParmValue, char **ptr);
 
-static void set_server_role(void);
 static void set_default_server_announce_type(void);
 
 static const struct enum_list enum_protocol[] = {
@@ -413,30 +300,6 @@ static const struct enum_list enum_protocol[] = {
 static const struct enum_list enum_security[] = {
        {SEC_SHARE, "SHARE"},
        {SEC_USER, "USER"},
-       {SEC_SERVER, "SERVER"},
-       {SEC_DOMAIN, "DOMAIN"},
-#ifdef HAVE_ADS
-       {SEC_ADS, "ADS"},
-#endif
-       {-1, NULL}
-};
-
-static const struct enum_list enum_printing[] = {
-       {PRINT_SYSV, "sysv"},
-       {PRINT_AIX, "aix"},
-       {PRINT_HPUX, "hpux"},
-       {PRINT_BSD, "bsd"},
-       {PRINT_QNX, "qnx"},
-       {PRINT_PLP, "plp"},
-       {PRINT_LPRNG, "lprng"},
-       {PRINT_SOFTQ, "softq"},
-       {PRINT_CUPS, "cups"},
-       {PRINT_LPRNT, "nt"},
-       {PRINT_LPROS2, "os2"},
-#ifdef DEVELOPER
-       {PRINT_TEST, "test"},
-       {PRINT_VLP, "vlp"},
-#endif /* DEVELOPER */
        {-1, NULL}
 };
 
@@ -501,6 +364,14 @@ static const struct enum_list enum_smb_signing_vals[] = {
        {-1, NULL}
 };
 
+static const struct enum_list enum_server_role[] = {
+       {ROLE_STANDALONE, "standalone"},
+       {ROLE_DOMAIN_MEMBER, "member server"},
+       {ROLE_DOMAIN_BDC, "bdc"},
+       {ROLE_DOMAIN_PDC, "pdc"},
+       {-1, NULL}
+};
+
 
 /* Note: We do not initialise the defaults union - it is not allowed in ANSI C
  *
@@ -515,6 +386,8 @@ static const struct enum_list enum_smb_signing_vals[] = {
 static struct parm_struct parm_table[] = {
        {"Base Options", P_SEP, P_SEPARATOR},
 
+       {"server role", P_ENUM, P_GLOBAL, &Globals.server_role, NULL, enum_server_role, FLAG_BASIC},
+
        {"dos charset", P_STRING, P_GLOBAL, &Globals.dos_charset, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"unix charset", P_STRING, P_GLOBAL, &Globals.unix_charset, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"ncalrpc dir", P_STRING, P_GLOBAL, &Globals.ncalrpc_dir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
@@ -524,7 +397,6 @@ static struct parm_struct parm_table[] = {
        {"directory", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_HIDE},
        {"workgroup", P_USTRING, P_GLOBAL, &Globals.szWorkgroup, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
        {"realm", P_STRING, P_GLOBAL, &Globals.szRealm, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
-       {"ADS server", P_STRING, P_GLOBAL, &Globals.szADSserver, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
        {"netbios name", P_USTRING, P_GLOBAL, &Globals.szNetbiosName, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
        {"netbios aliases", P_LIST, P_GLOBAL, &Globals.szNetbiosAliases, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
        {"netbios scope", P_USTRING, P_GLOBAL, &Globals.szNetbiosScope, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
@@ -541,54 +413,27 @@ static struct parm_struct parm_table[] = {
        {"security", P_ENUM, P_GLOBAL, &Globals.security, NULL, enum_security, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
        {"auth methods", P_LIST, P_GLOBAL, &Globals.AuthMethods, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
        {"encrypt passwords", P_BOOL, P_GLOBAL, &Globals.bEncryptPasswords, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
-       {"allow trusted domains", P_BOOL, P_GLOBAL, &Globals.bAllowTrustedDomains, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"hosts equiv", P_STRING, P_GLOBAL, &Globals.szHostsEquiv, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"idmap backend", P_STRING, P_GLOBAL, &Globals.szIDMapBackend, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"null passwords", P_BOOL, P_GLOBAL, &Globals.bNullPasswords, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"obey pam restrictions", P_BOOL, P_GLOBAL, &Globals.bObeyPamRestrictions, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"password server", P_LIST, P_GLOBAL, &Globals.szPasswordServers, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
-       {"smb passwd file", P_STRING, P_GLOBAL, &Globals.szSMBPasswdFile, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"sam database", P_STRING, P_GLOBAL, &Globals.szSAM_URL, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"spoolss database", P_STRING, P_GLOBAL, &Globals.szSPOOLSS_URL, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
+       {"wins config database", P_STRING, P_GLOBAL, &Globals.szWINS_CONFIG_URL, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"wins database", P_STRING, P_GLOBAL, &Globals.szWINS_URL, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"private dir", P_STRING, P_GLOBAL, &Globals.szPrivateDir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"non unix account range", P_STRING, P_GLOBAL, &Globals.szNonUnixAccountRange, handle_non_unix_account_range, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"root directory", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"root dir", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"root", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_HIDE | FLAG_DEVELOPER},
-       {"guest account", P_STRING, P_GLOBAL, &Globals.szGuestaccount, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER},
-       
-       {"pam password change", P_BOOL, P_GLOBAL, &Globals.bPamPasswordChange, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"passwd program", P_STRING, P_GLOBAL, &Globals.szPasswdProgram, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"passwd chat", P_STRING, P_GLOBAL, &Globals.szPasswdChat, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"password level", P_INTEGER, P_GLOBAL, &Globals.pwordlevel, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"username level", P_INTEGER, P_GLOBAL, &Globals.unamelevel, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"restrict anonymous", P_INTEGER, P_GLOBAL, &Globals.restrict_anonymous, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"plaintext auth", P_BOOL, P_GLOBAL, &Globals.bPlaintextAuth, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"lanman auth", P_BOOL, P_GLOBAL, &Globals.bLanmanAuth, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"ntlm auth", P_BOOL, P_GLOBAL, &Globals.bNTLMAuth, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"client NTLMv2 auth", P_BOOL, P_GLOBAL, &Globals.bClientNTLMv2Auth, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"client lanman auth", P_BOOL, P_GLOBAL, &Globals.bClientLanManAuth, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"client plaintext auth", P_BOOL, P_GLOBAL, &Globals.bClientPlaintextAuth, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       
-       {"username", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE},
-       {"user", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_HIDE},
-       {"users", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_HIDE},
-       
-       {"invalid users", P_LIST, P_LOCAL, &sDefault.szInvalidUsers, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE},
-       {"valid users", P_LIST, P_LOCAL, &sDefault.szValidUsers, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE},
-       {"admin users", P_LIST, P_LOCAL, &sDefault.szAdminUsers, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE},
+       {"client use spnego principal", P_BOOL, P_GLOBAL, &Globals.client_use_spnego_principal, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        
        {"read only", P_BOOL, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE},
 
-       {"guest only", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL, NULL, FLAG_SHARE},
-
-       {"guest ok", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER},
-
-       {"only user", P_BOOL, P_LOCAL, &sDefault.bOnlyUser, NULL, NULL, FLAG_SHARE},
        {"hosts allow", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER},
        {"hosts deny", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER},
-       {"preload modules", P_LIST, P_GLOBAL, &Globals.szPreloadModules, NULL, NULL, FLAG_BASIC | FLAG_GLOBAL},
 
        {"Logging Options", P_SEP, P_SEPARATOR},
 
@@ -603,6 +448,7 @@ static struct parm_struct parm_table[] = {
        {"dgram port", P_INTEGER, P_GLOBAL, &Globals.dgram_port, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"cldap port", P_INTEGER, P_GLOBAL, &Globals.cldap_port, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"krb5 port", P_INTEGER, P_GLOBAL, &Globals.krb5_port, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
+       {"kpasswd port", P_INTEGER, P_GLOBAL, &Globals.kpasswd_port, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"web port", P_INTEGER, P_GLOBAL, &Globals.web_port, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"tls enabled", P_BOOL, P_GLOBAL, &Globals.tls_enabled, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"tls keyfile", P_STRING, P_GLOBAL, &Globals.tls_keyfile, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
@@ -626,7 +472,6 @@ static struct parm_struct parm_table[] = {
        {"max xmit", P_INTEGER, P_GLOBAL, &Globals.max_xmit, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
 
        {"name resolve order", P_LIST, P_GLOBAL, &Globals.szNameResolveOrder, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
-       {"max ttl", P_INTEGER, P_GLOBAL, &Globals.max_ttl, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, 
        {"max wins ttl", P_INTEGER, P_GLOBAL, &Globals.max_wins_ttl, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"min wins ttl", P_INTEGER, P_GLOBAL, &Globals.min_wins_ttl, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"time server", P_BOOL, P_GLOBAL, &Globals.bTimeServer, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
@@ -638,36 +483,18 @@ static struct parm_struct parm_table[] = {
 
        {"Tuning Options", P_SEP, P_SEPARATOR},
                
-       {"lpq cache time", P_INTEGER, P_GLOBAL, &Globals.lpqcachetime, NULL, NULL, FLAG_DEVELOPER},
        {"max connections", P_INTEGER, P_LOCAL, &sDefault.iMaxConnections, NULL, NULL, FLAG_SHARE},
        {"paranoid server security", P_BOOL, P_GLOBAL, &Globals.paranoid_server_security, NULL, NULL, FLAG_DEVELOPER},
-       {"min print space", P_INTEGER, P_LOCAL, &sDefault.iMinPrintSpace, NULL, NULL, FLAG_PRINT},
-       
        {"socket options", P_STRING, P_GLOBAL, &Globals.socket_options, NULL, NULL, FLAG_DEVELOPER},
-       {"use mmap", P_BOOL, P_GLOBAL, &Globals.bUseMmap, NULL, NULL, FLAG_DEVELOPER},
-       {"hostname lookups", P_BOOL, P_GLOBAL, &Globals.bHostnameLookups, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
 
-       {"name cache timeout", P_INTEGER, P_GLOBAL, &Globals.name_cache_timeout, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"strict sync", P_BOOL, P_LOCAL, &sDefault.bStrictSync, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
        {"case insensitive filesystem", P_BOOL, P_LOCAL, &sDefault.bCIFileSystem, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
 
        {"Printing Options", P_SEP, P_SEPARATOR},
        
        {"max print jobs", P_INTEGER, P_LOCAL, &sDefault.iMaxPrintJobs, NULL, NULL, FLAG_PRINT},
-       {"load printers", P_BOOL, P_GLOBAL, &Globals.bLoadPrinters, NULL, NULL, FLAG_PRINT},
-       {"printcap name", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, FLAG_PRINT | FLAG_DEVELOPER},
-       {"printcap", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, FLAG_HIDE},
        {"printable", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, FLAG_PRINT},
        {"print ok", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, FLAG_HIDE},
-       {"printing", P_ENUM, P_LOCAL, &sDefault.iPrinting, NULL, enum_printing, FLAG_PRINT | FLAG_GLOBAL},
-       {"print command", P_STRING, P_LOCAL, &sDefault.szPrintcommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL},
-       {"disable spoolss", P_BOOL, P_GLOBAL, &Globals.bDisableSpoolss, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL},
-       {"lpq command", P_STRING, P_LOCAL, &sDefault.szLpqcommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL},
-       {"lprm command", P_STRING, P_LOCAL, &sDefault.szLprmcommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL},
-       {"lppause command", P_STRING, P_LOCAL, &sDefault.szLppausecommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL},
-       {"lpresume command", P_STRING, P_LOCAL, &sDefault.szLpresumecommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL},
-       {"queuepause command", P_STRING, P_LOCAL, &sDefault.szQueuepausecommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL},
-       {"queueresume command", P_STRING, P_LOCAL, &sDefault.szQueueresumecommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL},
        
        {"printer name", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, FLAG_PRINT},
        {"printer", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, FLAG_HIDE},
@@ -680,53 +507,27 @@ static struct parm_struct parm_table[] = {
 
        {"Domain Options", P_SEP, P_SEPARATOR},
        
-       {"machine password timeout", P_INTEGER, P_GLOBAL, &Globals.machine_password_timeout, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
-
        {"Logon Options", P_SEP, P_SEPARATOR},
 
-       {"add user script", P_STRING, P_GLOBAL, &Globals.szAddUserScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"add machine script", P_STRING, P_GLOBAL, &Globals.szAddMachineScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-
-       {"logon script", P_STRING, P_GLOBAL, &Globals.szLogonScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"logon path", P_STRING, P_GLOBAL, &Globals.szLogonPath, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"logon drive", P_STRING, P_GLOBAL, &Globals.szLogonDrive, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"logon home", P_STRING, P_GLOBAL, &Globals.szLogonHome, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"domain logons", P_BOOL, P_GLOBAL, &Globals.bDomainLogons, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
 
        {"Browse Options", P_SEP, P_SEPARATOR},
        
-       {"os level", P_INTEGER, P_GLOBAL, &Globals.os_level, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"lm announce", P_ENUM, P_GLOBAL, &Globals.lm_announce, NULL, enum_bool_auto, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"lm interval", P_INTEGER, P_GLOBAL, &Globals.lm_interval, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"preferred master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER},
        {"prefered master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_HIDE},
        {"local master", P_BOOL, P_GLOBAL, &Globals.bLocalMaster, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"domain master", P_ENUM, P_GLOBAL, &Globals.bDomainMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER},
        {"browseable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER},
        {"browsable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_HIDE},
-       {"enhanced browsing", P_BOOL, P_GLOBAL, &Globals.enhanced_browsing, NULL, NULL, FLAG_DEVELOPER | FLAG_ADVANCED},
 
        {"WINS Options", P_SEP, P_SEPARATOR},
-       {"dns proxy", P_BOOL, P_GLOBAL, &Globals.bDNSproxy, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"wins proxy", P_BOOL, P_GLOBAL, &Globals.bWINSproxy, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        
        {"wins server", P_LIST, P_GLOBAL, &Globals.szWINSservers, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
        {"wins support", P_BOOL, P_GLOBAL, &Globals.bWINSsupport, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
-       {"wins hook", P_STRING, P_GLOBAL, &Globals.szWINSHook, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"wins partners", P_STRING, P_GLOBAL, &Globals.szWINSPartners, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
 
        {"Locking Options", P_SEP, P_SEPARATOR},
        
        {"csc policy", P_ENUM, P_LOCAL, &sDefault.iCSCPolicy, NULL, enum_csc_policy, FLAG_SHARE | FLAG_GLOBAL},
-       {"locking", P_BOOL, P_LOCAL, &sDefault.bLocking, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
-       {"lock spin count", P_INTEGER, P_GLOBAL, &Globals.iLockSpinCount, NULL, NULL, FLAG_GLOBAL},
-       {"lock spin time", P_INTEGER, P_GLOBAL, &Globals.iLockSpinTime, NULL, NULL, FLAG_GLOBAL},
        
-       {"oplocks", P_BOOL, P_LOCAL, &sDefault.bOpLocks, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
-       {"level2 oplocks", P_BOOL, P_LOCAL, &sDefault.bLevel2OpLocks, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
-       {"posix locking", P_BOOL, P_LOCAL, &sDefault.bPosixLocking, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
        {"strict locking", P_BOOL, P_LOCAL, &sDefault.bStrictLocking, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
-       {"share modes", P_BOOL, P_LOCAL,  &sDefault.bShareModes, NULL, NULL, FLAG_SHARE|FLAG_GLOBAL},
 
        {"Miscellaneous Options", P_SEP, P_SEPARATOR},
        
@@ -739,12 +540,7 @@ static struct parm_struct parm_table[] = {
        {"js include", P_LIST, P_GLOBAL, &Globals.jsInclude, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"setup directory", P_STRING, P_GLOBAL, &Globals.szSetupDir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        
-       {"default service", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"default", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL,  FLAG_DEVELOPER},
-       {"remote announce", P_STRING, P_GLOBAL, &Globals.szRemoteAnnounce, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"remote browse sync", P_STRING, P_GLOBAL, &Globals.szRemoteBrowseSync, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"socket address", P_STRING, P_GLOBAL, &Globals.szSocketAddress, NULL, NULL, FLAG_DEVELOPER},
-       {"time offset", P_INTEGER, P_GLOBAL, &Globals.time_offset, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"-valid", P_BOOL, P_LOCAL, &sDefault.valid, NULL, NULL, FLAG_HIDE},
        
        {"copy", P_STRING, P_LOCAL, &sDefault.szCopy, handle_copy, NULL, FLAG_HIDE},
@@ -755,142 +551,24 @@ static struct parm_struct parm_table[] = {
        {"fstype", P_STRING, P_LOCAL, &sDefault.fstype, NULL, NULL, FLAG_SHARE},
 
        {"panic action", P_STRING, P_GLOBAL, &Globals.szPanicAction, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"hide local users", P_BOOL, P_GLOBAL, &Globals.bHideLocalUsers, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
 
        {"msdfs root", P_BOOL, P_LOCAL, &sDefault.bMSDfsRoot, NULL, NULL, FLAG_SHARE},
-       {"msdfs proxy", P_STRING, P_LOCAL, &sDefault.szMSDfsProxy, NULL, NULL, FLAG_SHARE},
        {"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"Winbind options", P_SEP, P_SEPARATOR},
-
-       {"winbind uid", P_STRING, P_GLOBAL, &Globals.szWinbindUID, handle_winbind_uid, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"winbind gid", P_STRING, P_GLOBAL, &Globals.szWinbindGID, handle_winbind_gid, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"template homedir", P_STRING, P_GLOBAL, &Globals.szTemplateHomedir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"template shell", P_STRING, P_GLOBAL, &Globals.szTemplateShell, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"winbind separator", P_STRING, P_GLOBAL, &Globals.szWinbindSeparator, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"winbind cache time", P_INTEGER, P_GLOBAL, &Globals.winbind_cache_time, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"winbind enum users", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumUsers, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"winbind enum groups", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumGroups, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-       {"winbind use default domain", P_BOOL, P_GLOBAL, &Globals.bWinbindUseDefaultDomain, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
+       {"winbind separator", P_STRING, P_GLOBAL, &Globals.szWinbindSeparator, 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}
 };
 
-/***************************************************************************
- Initialise the sDefault parameter structure for the printer values.
-***************************************************************************/
-
-static void init_printer_values(void)
-{
-       /* choose defaults depending on the type of printing */
-       switch (sDefault.iPrinting) {
-               case PRINT_BSD:
-               case PRINT_AIX:
-               case PRINT_LPRNT:
-               case PRINT_LPROS2:
-                       do_parameter("Lpqcommand", "lpq -P'%p'");
-                       do_parameter("Lprmcommand", "lprm -P'%p' %j");
-                       do_parameter("Printcommand",
-                                  "lpr -r -P'%p' %s");
-                       break;
-
-               case PRINT_LPRNG:
-               case PRINT_PLP:
-                       do_parameter("Lpqcommand", "lpq -P'%p'");
-                       do_parameter("Lprmcommand", "lprm -P'%p' %j");
-                       do_parameter("Printcommand",
-                                  "lpr -r -P'%p' %s");
-                       do_parameter("Queuepausecommand",
-                                  "lpc stop '%p'");
-                       do_parameter("Queueresumecommand",
-                                  "lpc start '%p'");
-                       do_parameter("Lppausecommand",
-                                  "lpc hold '%p' %j");
-                       do_parameter("Lpresumecommand",
-                                  "lpc release '%p' %j");
-                       break;
-
-               case PRINT_CUPS:
-#ifdef HAVE_CUPS
-                       do_parameter("Lpqcommand", "");
-                       do_parameter("Lprmcommand", "");
-                       do_parameter("Printcommand", "");
-                       do_parameter("Lppausecommand", "");
-                       do_parameter("Lpresumecommand", "");
-                       do_parameter("Queuepausecommand", "");
-                       do_parameter("Queueresumecommand", "");
-
-                       do_parameter("Printcapname", "cups");
-#else
-                       do_parameter("Lpqcommand",
-                                  "/usr/bin/lpstat -o '%p'");
-                       do_parameter("Lprmcommand",
-                                  "/usr/bin/cancel '%p-%j'");
-                       do_parameter("Printcommand",
-                                  "/usr/bin/lp -d '%p' %s; rm %s");
-                       do_parameter("Lppausecommand",
-                                  "lp -i '%p-%j' -H hold");
-                       do_parameter("Lpresumecommand",
-                                  "lp -i '%p-%j' -H resume");
-                       do_parameter("Queuepausecommand",
-                                  "/usr/bin/disable '%p'");
-                       do_parameter("Queueresumecommand",
-                                  "/usr/bin/enable '%p'");
-                       do_parameter("Printcapname", "lpstat");
-#endif /* HAVE_CUPS */
-                       break;
-
-               case PRINT_SYSV:
-               case PRINT_HPUX:
-                       do_parameter("Lpqcommand", "lpstat -o%p");
-                       do_parameter("Lprmcommand", "cancel %p-%j");
-                       do_parameter("Printcommand",
-                                  "lp -c -d%p %s; rm %s");
-                       do_parameter("Queuepausecommand",
-                                  "disable %p");
-                       do_parameter("Queueresumecommand",
-                                  "enable %p");
-#ifndef HPUX
-                       do_parameter("Lppausecommand",
-                                  "lp -i %p-%j -H hold");
-                       do_parameter("Lpresumecommand",
-                                  "lp -i %p-%j -H resume");
-#endif /* HPUX */
-                       break;
-
-               case PRINT_QNX:
-                       do_parameter("Lpqcommand", "lpq -P%p");
-                       do_parameter("Lprmcommand", "lprm -P%p %j");
-                       do_parameter("Printcommand", "lp -r -P%p %s");
-                       break;
-
-               case PRINT_SOFTQ:
-                       do_parameter("Lpqcommand", "qstat -l -d%p");
-                       do_parameter("Lprmcommand",
-                                  "qstat -s -j%j -c");
-                       do_parameter("Printcommand",
-                                  "lp -d%p -s %s; rm %s");
-                       do_parameter("Lppausecommand",
-                                  "qstat -s -j%j -h");
-                       do_parameter("Lpresumecommand",
-                                  "qstat -s -j%j -r");
-                       break;
-#ifdef DEVELOPER
-       case PRINT_TEST:
-       case PRINT_VLP:
-               do_parameter("Printcommand", "vlp print %p %s");
-               do_parameter("Lpqcommand", "vlp lpq %p");
-               do_parameter("Lprmcommand", "vlp lprm %p %j");
-               do_parameter("Lppausecommand", "vlp lppause %p %j");
-               do_parameter("Lpresumecommand", "vlp lpresum %p %j");
-               do_parameter("Queuepausecommand", "vlp queuepause %p");
-               do_parameter("Queueresumecommand", "vlp queueresume %p");
-               break;
-#endif /* DEVELOPER */
 
-       }
+/*
+  return the parameter table
+*/
+struct parm_struct *lp_parm_table(void)
+{
+       return parm_table;
 }
 
-
 /***************************************************************************
  Initialise the global parameter structure.
 ***************************************************************************/
@@ -910,164 +588,121 @@ static void init_globals(void)
                }
        }
 
-       do_parameter("config file", dyn_CONFIGFILE);
+       do_parameter("config file", dyn_CONFIGFILE, NULL);
+
+       do_parameter("server role", "standalone", NULL);
 
        /* options that can be set on the command line must be initialised via
           the slower do_parameter() to ensure that FLAG_CMDLINE is obeyed */
 #ifdef TCP_NODELAY
-       do_parameter("socket options", "TCP_NODELAY");
+       do_parameter("socket options", "TCP_NODELAY", NULL);
 #endif
-       do_parameter("workgroup", DEFAULT_WORKGROUP);
+       do_parameter("workgroup", DEFAULT_WORKGROUP, NULL);
        myname = get_myname();
-       do_parameter("netbios name", myname);
+       do_parameter("netbios name", myname, NULL);
        SAFE_FREE(myname);
-       do_parameter("max protocol", "NT1");
-       do_parameter("name resolve order", "lmhosts wins host bcast");
-
-       init_printer_values();
-
-       do_parameter("fstype", FSTYPE_STRING);
-       do_parameter("ntvfs handler", "unixuid default");
-       do_parameter("max connections", "-1");
-
-       do_parameter("dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg dssetup");
-#ifdef WITH_KRB5
-       do_parameter("server services", "smb rpc nbt ldap cldap web kdc");
-#else
-       do_parameter("server services", "smb rpc nbt ldap cldap web");
-#endif
-       do_parameter("ntptr providor", "simple_ldb");
-       do_parameter("auth methods", "anonymous sam_ignoredomain");
-       do_parameter("smb passwd file", dyn_SMB_PASSWD_FILE);
-       do_parameter("private dir", dyn_PRIVATE_DIR);
-       do_parameter("sam database", "sam.ldb");
-       do_parameter("spoolss database", "spoolss.ldb");
-       do_parameter("wins database", "wins.ldb");
-       do_parameter("registry:HKEY_LOCAL_MACHINE", "hklm.ldb");
-       do_parameter("guest account", GUEST_ACCOUNT);
-
+       do_parameter("max protocol", "NT1", NULL);
+       do_parameter("name resolve order", "lmhosts wins host bcast", NULL);
+
+       do_parameter("fstype", FSTYPE_STRING, NULL);
+       do_parameter("ntvfs handler", "unixuid default", NULL);
+       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("ntptr providor", "simple_ldb", NULL);
+       do_parameter("auth methods", "anonymous sam_ignoredomain", NULL);
+       do_parameter("private dir", dyn_PRIVATE_DIR, NULL);
+       do_parameter("sam database", "sam.ldb", NULL);
+       do_parameter("spoolss database", "spoolss.ldb", NULL);
+       do_parameter("wins config database", "wins_config.ldb", NULL);
+       do_parameter("wins database", "wins.ldb", NULL);
+       do_parameter("registry:HKEY_LOCAL_MACHINE", "hklm.ldb", NULL);
+
+       /* 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. */
+       do_parameter("registry:HKEY_USERS", "hku.ldb", NULL);
+       
        /* using UTF8 by default allows us to support all chars */
-       do_parameter("unix charset", "UTF8");
+       do_parameter("unix charset", "UTF8", NULL);
 
        /* Use codepage 850 as a default for the dos character set */
-       do_parameter("dos charset", "CP850");
+       do_parameter("dos charset", "CP850", NULL);
 
        /*
         * Allow the default PASSWD_CHAT to be overridden in local.h.
         */
-       do_parameter("passwd chat", DEFAULT_PASSWD_CHAT);
+       do_parameter("passwd chat", DEFAULT_PASSWD_CHAT, NULL);
 
-       do_parameter("passwd program", "");
-       do_parameter("printcap name", PRINTCAP_NAME);
-       
-       do_parameter("pid directory", dyn_PIDDIR);
-       do_parameter("lock dir", dyn_LOCKDIR);
-       do_parameter("ncalrpc dir", dyn_NCALRPCDIR);
+       do_parameter("pid directory", dyn_PIDDIR, NULL);
+       do_parameter("lock dir", dyn_LOCKDIR, NULL);
+       do_parameter("ncalrpc dir", dyn_NCALRPCDIR, NULL);
 
-       do_parameter("socket address", "0.0.0.0");
+       do_parameter("socket address", "0.0.0.0", NULL);
        do_parameter_var("server string", "Samba %s", SAMBA_VERSION_STRING);
 
        do_parameter_var("announce version", "%d.%d", 
                         DEFAULT_MAJOR_VERSION,
                         DEFAULT_MINOR_VERSION);
 
-       do_parameter("logon drive", "");
-
-       do_parameter("logon home", "\\\\%N\\%U");
-       do_parameter("logon path", "\\\\%N\\%U\\profile");
-       do_parameter("password server", "*");
-
-       do_parameter("load printers", "True");
-
-       do_parameter("max mux", "50");
-       do_parameter("max xmit", "12288");
-       do_parameter("lpqcachetime", "10");
-       do_parameter("DisableSpoolss", "False");
-       do_parameter("password level", "0");
-       do_parameter("username level", "0");
-       do_parameter("LargeReadwrite", "True");
-       do_parameter("minprotocol", "CORE");
-       do_parameter("security", "USER");
-       do_parameter("paranoid server security", "True");
-       do_parameter("EncryptPasswords", "True");
-       do_parameter("ReadRaw", "True");
-       do_parameter("WriteRaw", "True");
-       do_parameter("NullPasswords", "False");
-       do_parameter("ObeyPamRestrictions", "False");
-       do_parameter("lm announce", "Auto");    
-       do_parameter("lm interval", "60");
-       do_parameter("announce as", "NT SERVER");
-
-       do_parameter("TimeServer", "False");
-       do_parameter("BindInterfacesOnly", "False");
-       do_parameter("PamPasswordChange", "False");
-       do_parameter("Unicode", "True");
-       do_parameter("restrict anonymous", "0");
-       do_parameter("ClientLanManAuth", "True");
-       do_parameter("LanmanAuth", "True");
-       do_parameter("NTLMAuth", "True");
+       do_parameter("password server", "*", NULL);
+
+       do_parameter("max mux", "50", NULL);
+       do_parameter("max xmit", "12288", NULL);
+       do_parameter("password level", "0", NULL);
+       do_parameter("LargeReadwrite", "True", NULL);
+       do_parameter("minprotocol", "CORE", NULL);
+       do_parameter("security", "USER", NULL);
+       do_parameter("paranoid server security", "True", NULL);
+       do_parameter("EncryptPasswords", "True", NULL);
+       do_parameter("ReadRaw", "True", NULL);
+       do_parameter("WriteRaw", "True", NULL);
+       do_parameter("NullPasswords", "False", NULL);
+       do_parameter("ObeyPamRestrictions", "False", NULL);
+       do_parameter("announce as", "NT SERVER", NULL);
+
+       do_parameter("TimeServer", "False", NULL);
+       do_parameter("BindInterfacesOnly", "False", NULL);
+       do_parameter("Unicode", "True", NULL);
+       do_parameter("ClientLanManAuth", "True", NULL);
+       do_parameter("LanmanAuth", "True", NULL);
+       do_parameter("NTLMAuth", "True", NULL);
+       do_parameter("client use spnego principal", "False", NULL);
        
-       do_parameter("enhanced browsing", "True"); 
-       do_parameter("LockSpinCount", "3");
-       do_parameter("LockSpinTime", "10");
-#ifdef MMAP_BLACKLIST
-       do_parameter("UseMmap", "False");
-#else
-       do_parameter("UseMmap", "True");
-#endif
-       do_parameter("UnixExtensions", "False");
-
-       /* hostname lookups can be very expensive and are broken on
-          a large number of sites (tridge) */
-       do_parameter("HostnameLookups", "False");
+       do_parameter("UnixExtensions", "False", NULL);
 
-       do_parameter("PreferredMaster", "Auto");
-       do_parameter("os level", "20");
-       do_parameter("LocalMaster", "True");
-       do_parameter("DomainMaster", "Auto");   /* depending on bDomainLogons */
-       do_parameter("DomainLogons", "False");
-       do_parameter("WINSsupport", "False");
-       do_parameter("WINSproxy", "False");
+       do_parameter("PreferredMaster", "Auto", NULL);
+       do_parameter("LocalMaster", "True", NULL);
 
-       do_parameter("DNSproxy", "True");
+       do_parameter("WINSsupport", "False", NULL);
 
-       do_parameter("AllowTrustedDomains", "True");
+       do_parameter("winbind separator", "\\", NULL);
+       do_parameter("winbind sealed pipes", "True", NULL);
 
-       do_parameter("TemplateShell", "/bin/false");
-       do_parameter("TemplateHomedir", "/home/%D/%U");
-       do_parameter("WinbindSeparator", "\\");
+       do_parameter("client signing", "Yes", NULL);
+       do_parameter("server signing", "auto", NULL);
 
-       do_parameter("winbind cache time", "15");
-       do_parameter("WinbindEnumUsers", "True");
-       do_parameter("WinbindEnumGroups", "True");
-       do_parameter("WinbindUseDefaultDomain", "False");
+       do_parameter("use spnego", "True", NULL);
 
-       do_parameter("IDMapBackend", "tdb");
+       do_parameter("smb ports", SMB_PORTS, NULL);
+       do_parameter("nbt port", "137", NULL);
+       do_parameter("dgram port", "138", NULL);
+       do_parameter("cldap port", "389", NULL);
+       do_parameter("krb5 port", "88", NULL);
+       do_parameter("kpasswd port", "464", NULL);
+       do_parameter("web port", "901", NULL);
+       do_parameter("swat directory", dyn_SWATDIR, NULL);
 
-       do_parameter("name cache timeout", "660"); /* In seconds */
+       do_parameter("nt status support", "True", NULL);
 
-       do_parameter("client signing", "Yes");
-       do_parameter("server signing", "auto");
+       do_parameter("max wins ttl", "518400", NULL); /* 6 days */
+       do_parameter("min wins ttl", "10", NULL);
 
-       do_parameter("use spnego", "True");
-
-       do_parameter("smb ports", SMB_PORTS);
-       do_parameter("nbt port", "137");
-       do_parameter("dgram port", "138");
-       do_parameter("cldap port", "389");
-       do_parameter("krb5 port", "88");
-       do_parameter("web port", "901");
-       do_parameter("swat directory", dyn_SWATDIR);
-
-       do_parameter("nt status support", "True");
-
-       do_parameter("max wins ttl", "432000");
-       do_parameter("min wins ttl", "10");
-
-       do_parameter("tls enabled", "True");
-       do_parameter("tls keyfile", "tls/key.pem");
-       do_parameter("tls certfile", "tls/cert.pem");
-       do_parameter("tls cafile", "tls/ca.pem");
+       do_parameter("tls enabled", "True", NULL);
+       do_parameter("tls keyfile", "tls/key.pem", NULL);
+       do_parameter("tls certfile", "tls/cert.pem", NULL);
+       do_parameter("tls cafile", "tls/ca.pem", NULL);
        do_parameter_var("js include", "%s/js", dyn_LIBDIR);
        do_parameter_var("setup directory", "%s/setup", dyn_LIBDIR);
 }
@@ -1164,11 +799,13 @@ static const char *lp_string(const char *s)
 #define FN_LOCAL_INTEGER(fn_name,val) \
  int fn_name(int i) {return(LP_SNUM_OK(i)? ServicePtrs[(i)]->val : sDefault.val);}
 
+FN_GLOBAL_INTEGER(lp_server_role, &Globals.server_role)
 FN_GLOBAL_LIST(lp_smb_ports, &Globals.smb_ports)
 FN_GLOBAL_INTEGER(lp_nbt_port, &Globals.nbt_port)
 FN_GLOBAL_INTEGER(lp_dgram_port, &Globals.dgram_port)
 FN_GLOBAL_INTEGER(lp_cldap_port, &Globals.cldap_port)
 FN_GLOBAL_INTEGER(lp_krb5_port, &Globals.krb5_port)
+FN_GLOBAL_INTEGER(lp_kpasswd_port, &Globals.kpasswd_port)
 FN_GLOBAL_INTEGER(lp_web_port, &Globals.web_port)
 FN_GLOBAL_STRING(lp_dos_charset, &Globals.dos_charset)
 FN_GLOBAL_STRING(lp_swat_directory, &Globals.swat_directory)
@@ -1181,13 +818,14 @@ FN_GLOBAL_STRING(lp_unix_charset, &Globals.unix_charset)
 FN_GLOBAL_STRING(lp_display_charset, &Globals.display_charset)
 FN_GLOBAL_STRING(lp_logfile, &Globals.szLogFile)
 FN_GLOBAL_STRING(lp_configfile, &Globals.szConfigFile)
-FN_GLOBAL_STRING(lp_smb_passwd_file, &Globals.szSMBPasswdFile)
 FN_GLOBAL_STRING(lp_sam_url, &Globals.szSAM_URL)
 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_BOOL(lp_winbind_sealed_pipes, &Globals.bWinbindSealedPipes)
 FN_GLOBAL_STRING(lp_private_dir, &Globals.szPrivateDir)
 FN_GLOBAL_STRING(lp_serverstring, &Globals.szServerString)
-FN_GLOBAL_STRING(lp_printcapname, &Globals.szPrintcapname)
 FN_GLOBAL_STRING(lp_lockdir, &Globals.szLockDir)
 FN_GLOBAL_STRING(lp_setupdir, &Globals.szSetupDir)
 FN_GLOBAL_STRING(lp_ncalrpc_dir, &Globals.ncalrpc_dir)
@@ -1195,56 +833,24 @@ FN_GLOBAL_STRING(lp_piddir, &Globals.szPidDir)
 FN_GLOBAL_LIST(lp_dcerpc_endpoint_servers, &Globals.dcerpc_ep_servers)
 FN_GLOBAL_LIST(lp_server_services, &Globals.server_services)
 FN_GLOBAL_STRING(lp_ntptr_providor, &Globals.ntptr_providor)
-FN_GLOBAL_STRING(lp_rootdir, &Globals.szRootdir)
-FN_GLOBAL_STRING(lp_defaultservice, &Globals.szDefaultService)
-FN_GLOBAL_STRING(lp_hosts_equiv, &Globals.szHostsEquiv)
 FN_GLOBAL_STRING(lp_auto_services, &Globals.szAutoServices)
-FN_GLOBAL_STRING(lp_passwd_program, &Globals.szPasswdProgram)
 FN_GLOBAL_STRING(lp_passwd_chat, &Globals.szPasswdChat)
 FN_GLOBAL_LIST(lp_passwordserver, &Globals.szPasswordServers)
 FN_GLOBAL_LIST(lp_name_resolve_order, &Globals.szNameResolveOrder)
 FN_GLOBAL_STRING(lp_realm, &Globals.szRealm)
-FN_GLOBAL_STRING(lp_ads_server, &Globals.szADSserver)
 FN_GLOBAL_STRING(lp_socket_options, &Globals.socket_options)
 FN_GLOBAL_STRING(lp_workgroup, &Globals.szWorkgroup)
 FN_GLOBAL_STRING(lp_netbios_name, &Globals.szNetbiosName)
 FN_GLOBAL_STRING(lp_netbios_scope, &Globals.szNetbiosScope)
-FN_GLOBAL_CONST_STRING(lp_logon_script, &Globals.szLogonScript)
-FN_GLOBAL_CONST_STRING(lp_logon_path, &Globals.szLogonPath)
-FN_GLOBAL_CONST_STRING(lp_logon_drive, &Globals.szLogonDrive)
-FN_GLOBAL_CONST_STRING(lp_logon_home, &Globals.szLogonHome)
-FN_GLOBAL_STRING(lp_remote_announce, &Globals.szRemoteAnnounce)
-FN_GLOBAL_STRING(lp_remote_browse_sync, &Globals.szRemoteBrowseSync)
 FN_GLOBAL_LIST(lp_wins_server_list, &Globals.szWINSservers)
 FN_GLOBAL_LIST(lp_interfaces, &Globals.szInterfaces)
 FN_GLOBAL_STRING(lp_socket_address, &Globals.szSocketAddress)
 FN_GLOBAL_LIST(lp_netbios_aliases, &Globals.szNetbiosAliases)
-FN_GLOBAL_LIST(lp_preload_modules, &Globals.szPreloadModules)
 FN_GLOBAL_STRING(lp_panic_action, &Globals.szPanicAction)
-FN_GLOBAL_STRING(lp_adduser_script, &Globals.szAddUserScript)
-
-FN_GLOBAL_CONST_STRING(lp_guestaccount, &Globals.szGuestaccount)
-
-FN_GLOBAL_STRING(lp_addmachine_script, &Globals.szAddMachineScript)
-
-FN_GLOBAL_STRING(lp_wins_hook, &Globals.szWINSHook)
-FN_GLOBAL_STRING(lp_wins_partners, &Globals.szWINSPartners)
-FN_GLOBAL_STRING(lp_template_homedir, &Globals.szTemplateHomedir)
-FN_GLOBAL_STRING(lp_template_shell, &Globals.szTemplateShell)
-FN_GLOBAL_CONST_STRING(lp_winbind_separator, &Globals.szWinbindSeparator)
-FN_GLOBAL_BOOL(lp_winbind_enum_users, &Globals.bWinbindEnumUsers)
-FN_GLOBAL_BOOL(lp_winbind_enum_groups, &Globals.bWinbindEnumGroups)
-FN_GLOBAL_BOOL(lp_winbind_use_default_domain, &Globals.bWinbindUseDefaultDomain)
-FN_GLOBAL_STRING(lp_idmap_backend, &Globals.szIDMapBackend)
 
 FN_GLOBAL_BOOL(lp_disable_netbios, &Globals.bDisableNetbios)
-FN_GLOBAL_BOOL(lp_dns_proxy, &Globals.bDNSproxy)
 FN_GLOBAL_BOOL(lp_wins_support, &Globals.bWINSsupport)
-FN_GLOBAL_BOOL(lp_we_are_a_wins_server, &Globals.bWINSsupport)
-FN_GLOBAL_BOOL(lp_wins_proxy, &Globals.bWINSproxy)
 FN_GLOBAL_BOOL(lp_local_master, &Globals.bLocalMaster)
-FN_GLOBAL_BOOL(lp_domain_logons, &Globals.bDomainLogons)
-FN_GLOBAL_BOOL(lp_load_printers, &Globals.bLoadPrinters)
 FN_GLOBAL_BOOL(lp_readraw, &Globals.bReadRaw)
 FN_GLOBAL_BOOL(lp_large_readwrite, &Globals.bLargeReadwrite)
 FN_GLOBAL_BOOL(lp_writeraw, &Globals.bWriteRaw)
@@ -1253,97 +859,54 @@ FN_GLOBAL_BOOL(lp_obey_pam_restrictions, &Globals.bObeyPamRestrictions)
 FN_GLOBAL_BOOL(lp_encrypted_passwords, &Globals.bEncryptPasswords)
 static FN_GLOBAL_BOOL(lp_time_server, &Globals.bTimeServer)
 FN_GLOBAL_BOOL(lp_bind_interfaces_only, &Globals.bBindInterfacesOnly)
-FN_GLOBAL_BOOL(lp_pam_password_change, &Globals.bPamPasswordChange)
 FN_GLOBAL_BOOL(lp_unicode, &Globals.bUnicode)
 FN_GLOBAL_BOOL(lp_nt_status_support, &Globals.bNTStatusSupport)
-FN_GLOBAL_BOOL(lp_allow_trusted_domains, &Globals.bAllowTrustedDomains)
-FN_GLOBAL_INTEGER(lp_restrict_anonymous, &Globals.restrict_anonymous)
-FN_GLOBAL_BOOL(lp_plaintext_auth, &Globals.bPlaintextAuth)
 FN_GLOBAL_BOOL(lp_lanman_auth, &Globals.bLanmanAuth)
 FN_GLOBAL_BOOL(lp_ntlm_auth, &Globals.bNTLMAuth)
 FN_GLOBAL_BOOL(lp_client_plaintext_auth, &Globals.bClientPlaintextAuth)
 FN_GLOBAL_BOOL(lp_client_lanman_auth, &Globals.bClientLanManAuth)
 FN_GLOBAL_BOOL(lp_client_ntlmv2_auth, &Globals.bClientNTLMv2Auth)
+FN_GLOBAL_BOOL(lp_client_use_spnego_principal, &Globals.client_use_spnego_principal)
 FN_GLOBAL_BOOL(lp_host_msdfs, &Globals.bHostMSDfs)
-FN_GLOBAL_BOOL(lp_enhanced_browsing, &Globals.enhanced_browsing)
-FN_GLOBAL_BOOL(lp_use_mmap, &Globals.bUseMmap)
 FN_GLOBAL_BOOL(lp_unix_extensions, &Globals.bUnixExtensions)
 FN_GLOBAL_BOOL(lp_use_spnego, &Globals.bUseSpnego)
-FN_GLOBAL_BOOL(lp_hostname_lookups, &Globals.bHostnameLookups)
 FN_GLOBAL_BOOL(lp_rpc_big_endian, &Globals.bRpcBigEndian)
-FN_GLOBAL_INTEGER(lp_os_level, &Globals.os_level)
-FN_GLOBAL_INTEGER(lp_max_ttl, &Globals.max_ttl)
 FN_GLOBAL_INTEGER(lp_max_wins_ttl, &Globals.max_wins_ttl)
 FN_GLOBAL_INTEGER(lp_min_wins_ttl, &Globals.min_wins_ttl)
-FN_GLOBAL_INTEGER(lp_time_offset, &Globals.time_offset)
 FN_GLOBAL_INTEGER(lp_maxmux, &Globals.max_mux)
 FN_GLOBAL_INTEGER(lp_max_xmit, &Globals.max_xmit)
 FN_GLOBAL_INTEGER(lp_passwordlevel, &Globals.pwordlevel)
-FN_GLOBAL_INTEGER(lp_usernamelevel, &Globals.unamelevel)
 FN_GLOBAL_INTEGER(lp_maxprotocol, &Globals.maxprotocol)
 FN_GLOBAL_INTEGER(lp_minprotocol, &Globals.minprotocol)
 FN_GLOBAL_INTEGER(lp_security, &Globals.security)
 FN_GLOBAL_LIST(lp_auth_methods, &Globals.AuthMethods)
 FN_GLOBAL_BOOL(lp_paranoid_server_security, &Globals.paranoid_server_security)
-FN_GLOBAL_INTEGER(lp_lpqcachetime, &Globals.lpqcachetime)
-FN_GLOBAL_INTEGER(lp_disable_spoolss, &Globals.bDisableSpoolss)
 static FN_GLOBAL_INTEGER(lp_announce_as, &Globals.announce_as)
-FN_GLOBAL_INTEGER(lp_lm_announce, &Globals.lm_announce)
-FN_GLOBAL_INTEGER(lp_lm_interval, &Globals.lm_interval)
-FN_GLOBAL_INTEGER(lp_machine_password_timeout, &Globals.machine_password_timeout)
-FN_GLOBAL_INTEGER(lp_lock_spin_count, &Globals.iLockSpinCount)
-FN_GLOBAL_INTEGER(lp_lock_sleep_time, &Globals.iLockSpinTime)
 FN_GLOBAL_LIST(lp_js_include, &Globals.jsInclude)
 
 
 FN_LOCAL_STRING(lp_servicename, szService)
 FN_LOCAL_CONST_STRING(lp_const_servicename, szService)
 FN_LOCAL_STRING(lp_pathname, szPath)
-FN_LOCAL_STRING(lp_username, szUsername)
-FN_LOCAL_LIST(lp_invalid_users, szInvalidUsers)
-FN_LOCAL_LIST(lp_valid_users, szValidUsers)
-FN_LOCAL_LIST(lp_admin_users, szAdminUsers)
-FN_LOCAL_STRING(lp_printcommand, szPrintcommand)
-FN_LOCAL_STRING(lp_lpqcommand, szLpqcommand)
-FN_LOCAL_STRING(lp_lprmcommand, szLprmcommand)
-FN_LOCAL_STRING(lp_lppausecommand, szLppausecommand)
-FN_LOCAL_STRING(lp_lpresumecommand, szLpresumecommand)
-FN_LOCAL_STRING(lp_queuepausecommand, szQueuepausecommand)
-FN_LOCAL_STRING(lp_queueresumecommand, szQueueresumecommand)
 static FN_LOCAL_STRING(_lp_printername, szPrintername)
 FN_LOCAL_LIST(lp_hostsallow, szHostsallow)
 FN_LOCAL_LIST(lp_hostsdeny, szHostsdeny)
 FN_LOCAL_STRING(lp_comment, comment)
 FN_LOCAL_STRING(lp_fstype, fstype)
-FN_LOCAL_STRING(lp_msdfs_proxy, szMSDfsProxy)
 static FN_LOCAL_STRING(lp_volume, volume)
 FN_LOCAL_LIST(lp_ntvfs_handler, ntvfs_handler)
 FN_LOCAL_BOOL(lp_msdfs_root, bMSDfsRoot)
-FN_LOCAL_BOOL(lp_autoloaded, autoloaded)
 FN_LOCAL_BOOL(lp_browseable, bBrowseable)
 FN_LOCAL_BOOL(lp_readonly, bRead_only)
-FN_LOCAL_BOOL(lp_guest_ok, bGuest_ok)
-FN_LOCAL_BOOL(lp_guest_only, bGuest_only)
 FN_LOCAL_BOOL(lp_print_ok, bPrint_ok)
 FN_LOCAL_BOOL(lp_map_hidden, bMap_hidden)
 FN_LOCAL_BOOL(lp_map_archive, bMap_archive)
-FN_LOCAL_BOOL(lp_locking, bLocking)
 FN_LOCAL_BOOL(lp_strict_locking, bStrictLocking)
-FN_LOCAL_BOOL(lp_posix_locking, bPosixLocking)
 FN_LOCAL_BOOL(lp_strict_sync, bStrictSync)
 FN_LOCAL_BOOL(lp_ci_filesystem, bCIFileSystem)
-FN_LOCAL_BOOL(lp_share_modes, bShareModes)
-FN_LOCAL_BOOL(lp_oplocks, bOpLocks)
-FN_LOCAL_BOOL(lp_level2_oplocks, bLevel2OpLocks)
-FN_LOCAL_BOOL(lp_onlyuser, bOnlyUser)
 FN_LOCAL_BOOL(lp_map_system, bMap_system)
 FN_LOCAL_INTEGER(lp_max_connections, iMaxConnections)
-FN_LOCAL_INTEGER(lp_minprintspace, iMinPrintSpace)
-FN_LOCAL_INTEGER(lp_printing, iPrinting)
 FN_LOCAL_INTEGER(lp_csc_policy, iCSCPolicy)
-FN_GLOBAL_INTEGER(lp_winbind_cache_time, &Globals.winbind_cache_time)
-FN_GLOBAL_BOOL(lp_hide_local_users, &Globals.bHideLocalUsers)
-FN_GLOBAL_INTEGER(lp_name_cache_timeout, &Globals.name_cache_timeout)
 FN_GLOBAL_INTEGER(lp_server_signing, &Globals.server_signing)
 FN_GLOBAL_INTEGER(lp_client_signing, &Globals.client_signing)
 
@@ -1356,7 +919,7 @@ static int getservicebyname(const char *pszServiceName,
 static void copy_service(service * pserviceDest,
                         service * pserviceSource, BOOL *pcopymapDest);
 static BOOL service_ok(int iService);
-static BOOL do_section(const char *pszSectionName);
+static BOOL do_section(const char *pszSectionName, void *);
 static void init_copymap(service * pservice);
 
 /* This is a helper function for parametrical options support. */
@@ -1702,7 +1265,7 @@ int lp_add_service(const char *pszService, int iDefaultService)
  Add the IPC service.
 ***************************************************************************/
 
-static BOOL lp_add_hidden(const char *name, const char *fstype, BOOL guest_ok)
+static BOOL lp_add_hidden(const char *name, const char *fstype)
 {
        pstring comment;
        int i = add_a_service(&sDefault, name);
@@ -1714,14 +1277,11 @@ static BOOL lp_add_hidden(const char *name, const char *fstype, BOOL guest_ok)
                 "%s Service (%s)", fstype, Globals.szServerString);
 
        string_set(&ServicePtrs[i]->szPath, tmpdir());
-       string_set(&ServicePtrs[i]->szUsername, "");
        string_set(&ServicePtrs[i]->comment, comment);
        string_set(&ServicePtrs[i]->fstype, fstype);
        ServicePtrs[i]->iMaxConnections = -1;
        ServicePtrs[i]->bAvailable = True;
        ServicePtrs[i]->bRead_only = True;
-       ServicePtrs[i]->bGuest_only = False;
-       ServicePtrs[i]->bGuest_ok = guest_ok;
        ServicePtrs[i]->bPrint_ok = False;
        ServicePtrs[i]->bBrowseable = False;
 
@@ -1757,10 +1317,6 @@ BOOL lp_add_printer(const char *pszPrintername, int iDefaultService)
        ServicePtrs[i]->bBrowseable = sDefault.bBrowseable;
        /* Printers cannot be read_only. */
        ServicePtrs[i]->bRead_only = False;
-       /* No share modes on printer services. */
-       ServicePtrs[i]->bShareModes = False;
-       /* No oplocks on printer services. */
-       ServicePtrs[i]->bOpLocks = False;
        /* Printer services must be printable. */
        ServicePtrs[i]->bPrint_ok = True;
 
@@ -1941,7 +1497,9 @@ static void copy_service(service * pserviceDest, service * pserviceSource, BOOL
                        pdata = pdata->next;
                }
                if (not_added) {
-                       paramo = smb_xmalloc_p(struct param_opt);
+                       paramo = malloc_p(struct param_opt);
+                       if (!paramo)
+                               smb_panic("OOM");
                        paramo->key = strdup(data->key);
                        paramo->value = strdup(data->value);
                        DLIST_ADD(pserviceDest->param_opt, paramo);
@@ -2085,7 +1643,7 @@ static BOOL handle_include(const char *pszParmValue, char **ptr)
        string_set(ptr, fname);
 
        if (file_exist(fname))
-               return (pm_process(fname, do_section, do_parameter));
+               return (pm_process(fname, do_section, do_parameter, NULL));
 
        DEBUG(2, ("Can't find include file %s\n", fname));
 
@@ -2128,126 +1686,6 @@ static BOOL handle_copy(const char *pszParmValue, char **ptr)
        return (bRetval);
 }
 
-/***************************************************************************
- Handle winbind/non unix account uid and gid allocation parameters.  The format of these
- parameters is:
-
- [global]
-
-        winbind uid = 1000-1999
-        winbind gid = 700-899
-
- We only do simple parsing checks here.  The strings are parsed into useful
- structures in the winbind daemon code.
-
-***************************************************************************/
-
-/* Some lp_ routines to return winbind [ug]id information */
-
-static uid_t winbind_uid_low, winbind_uid_high;
-static gid_t winbind_gid_low, winbind_gid_high;
-static uint32_t non_unix_account_low, non_unix_account_high;
-
-BOOL lp_winbind_uid(uid_t *low, uid_t *high)
-{
-        if (winbind_uid_low == 0 || winbind_uid_high == 0)
-                return False;
-
-        if (low)
-                *low = winbind_uid_low;
-
-        if (high)
-                *high = winbind_uid_high;
-
-        return True;
-}
-
-BOOL lp_winbind_gid(gid_t *low, gid_t *high)
-{
-        if (winbind_gid_low == 0 || winbind_gid_high == 0)
-                return False;
-
-        if (low)
-                *low = winbind_gid_low;
-
-        if (high)
-                *high = winbind_gid_high;
-
-        return True;
-}
-
-BOOL lp_non_unix_account_range(uint32_t *low, uint32_t *high)
-{
-        if (non_unix_account_low == 0 || non_unix_account_high == 0)
-                return False;
-
-        if (low)
-                *low = non_unix_account_low;
-
-        if (high)
-                *high = non_unix_account_high;
-
-        return True;
-}
-
-/* Do some simple checks on "winbind [ug]id" parameter values */
-
-static BOOL handle_winbind_uid(const char *pszParmValue, char **ptr)
-{
-       uint32_t low, high;
-
-       if (sscanf(pszParmValue, "%u-%u", &low, &high) != 2 || high < low)
-               return False;
-
-       /* Parse OK */
-
-       string_set(ptr, pszParmValue);
-
-        winbind_uid_low = low;
-        winbind_uid_high = high;
-
-       return True;
-}
-
-static BOOL handle_winbind_gid(const char *pszParmValue, char **ptr)
-{
-       uint32_t low, high;
-
-       if (sscanf(pszParmValue, "%u-%u", &low, &high) != 2 || high < low)
-               return False;
-
-       /* Parse OK */
-
-       string_set(ptr, pszParmValue);
-
-        winbind_gid_low = low;
-        winbind_gid_high = high;
-
-       return True;
-}
-
-/***************************************************************************
- Do some simple checks on "non unix account range" parameter values.
-***************************************************************************/
-
-static BOOL handle_non_unix_account_range(const char *pszParmValue, char **ptr)
-{
-       uint32_t low, high;
-
-       if (sscanf(pszParmValue, "%u-%u", &low, &high) != 2 || high < low)
-               return False;
-
-       /* Parse OK */
-
-       string_set(ptr, pszParmValue);
-
-        non_unix_account_low = low;
-        non_unix_account_high = high;
-
-       return True;
-}
-
-
 /***************************************************************************
  Initialise a copymap.
 ***************************************************************************/
@@ -2318,7 +1756,9 @@ static BOOL lp_do_parameter_parametric(int snum, const char *pszParmName, const
                }
        }
 
-       paramo = smb_xmalloc_p(struct param_opt);
+       paramo = malloc_p(struct param_opt);
+       if (!paramo)
+               smb_panic("OOM");
        paramo->key = strdup(name);
        paramo->value = strdup(pszParmValue);
        paramo->flags = flags;
@@ -2451,7 +1891,7 @@ BOOL lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue
  Process a parameter.
 ***************************************************************************/
 
-static BOOL do_parameter(const char *pszParmName, const char *pszParmValue)
+static BOOL do_parameter(const char *pszParmName, const char *pszParmValue, void *userdata)
 {
        return (lp_do_parameter(bInGlobalSection ? -2 : iServiceIndex,
                                pszParmName, pszParmValue));
@@ -2471,7 +1911,7 @@ static BOOL do_parameter_var(const char *pszParmName, const char *fmt, ...)
        va_start(ap, fmt);      
        s = talloc_vasprintf(NULL, fmt, ap);
        va_end(ap);
-       ret = do_parameter(pszParmName, s);
+       ret = do_parameter(pszParmName, s, NULL);
        talloc_free(s);
        return ret;
 }
@@ -2637,7 +2077,7 @@ static BOOL equal_parameter(parm_type type, void *ptr1, void *ptr2)
  Returns True on success, False on failure. 
 ***************************************************************************/
 
-static BOOL do_section(const char *pszSectionName)
+static BOOL do_section(const char *pszSectionName, void *userdata)
 {
        BOOL bRetval;
        BOOL isglobal = ((strwicmp(pszSectionName, GLOBAL_NAME) == 0) ||
@@ -2859,24 +2299,6 @@ static void lp_add_auto_services(const char *str)
        return;
 }
 
-/***************************************************************************
- Auto-load one printer.
-***************************************************************************/
-
-void lp_add_one_printer(char *name, char *comment)
-{
-       int printers = lp_servicenumber(PRINTERS_NAME);
-       int i;
-
-       if (lp_servicenumber(name) < 0) {
-               lp_add_printer(name, printers);
-               if ((i = lp_servicenumber(name)) >= 0) {
-                       string_set(&ServicePtrs[i]->comment, comment);
-                       ServicePtrs[i]->autoloaded = True;
-               }
-       }
-}
-
 /***************************************************************************
  Announce ourselves as a print server.
 ***************************************************************************/
@@ -2925,63 +2347,6 @@ void lp_killservice(int iServiceIn)
        }
 }
 
-/*******************************************************************
- Set the server type we will announce as via nmbd.
-********************************************************************/
-
-static void set_server_role(void)
-{
-       server_role = ROLE_STANDALONE;
-
-       switch (lp_security()) {
-               case SEC_SHARE:
-                       if (lp_domain_logons())
-                               DEBUG(0, ("Server's Role (logon server) conflicts with share-level security\n"));
-                       break;
-               case SEC_SERVER:
-               case SEC_DOMAIN:
-               case SEC_ADS:
-                       if (lp_domain_logons()) {
-                               if (Globals.bDomainMaster) /* auto or yes */ 
-                                       server_role = ROLE_DOMAIN_PDC;
-                               else
-                                       server_role = ROLE_DOMAIN_BDC;
-                               break;
-                       }
-                       server_role = ROLE_DOMAIN_MEMBER;
-                       break;
-               case SEC_USER:
-                       if (lp_domain_logons()) {
-
-                               if (Globals.bDomainMaster) /* auto or yes */ 
-                                       server_role = ROLE_DOMAIN_PDC;
-                               else
-                                       server_role = ROLE_DOMAIN_BDC;
-                       }
-                       break;
-               default:
-                       DEBUG(0, ("Server's Role undefined due to unknown security mode\n"));
-                       break;
-       }
-
-       DEBUG(10, ("set_server_role: role = "));
-
-       switch(server_role) {
-       case ROLE_STANDALONE:
-               DEBUGADD(10, ("ROLE_STANDALONE\n"));
-               break;
-       case ROLE_DOMAIN_MEMBER:
-               DEBUGADD(10, ("ROLE_DOMAIN_MEMBER\n"));
-               break;
-       case ROLE_DOMAIN_BDC:
-               DEBUGADD(10, ("ROLE_DOMAIN_BDC\n"));
-               break;
-       case ROLE_DOMAIN_PDC:
-               DEBUGADD(10, ("ROLE_DOMAIN_PDC\n"));
-               break;
-       }
-}
-
 /***************************************************************************
  Load the services array from the services file. Return True on success, 
  False on failure.
@@ -3019,7 +2384,7 @@ BOOL lp_load(void)
 
        /* We get sections first, so have to start 'behind' to make up */
        iServiceIndex = -1;
-       bRetval = pm_process(n2, do_section, do_parameter);
+       bRetval = pm_process(n2, do_section, do_parameter, NULL);
 
        /* finish up the last section */
        DEBUG(4, ("pm_process() returned %s\n", BOOLSTR(bRetval)));
@@ -3029,17 +2394,14 @@ BOOL lp_load(void)
 
        lp_add_auto_services(lp_auto_services());
 
-       /* When 'restrict anonymous = 2' guest connections to ipc$
-          are denied */
-       lp_add_hidden("IPC$", "IPC", (lp_restrict_anonymous() < 2));
-       lp_add_hidden("ADMIN$", "DISK", False);
+       lp_add_hidden("IPC$", "IPC");
+       lp_add_hidden("ADMIN$", "DISK");
 
-       set_server_role();
        set_default_server_announce_type();
 
        bLoaded = True;
 
-       if (Globals.bWINSsupport) {
+       if (!Globals.szWINSservers && Globals.bWINSsupport) {
                lp_do_parameter(-1, "wins server", "127.0.0.1");
        }
 
@@ -3195,24 +2557,21 @@ static void set_default_server_announce_type(void)
 }
 
 /***********************************************************
- returns role of Samba server
+ If we are PDC then prefer us as DMB
 ************************************************************/
 
-int lp_server_role(void)
+BOOL lp_domain_master(void)
 {
-       return server_role;
+       return (lp_server_role() == ROLE_DOMAIN_PDC);
 }
 
 /***********************************************************
  If we are PDC then prefer us as DMB
 ************************************************************/
 
-BOOL lp_domain_master(void)
+BOOL lp_domain_logons(void)
 {
-       if (Globals.bDomainMaster == Auto)
-               return (lp_server_role() == ROLE_DOMAIN_PDC);
-
-       return Globals.bDomainMaster;
+       return (lp_server_role() == ROLE_DOMAIN_PDC) || (lp_server_role() == ROLE_DOMAIN_BDC);
 }
 
 /***********************************************************
@@ -3221,10 +2580,7 @@ BOOL lp_domain_master(void)
 
 BOOL lp_preferred_master(void)
 {
-       if (Globals.bPreferredMaster == Auto)
-               return (lp_local_master() && lp_domain_master());
-
-       return Globals.bPreferredMaster;
+       return (lp_local_master() && lp_domain_master());
 }
 
 /*******************************************************************
@@ -3243,7 +2599,7 @@ void lp_remove_service(int snum)
 void lp_copy_service(int snum, const char *new_name)
 {
        const char *oldname = lp_servicename(snum);
-       do_section(new_name);
+       do_section(new_name, NULL);
        if (snum >= 0) {
                snum = lp_servicenumber(new_name);
                if (snum >= 0)