Copyright (C) Simo Sorce 2001
Copyright (C) Alexander Bokovoy 2002
Copyright (C) Stefan (metze) Metzmacher 2002
- Copyright (C) Anthony Liguori 2003
+ Copyright (C) Jim McDonough (jmcd@us.ibm.com) 2003.
Copyright (C) James Myers 2003 <myersjj@samba.org>
This program is free software; you can redistribute it and/or modify
*/
#include "includes.h"
+#include "version.h"
+#include "dynconfig.h"
+#include "system/time.h"
+#include "system/iconv.h"
+#include "system/network.h"
+#include "system/printing.h"
+#include "librpc/gen_ndr/ndr_svcctl.h"
+#include "librpc/gen_ndr/ndr_samr.h"
+#include "librpc/gen_ndr/ndr_nbt.h"
+#include "dlinklist.h"
BOOL in_client = False; /* Not in the client by default */
static BOOL bLoaded = False;
#define VALID(i) ServicePtrs[i]->valid
static BOOL do_parameter(const char *, const char *);
+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 */
+
+
+/* the following are used by loadparm for option lists */
+typedef enum
+{
+ P_BOOL,P_BOOLREV,P_CHAR,P_INTEGER,P_OCTAL,P_LIST,
+ P_STRING,P_USTRING,P_ENUM,P_SEP
+} parm_type;
+
+typedef enum
+{
+ P_LOCAL,P_GLOBAL,P_SEPARATOR,P_NONE
+} parm_class;
+
+struct enum_list {
+ int value;
+ const char *name;
+};
+
+struct parm_struct
+{
+ const char *label;
+ parm_type type;
+ parm_class class;
+ void *ptr;
+ BOOL (*special)(const char *, char **);
+ const struct enum_list *enum_list;
+ uint_t flags;
+ union {
+ BOOL bvalue;
+ int ivalue;
+ char *svalue;
+ char cvalue;
+ const char **lvalue;
+ } def;
+};
+
+
struct param_opt {
struct param_opt *prev, *next;
char *key;
*/
typedef struct
{
- char *smb_ports;
+ char **smb_ports;
char *dos_charset;
char *unix_charset;
+ char *ncalrpc_dir;
char *display_charset;
char *szPrintcapname;
char *szLockDir;
char *szLogFile;
char *szConfigFile;
char *szSMBPasswdFile;
+ char *szSAM_URL;
+ char *szSPOOLSS_URL;
+ char *szWINS_URL;
char *szPrivateDir;
- char **szPassdbBackend;
char **szPreloadModules;
- char *szPasswordServer;
+ char **szPasswordServers;
char *szSocketOptions;
char *szRealm;
char *szADSserver;
char **szNetbiosAliases;
char *szNetbiosScope;
char *szDomainOtherSIDs;
- char *szNameResolveOrder;
+ char **szNameResolveOrder;
char *szPanicAction;
char *szAddUserScript;
char *szAddMachineScript;
char *szWINSHook;
char *szWINSPartners;
char **dcerpc_ep_servers;
+ char **server_services;
char *szWinbindUID;
char *szWinbindGID;
char *szNonUnixAccountRange;
- int AlgorithmicRidBase;
char *szTemplateHomedir;
char *szTemplateShell;
char *szWinbindSeparator;
BOOL bWinbindUseDefaultDomain;
char *szIDMapBackend;
char *szGuestaccount;
- int mangled_stack;
int max_mux;
+ int max_xmit;
int pwordlevel;
int unamelevel;
int maxprotocol;
int winbind_cache_time;
int iLockSpinCount;
int iLockSpinTime;
- char *szLdapMachineSuffix;
- char *szLdapUserSuffix;
-#ifdef WITH_LDAP_SAMCONFIG
- int ldap_port;
- char *szLdapServer;
-#endif
+ int nbt_port;
char *socket_options;
- int ldap_ssl;
- char *szLdapSuffix;
- char *szLdapFilter;
- char *szLdapAdminDn;
- BOOL ldap_trust_ids;
- int ldap_passwd_sync;
BOOL bDNSproxy;
BOOL bWINSsupport;
BOOL bWINSproxy;
BOOL bDomainMaster;
BOOL bDomainLogons;
BOOL bEncryptPasswords;
- BOOL bUpdateEncrypt;
BOOL bNullPasswords;
BOOL bObeyPamRestrictions;
BOOL bLoadPrinters;
BOOL bTimeServer;
BOOL bBindInterfacesOnly;
BOOL bPamPasswordChange;
- BOOL bUnixPasswdSync;
BOOL bNTSmbSupport;
BOOL bNTStatusSupport;
BOOL bAllowTrustedDomains;
BOOL bLanmanAuth;
BOOL bNTLMAuth;
BOOL bUseSpnego;
+ int server_signing;
+ int client_signing;
BOOL bClientLanManAuth;
BOOL bClientNTLMv2Auth;
BOOL bHostMSDfs;
char *volume;
char *fstype;
char *szMSDfsProxy;
- char *ntvfs_handler;
+ char **ntvfs_handler;
int iMinPrintSpace;
int iMaxPrintJobs;
int iMaxConnections;
BOOL *copymap;
BOOL bMSDfsRoot;
BOOL bShareModes;
+ BOOL bStrictSync;
+ BOOL bCIFileSystem;
struct param_opt *param_opt;
char dummy[3]; /* for alignment */
NULL, /* copymap */
False, /* bMSDfsRoot */
True, /* bShareModes */
+ False, /* bStrictSync */
+ False, /* bCIFileSystem */
NULL, /* Parametric options */
"" /* dummy */
static BOOL handle_winbind_gid(const char *pszParmValue, char **ptr);
static BOOL handle_non_unix_account_range(const char *pszParmValue, char **ptr);
-static BOOL handle_ldap_machine_suffix ( const char *pszParmValue, char **ptr );
-static BOOL handle_ldap_user_suffix ( const char *pszParmValue, char **ptr );
-static BOOL handle_ldap_suffix ( const char *pszParmValue, char **ptr );
-
static void set_server_role(void);
static void set_default_server_announce_type(void);
{-1, NULL}
};
-static const struct enum_list enum_ldap_ssl[] = {
-#ifdef WITH_LDAP_SAMCONFIG
- {LDAP_SSL_ON, "Yes"},
- {LDAP_SSL_ON, "yes"},
- {LDAP_SSL_ON, "on"},
- {LDAP_SSL_ON, "On"},
-#endif
- {LDAP_SSL_OFF, "no"},
- {LDAP_SSL_OFF, "No"},
- {LDAP_SSL_OFF, "off"},
- {LDAP_SSL_OFF, "Off"},
- {LDAP_SSL_START_TLS, "start tls"},
- {LDAP_SSL_START_TLS, "Start_tls"},
- {-1, NULL}
-};
-
-static const struct enum_list enum_ldap_passwd_sync[] = {
- {LDAP_PASSWD_SYNC_ON, "Yes"},
- {LDAP_PASSWD_SYNC_ON, "yes"},
- {LDAP_PASSWD_SYNC_ON, "on"},
- {LDAP_PASSWD_SYNC_ON, "On"},
- {LDAP_PASSWD_SYNC_OFF, "no"},
- {LDAP_PASSWD_SYNC_OFF, "No"},
- {LDAP_PASSWD_SYNC_OFF, "off"},
- {LDAP_PASSWD_SYNC_OFF, "Off"},
-#ifdef LDAP_EXOP_X_MODIFY_PASSWD
- {LDAP_PASSWD_SYNC_ONLY, "Only"},
- {LDAP_PASSWD_SYNC_ONLY, "only"},
-#endif /* LDAP_EXOP_X_MODIFY_PASSWD */
- {-1, NULL}
-};
-
/* Types of machine we can announce as. */
#define ANNOUNCE_AS_NT_SERVER 1
#define ANNOUNCE_AS_WIN95 2
{-1, NULL}
};
-static const struct enum_list enum_case[] = {
- {CASE_LOWER, "lower"},
- {CASE_UPPER, "upper"},
- {-1, NULL}
-};
-
static const struct enum_list enum_bool_auto[] = {
{False, "No"},
{False, "False"},
{-1, NULL}
};
-/*
- Do you want session setups at user level security with a invalid
- password to be rejected or allowed in as guest? WinNT rejects them
- but it can be a pain as it means "net view" needs to use a password
-
- You have 3 choices in the setting of map_to_guest:
-
- "Never" means session setups with an invalid password
- are rejected. This is the default.
-
- "Bad User" means session setups with an invalid password
- are rejected, unless the username does not exist, in which case it
- is treated as a guest login
-
- "Bad Password" means session setups with an invalid password
- are treated as a guest login
-
- Note that map_to_guest only has an effect in user or server
- level security.
-*/
-
-static const struct enum_list enum_map_to_guest[] = {
- {NEVER_MAP_TO_GUEST, "Never"},
- {MAP_TO_GUEST_ON_BAD_USER, "Bad User"},
- {MAP_TO_GUEST_ON_BAD_PASSWORD, "Bad Password"},
+/* SMB signing types. */
+static const struct enum_list enum_smb_signing_vals[] = {
+ {SMB_SIGNING_OFF, "No"},
+ {SMB_SIGNING_OFF, "False"},
+ {SMB_SIGNING_OFF, "0"},
+ {SMB_SIGNING_OFF, "Off"},
+ {SMB_SIGNING_OFF, "disabled"},
+ {SMB_SIGNING_SUPPORTED, "Yes"},
+ {SMB_SIGNING_SUPPORTED, "True"},
+ {SMB_SIGNING_SUPPORTED, "1"},
+ {SMB_SIGNING_SUPPORTED, "On"},
+ {SMB_SIGNING_SUPPORTED, "enabled"},
+ {SMB_SIGNING_REQUIRED, "required"},
+ {SMB_SIGNING_REQUIRED, "mandatory"},
+ {SMB_SIGNING_REQUIRED, "force"},
+ {SMB_SIGNING_REQUIRED, "forced"},
+ {SMB_SIGNING_REQUIRED, "enforced"},
+ {SMB_SIGNING_AUTO, "auto"},
{-1, NULL}
};
+
/* Note: We do not initialise the defaults union - it is not allowed in ANSI C
*
* Note: We have a flag called FLAG_DEVELOPER but is not used at this time, it
{"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},
{"display charset", P_STRING, P_GLOBAL, &Globals.display_charset, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
{"comment", P_STRING, P_LOCAL, &sDefault.comment, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER},
{"path", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER},
{"server string", P_STRING, P_GLOBAL, &Globals.szServerString, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER},
{"interfaces", P_LIST, P_GLOBAL, &Globals.szInterfaces, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
{"bind interfaces only", P_BOOL, P_GLOBAL, &Globals.bBindInterfacesOnly, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER},
- {"ntvfs handler", P_STRING, P_LOCAL, &sDefault.ntvfs_handler, NULL, NULL, FLAG_ADVANCED},
+ {"ntvfs handler", P_LIST, P_LOCAL, &sDefault.ntvfs_handler, NULL, NULL, FLAG_ADVANCED},
{"dcerpc endpoint servers", P_LIST, P_GLOBAL, &Globals.dcerpc_ep_servers, NULL, NULL, FLAG_ADVANCED},
+ {"server services", P_LIST, P_GLOBAL, &Globals.server_services, NULL, NULL, FLAG_ADVANCED},
{"Security Options", P_SEP, P_SEPARATOR},
{"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},
- {"update encrypted", P_BOOL, P_GLOBAL, &Globals.bUpdateEncrypt, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | 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_STRING, P_GLOBAL, &Globals.szPasswordServer, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | 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 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},
- {"passdb backend", P_LIST, P_GLOBAL, &Globals.szPassdbBackend, 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},
- {"algorithmic rid base", P_INTEGER, P_GLOBAL, &Globals.AlgorithmicRidBase, NULL, 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},
{"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},
- {"unix password sync", P_BOOL, P_GLOBAL, &Globals.bUnixPasswdSync, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
{"restrict anonymous", P_INTEGER, P_GLOBAL, &Globals.restrict_anonymous, 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},
{"Protocol Options", P_SEP, P_SEPARATOR},
- {"smb ports", P_STRING, P_GLOBAL, &Globals.smb_ports, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
+ {"smb ports", P_LIST, P_GLOBAL, &Globals.smb_ports, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
+ {"nbt port", P_INTEGER, P_GLOBAL, &Globals.nbt_port, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
{"large readwrite", P_BOOL, P_GLOBAL, &Globals.bLargeReadwrite, NULL, NULL, FLAG_DEVELOPER},
{"max protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, FLAG_DEVELOPER},
{"min protocol", P_ENUM, P_GLOBAL, &Globals.minprotocol, NULL, enum_protocol, FLAG_DEVELOPER},
{"announce version", P_STRING, P_GLOBAL, &Globals.szAnnounceVersion, NULL, NULL, FLAG_DEVELOPER},
{"announce as", P_ENUM, P_GLOBAL, &Globals.announce_as, NULL, enum_announce_as, FLAG_DEVELOPER},
{"max mux", P_INTEGER, P_GLOBAL, &Globals.max_mux, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
+ {"max xmit", P_INTEGER, P_GLOBAL, &Globals.max_xmit, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
- {"name resolve order", P_STRING, P_GLOBAL, &Globals.szNameResolveOrder, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | 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},
{"unix extensions", P_BOOL, P_GLOBAL, &Globals.bUnixExtensions, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
{"use spnego", P_BOOL, P_GLOBAL, &Globals.bUseSpnego, NULL, NULL, FLAG_DEVELOPER},
+ {"server signing", P_ENUM, P_GLOBAL, &Globals.server_signing, NULL, enum_smb_signing_vals, FLAG_ADVANCED},
+ {"client signing", P_ENUM, P_GLOBAL, &Globals.client_signing, NULL, enum_smb_signing_vals, FLAG_ADVANCED},
{"rpc big endian", P_BOOL, P_GLOBAL, &Globals.bRpcBigEndian, NULL, NULL, FLAG_DEVELOPER},
{"Tuning Options", P_SEP, P_SEPARATOR},
{"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},
{"Filename Handling", P_SEP, P_SEPARATOR},
- {"mangled stack", P_INTEGER, P_GLOBAL, &Globals.mangled_stack, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
{"map system", P_BOOL, P_LOCAL, &sDefault.bMap_system, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
{"map hidden", P_BOOL, P_LOCAL, &sDefault.bMap_hidden, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
{"map archive", P_BOOL, P_LOCAL, &sDefault.bMap_archive, 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},
- {"Ldap Options", P_SEP, P_SEPARATOR},
-
-#ifdef WITH_LDAP_SAMCONFIG
- {"ldap server", P_STRING, P_GLOBAL, &Globals.szLdapServer, NULL, NULL, 0},
- {"ldap port", P_INTEGER, P_GLOBAL, &Globals.ldap_port, NULL, NULL, 0},
-#endif
- {"ldap suffix", P_STRING, P_GLOBAL, &Globals.szLdapSuffix, handle_ldap_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
- {"ldap machine suffix", P_STRING, P_GLOBAL, &Globals.szLdapMachineSuffix, handle_ldap_machine_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
- {"ldap user suffix", P_STRING, P_GLOBAL, &Globals.szLdapUserSuffix, handle_ldap_user_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
- {"ldap filter", P_STRING, P_GLOBAL, &Globals.szLdapFilter, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
- {"ldap admin dn", P_STRING, P_GLOBAL, &Globals.szLdapAdminDn, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
- {"ldap ssl", P_ENUM, P_GLOBAL, &Globals.ldap_ssl, NULL, enum_ldap_ssl, FLAG_ADVANCED | FLAG_DEVELOPER},
- {"ldap passwd sync", P_ENUM, P_GLOBAL, &Globals.ldap_passwd_sync, NULL, enum_ldap_passwd_sync, FLAG_ADVANCED | FLAG_DEVELOPER},
- {"ldap trust ids", P_BOOL, P_GLOBAL, &Globals.ldap_trust_ids, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
-
{"Miscellaneous Options", P_SEP, P_SEPARATOR},
{"config file", P_STRING, P_GLOBAL, &Globals.szConfigFile, NULL, NULL, FLAG_HIDE},
case PRINT_AIX:
case PRINT_LPRNT:
case PRINT_LPROS2:
- string_set(&sDefault.szLpqcommand, "lpq -P'%p'");
- string_set(&sDefault.szLprmcommand, "lprm -P'%p' %j");
- string_set(&sDefault.szPrintcommand,
+ 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:
- string_set(&sDefault.szLpqcommand, "lpq -P'%p'");
- string_set(&sDefault.szLprmcommand, "lprm -P'%p' %j");
- string_set(&sDefault.szPrintcommand,
+ do_parameter("Lpqcommand", "lpq -P'%p'");
+ do_parameter("Lprmcommand", "lprm -P'%p' %j");
+ do_parameter("Printcommand",
"lpr -r -P'%p' %s");
- string_set(&sDefault.szQueuepausecommand,
+ do_parameter("Queuepausecommand",
"lpc stop '%p'");
- string_set(&sDefault.szQueueresumecommand,
+ do_parameter("Queueresumecommand",
"lpc start '%p'");
- string_set(&sDefault.szLppausecommand,
+ do_parameter("Lppausecommand",
"lpc hold '%p' %j");
- string_set(&sDefault.szLpresumecommand,
+ do_parameter("Lpresumecommand",
"lpc release '%p' %j");
break;
case PRINT_CUPS:
#ifdef HAVE_CUPS
- string_set(&sDefault.szLpqcommand, "");
- string_set(&sDefault.szLprmcommand, "");
- string_set(&sDefault.szPrintcommand, "");
- string_set(&sDefault.szLppausecommand, "");
- string_set(&sDefault.szLpresumecommand, "");
- string_set(&sDefault.szQueuepausecommand, "");
- string_set(&sDefault.szQueueresumecommand, "");
-
- string_set(&Globals.szPrintcapname, "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
- string_set(&sDefault.szLpqcommand,
+ do_parameter("Lpqcommand",
"/usr/bin/lpstat -o '%p'");
- string_set(&sDefault.szLprmcommand,
+ do_parameter("Lprmcommand",
"/usr/bin/cancel '%p-%j'");
- string_set(&sDefault.szPrintcommand,
+ do_parameter("Printcommand",
"/usr/bin/lp -d '%p' %s; rm %s");
- string_set(&sDefault.szLppausecommand,
+ do_parameter("Lppausecommand",
"lp -i '%p-%j' -H hold");
- string_set(&sDefault.szLpresumecommand,
+ do_parameter("Lpresumecommand",
"lp -i '%p-%j' -H resume");
- string_set(&sDefault.szQueuepausecommand,
+ do_parameter("Queuepausecommand",
"/usr/bin/disable '%p'");
- string_set(&sDefault.szQueueresumecommand,
+ do_parameter("Queueresumecommand",
"/usr/bin/enable '%p'");
- string_set(&Globals.szPrintcapname, "lpstat");
+ do_parameter("Printcapname", "lpstat");
#endif /* HAVE_CUPS */
break;
case PRINT_SYSV:
case PRINT_HPUX:
- string_set(&sDefault.szLpqcommand, "lpstat -o%p");
- string_set(&sDefault.szLprmcommand, "cancel %p-%j");
- string_set(&sDefault.szPrintcommand,
+ do_parameter("Lpqcommand", "lpstat -o%p");
+ do_parameter("Lprmcommand", "cancel %p-%j");
+ do_parameter("Printcommand",
"lp -c -d%p %s; rm %s");
- string_set(&sDefault.szQueuepausecommand,
+ do_parameter("Queuepausecommand",
"disable %p");
- string_set(&sDefault.szQueueresumecommand,
+ do_parameter("Queueresumecommand",
"enable %p");
#ifndef HPUX
- string_set(&sDefault.szLppausecommand,
+ do_parameter("Lppausecommand",
"lp -i %p-%j -H hold");
- string_set(&sDefault.szLpresumecommand,
+ do_parameter("Lpresumecommand",
"lp -i %p-%j -H resume");
#endif /* HPUX */
break;
case PRINT_QNX:
- string_set(&sDefault.szLpqcommand, "lpq -P%p");
- string_set(&sDefault.szLprmcommand, "lprm -P%p %j");
- string_set(&sDefault.szPrintcommand, "lp -r -P%p %s");
+ 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:
- string_set(&sDefault.szLpqcommand, "qstat -l -d%p");
- string_set(&sDefault.szLprmcommand,
+ do_parameter("Lpqcommand", "qstat -l -d%p");
+ do_parameter("Lprmcommand",
"qstat -s -j%j -c");
- string_set(&sDefault.szPrintcommand,
+ do_parameter("Printcommand",
"lp -d%p -s %s; rm %s");
- string_set(&sDefault.szLppausecommand,
+ do_parameter("Lppausecommand",
"qstat -s -j%j -h");
- string_set(&sDefault.szLpresumecommand,
+ do_parameter("Lpresumecommand",
"qstat -s -j%j -r");
break;
#ifdef DEVELOPER
case PRINT_TEST:
case PRINT_VLP:
- string_set(&sDefault.szPrintcommand, "vlp print %p %s");
- string_set(&sDefault.szLpqcommand, "vlp lpq %p");
- string_set(&sDefault.szLprmcommand, "vlp lprm %p %j");
- string_set(&sDefault.szLppausecommand, "vlp lppause %p %j");
- string_set(&sDefault.szLpresumecommand, "vlp lpresum %p %j");
- string_set(&sDefault.szQueuepausecommand, "vlp queuepause %p");
- string_set(&sDefault.szQueueresumecommand, "vlp queueresume %p");
+ 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 */
***************************************************************************/
static void init_globals(void)
{
- pstring s;
int i;
+ char *myname;
DEBUG(3, ("Initialising global parameters\n"));
/* options that can be set on the command line must be initialised via
the slower do_parameter() to ensure that FLAG_CMDLINE is obeyed */
- do_parameter("socket options", DEFAULT_SOCKET_OPTIONS);
+#ifdef TCP_NODELAY
+ do_parameter("socket options", "TCP_NODELAY");
+#endif
do_parameter("workgroup", DEFAULT_WORKGROUP);
- do_parameter("netbios name", get_myname());
+ myname = get_myname();
+ do_parameter("netbios name", myname);
+ SAFE_FREE(myname);
do_parameter("max protocol", "NT1");
do_parameter("name resolve order", "lmhosts wins host bcast");
init_printer_values();
- string_set(&sDefault.fstype, FSTYPE_STRING);
- string_set(&sDefault.ntvfs_handler, "default");
-
- Globals.dcerpc_ep_servers = str_list_make("epmapper rpcecho", NULL);
-
- string_set(&Globals.szSMBPasswdFile, dyn_SMB_PASSWD_FILE);
- string_set(&Globals.szPrivateDir, dyn_PRIVATE_DIR);
-
- /* use the new 'hash2' method by default, with a prefix of 1 */
-
- string_set(&Globals.szGuestaccount, GUEST_ACCOUNT);
+ 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");
+ do_parameter("server services", "smb rpc nbt");
+ 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_var("sam database", "tdb://%s/sam.ldb", dyn_PRIVATE_DIR);
+ do_parameter_var("spoolss database", "tdb://%s/spoolss.ldb", dyn_PRIVATE_DIR);
+ do_parameter_var("wins database", "tdb://%s/wins.ldb", dyn_PRIVATE_DIR);
+ do_parameter_var("registry:HKEY_LOCAL_MACHINE", "ldb:/%s/hklm.ldb", dyn_PRIVATE_DIR);
+ do_parameter("guest account", GUEST_ACCOUNT);
/* using UTF8 by default allows us to support all chars */
- string_set(&Globals.unix_charset, "UTF8");
+ do_parameter("unix charset", "UTF8");
/* Use codepage 850 as a default for the dos character set */
- string_set(&Globals.dos_charset, "CP850");
+ do_parameter("dos charset", "CP850");
/*
* Allow the default PASSWD_CHAT to be overridden in local.h.
*/
- string_set(&Globals.szPasswdChat, DEFAULT_PASSWD_CHAT);
+ do_parameter("passwd chat", DEFAULT_PASSWD_CHAT);
+
+ do_parameter("passwd program", "");
+ do_parameter("printcap name", PRINTCAP_NAME);
- string_set(&Globals.szPasswdProgram, "");
- string_set(&Globals.szPrintcapname, PRINTCAP_NAME);
- string_set(&Globals.szPidDir, dyn_PIDDIR);
- string_set(&Globals.szLockDir, dyn_LOCKDIR);
- string_set(&Globals.szSocketAddress, "0.0.0.0");
- pstrcpy(s, "Samba ");
- pstrcat(s, SAMBA_VERSION_STRING);
- string_set(&Globals.szServerString, s);
- slprintf(s, sizeof(s) - 1, "%d.%d", DEFAULT_MAJOR_VERSION,
- DEFAULT_MINOR_VERSION);
- string_set(&Globals.szAnnounceVersion, s);
-
- string_set(&Globals.szLogonDrive, "");
- /* %N is the NIS auto.home server if -DAUTOHOME is used, else same as %L */
- string_set(&Globals.szLogonHome, "\\\\%N\\%U");
- string_set(&Globals.szLogonPath, "\\\\%N\\%U\\profile");
-
- string_set(&Globals.szPasswordServer, "*");
-
- Globals.AlgorithmicRidBase = BASE_RID;
-
- Globals.bLoadPrinters = True;
- Globals.mangled_stack = 50;
- Globals.max_mux = 50; /* This is *needed* for profile support. */
- Globals.lpqcachetime = 10;
- Globals.bDisableSpoolss = False;
- Globals.pwordlevel = 0;
- Globals.unamelevel = 0;
- Globals.bLargeReadwrite = True;
- Globals.minprotocol = PROTOCOL_CORE;
- Globals.security = SEC_USER;
- Globals.paranoid_server_security = True;
- Globals.bEncryptPasswords = True;
- Globals.bUpdateEncrypt = False;
- Globals.bReadRaw = True;
- Globals.bWriteRaw = True;
- Globals.bNullPasswords = False;
- Globals.bObeyPamRestrictions = False;
- Globals.max_ttl = 60 * 60 * 24 * 3; /* 3 days default. */
- Globals.max_wins_ttl = 60 * 60 * 24 * 6; /* 6 days default. */
- Globals.min_wins_ttl = 60 * 60 * 6; /* 6 hours default. */
- Globals.machine_password_timeout = 60 * 60 * 24 * 7; /* 7 days default. */
- Globals.lm_announce = 2; /* = Auto: send only if LM clients found */
- Globals.lm_interval = 60;
- Globals.announce_as = ANNOUNCE_AS_NT_SERVER;
-
- Globals.bTimeServer = False;
- Globals.bBindInterfacesOnly = False;
- Globals.bUnixPasswdSync = False;
- Globals.bPamPasswordChange = False;
- Globals.bUnicode = True; /* Do unicode on the wire by default */
- Globals.bNTStatusSupport = True; /* Use NT status by default. */
- Globals.restrict_anonymous = 0;
- Globals.bClientLanManAuth = True; /* Do use the LanMan hash if it is available */
- Globals.bLanmanAuth = True; /* Do use the LanMan hash if it is available */
- Globals.bNTLMAuth = True; /* Do use NTLMv1 if it is available (otherwise NTLMv2) */
+ do_parameter("pid directory", dyn_PIDDIR);
+ do_parameter("lock dir", dyn_LOCKDIR);
+ do_parameter("ncalrpc dir", dyn_NCALRPCDIR);
+
+ do_parameter("socket address", "0.0.0.0");
+ 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");
- Globals.enhanced_browsing = True;
- Globals.iLockSpinCount = 3; /* Try 2 times. */
- Globals.iLockSpinTime = 10; /* usec. */
+ do_parameter("enhanced browsing", "True");
+ do_parameter("LockSpinCount", "3");
+ do_parameter("LockSpinTime", "10");
#ifdef MMAP_BLACKLIST
- Globals.bUseMmap = False;
+ do_parameter("UseMmap", "False");
#else
- Globals.bUseMmap = True;
+ do_parameter("UseMmap", "True");
#endif
- Globals.bUnixExtensions = False;
+ do_parameter("UnixExtensions", "False");
/* hostname lookups can be very expensive and are broken on
a large number of sites (tridge) */
- Globals.bHostnameLookups = False;
+ do_parameter("HostnameLookups", "False");
-#ifdef WITH_LDAP_SAMCONFIG
- string_set(&Globals.szLdapServer, "localhost");
- Globals.ldap_port = 636;
- Globals.szPassdbBackend = str_list_make("ldapsam guest", NULL);
-#else
- Globals.szPassdbBackend = str_list_make("smbpasswd guest", NULL);
-#endif /* WITH_LDAP_SAMCONFIG */
-
- string_set(&Globals.szLdapSuffix, "");
- string_set(&Globals.szLdapMachineSuffix, "");
- string_set(&Globals.szLdapUserSuffix, "");
+ 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");
- string_set(&Globals.szLdapFilter, "(&(uid=%u)(objectclass=sambaAccount))");
- string_set(&Globals.szLdapAdminDn, "");
- Globals.ldap_ssl = LDAP_SSL_ON;
- Globals.ldap_passwd_sync = LDAP_PASSWD_SYNC_OFF;
+ do_parameter("DNSproxy", "True");
-/* these parameters are set to defaults that are more appropriate
- for the increasing samba install base:
+ do_parameter("AllowTrustedDomains", "True");
- as a member of the workgroup, that will possibly become a
- _local_ master browser (lm = True). this is opposed to a forced
- local master browser startup (pm = True).
+ do_parameter("TemplateShell", "/bin/false");
+ do_parameter("TemplateHomedir", "/home/%D/%U");
+ do_parameter("WinbindSeparator", "\\");
- doesn't provide WINS server service by default (wsupp = False),
- and doesn't provide domain master browser services by default, either.
-
-*/
+ do_parameter("winbind cache time", "15");
+ do_parameter("WinbindEnumUsers", "True");
+ do_parameter("WinbindEnumGroups", "True");
+ do_parameter("WinbindUseDefaultDomain", "False");
- Globals.bPreferredMaster = Auto; /* depending on bDomainMaster */
- Globals.os_level = 20;
- Globals.bLocalMaster = True;
- Globals.bDomainMaster = Auto; /* depending on bDomainLogons */
- Globals.bDomainLogons = False;
- Globals.bWINSsupport = False;
- Globals.bWINSproxy = False;
+ do_parameter("IDMapBackend", "tdb");
- Globals.bDNSproxy = True;
+ do_parameter("name cache timeout", "660"); /* In seconds */
- Globals.bAllowTrustedDomains = True;
+ do_parameter("client signing", "Yes");
+ do_parameter("server signing", "auto");
- string_set(&Globals.szTemplateShell, "/bin/false");
- string_set(&Globals.szTemplateHomedir, "/home/%D/%U");
- string_set(&Globals.szWinbindSeparator, "\\");
+ do_parameter("use spnego", "True");
- Globals.winbind_cache_time = 15;
- Globals.bWinbindEnumUsers = True;
- Globals.bWinbindEnumGroups = True;
- Globals.bWinbindUseDefaultDomain = False;
+ do_parameter("smb ports", SMB_PORTS);
+ do_parameter("nbt port", "137");
- string_set(&Globals.szIDMapBackend, "tdb");
+ do_parameter("nt status support", "True");
- Globals.name_cache_timeout = 660; /* In seconds */
-
- Globals.bUseSpnego = True;
-
- string_set(&Globals.smb_ports, SMB_PORTS);
+ do_parameter("max wins ttl", "432000");
+ do_parameter("min wins ttl", "10");
}
static TALLOC_CTX *lp_talloc;
{
if (!lp_talloc)
return;
- talloc_destroy(lp_talloc);
+ talloc_free(lp_talloc);
lp_talloc = NULL;
}
callers without affecting the source string.
********************************************************************/
-static char *lp_string(const char *s)
+static const char *lp_string(const char *s)
{
#if 0 /* until REWRITE done to make thread-safe */
size_t len = s ? strlen(s) : 0;
if (!lp_talloc)
lp_talloc = talloc_init("lp_talloc");
- ret = (char *)talloc(lp_talloc, len + 100); /* leave room for substitution */
+ ret = talloc_array(lp_talloc, char, len + 100); /* leave room for substitution */
if (!ret)
return NULL;
*/
#define FN_GLOBAL_STRING(fn_name,ptr) \
- char *fn_name(void) {return(lp_string(*(char **)(ptr) ? *(char **)(ptr) : ""));}
+ const char *fn_name(void) {return(lp_string(*(char **)(ptr) ? *(char **)(ptr) : ""));}
#define FN_GLOBAL_CONST_STRING(fn_name,ptr) \
const char *fn_name(void) {return(*(const char **)(ptr) ? *(const char **)(ptr) : "");}
#define FN_GLOBAL_LIST(fn_name,ptr) \
int fn_name(void) {return(*(int *)(ptr));}
#define FN_LOCAL_STRING(fn_name,val) \
- char *fn_name(int i) {return(lp_string((LP_SNUM_OK(i) && ServicePtrs[(i)]->val) ? ServicePtrs[(i)]->val : sDefault.val));}
+ const char *fn_name(int i) {return(lp_string((LP_SNUM_OK(i) && ServicePtrs[(i)]->val) ? ServicePtrs[(i)]->val : sDefault.val));}
#define FN_LOCAL_CONST_STRING(fn_name,val) \
const char *fn_name(int i) {return (const char *)((LP_SNUM_OK(i) && ServicePtrs[(i)]->val) ? ServicePtrs[(i)]->val : sDefault.val);}
#define FN_LOCAL_LIST(fn_name,val) \
#define FN_LOCAL_INTEGER(fn_name,val) \
int fn_name(int i) {return(LP_SNUM_OK(i)? ServicePtrs[(i)]->val : sDefault.val);}
-FN_GLOBAL_STRING(lp_smb_ports, &Globals.smb_ports)
+FN_GLOBAL_LIST(lp_smb_ports, &Globals.smb_ports)
+FN_GLOBAL_INTEGER(lp_nbt_port, &Globals.nbt_port)
FN_GLOBAL_STRING(lp_dos_charset, &Globals.dos_charset)
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_url, &Globals.szWINS_URL)
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_ncalrpc_dir, &Globals.ncalrpc_dir)
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_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_STRING(lp_passwordserver, &Globals.szPasswordServer)
-FN_GLOBAL_STRING(lp_name_resolve_order, &Globals.szNameResolveOrder)
+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_LIST(lp_wins_server_list, &Globals.szWINSservers)
FN_GLOBAL_LIST(lp_interfaces, &Globals.szInterfaces)
FN_GLOBAL_STRING(lp_socket_address, &Globals.szSocketAddress)
-static FN_GLOBAL_STRING(lp_announce_version, &Globals.szAnnounceVersion)
FN_GLOBAL_LIST(lp_netbios_aliases, &Globals.szNetbiosAliases)
-FN_GLOBAL_LIST(lp_passdb_backend, &Globals.szPassdbBackend)
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_BOOL(lp_winbind_use_default_domain, &Globals.bWinbindUseDefaultDomain)
FN_GLOBAL_STRING(lp_idmap_backend, &Globals.szIDMapBackend)
-#ifdef WITH_LDAP_SAMCONFIG
-FN_GLOBAL_STRING(lp_ldap_server, &Globals.szLdapServer)
-FN_GLOBAL_INTEGER(lp_ldap_port, &Globals.ldap_port)
-#endif
-FN_GLOBAL_STRING(lp_ldap_suffix, &Globals.szLdapSuffix)
-FN_GLOBAL_STRING(lp_ldap_machine_suffix, &Globals.szLdapMachineSuffix)
-FN_GLOBAL_STRING(lp_ldap_user_suffix, &Globals.szLdapUserSuffix)
-FN_GLOBAL_STRING(lp_ldap_filter, &Globals.szLdapFilter)
-FN_GLOBAL_STRING(lp_ldap_admin_dn, &Globals.szLdapAdminDn)
-FN_GLOBAL_INTEGER(lp_ldap_ssl, &Globals.ldap_ssl)
-FN_GLOBAL_INTEGER(lp_ldap_passwd_sync, &Globals.ldap_passwd_sync)
-FN_GLOBAL_BOOL(lp_ldap_trust_ids, &Globals.ldap_trust_ids)
-
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_null_passwords, &Globals.bNullPasswords)
FN_GLOBAL_BOOL(lp_obey_pam_restrictions, &Globals.bObeyPamRestrictions)
FN_GLOBAL_BOOL(lp_encrypted_passwords, &Globals.bEncryptPasswords)
-FN_GLOBAL_BOOL(lp_update_encrypted, &Globals.bUpdateEncrypt)
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_unix_password_sync, &Globals.bUnixPasswdSync)
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_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_LOCAL_STRING(lp_fstype, fstype)
FN_LOCAL_STRING(lp_msdfs_proxy, szMSDfsProxy)
static FN_LOCAL_STRING(lp_volume, volume)
-FN_LOCAL_STRING(lp_ntvfs_handler, ntvfs_handler)
+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_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_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_algorithmic_rid_base, &Globals.AlgorithmicRidBase)
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)
/* local prototypes */
return ret;
}
-/*******************************************************************
-convenience routine to return enum parameters.
-********************************************************************/
-static int lp_enum(const char *s,const struct enum_list *_enum)
-{
- int i;
-
- if (!s || !_enum) {
- DEBUG(0,("lp_enum(%s,enum): is called with NULL!\n",s));
- return False;
- }
-
- for (i=0; _enum[i].name; i++) {
- if (strcasecmp(_enum[i].name,s)==0)
- return _enum[i].value;
- }
-
- DEBUG(0,("lp_enum(%s,enum): value is not in enum_list!\n",s));
- return (-1);
-}
/* Return parametric option from a given service. Type is a part of option before ':' */
/* Parametric option has following syntax: 'Type: option = value' */
/* Returned value is allocated in 'lp_talloc' context */
-char *lp_parm_string(int lookup_service, const char *type, const char *option)
+const char *lp_parm_string(int lookup_service, const char *type, const char *option)
{
const char *value = get_parametrics(lookup_service, type, option);
-
+
if (value)
return lp_string(value);
/* Parametric option has following syntax: 'Type: option = value' */
/* Returned value is allocated in 'lp_talloc' context */
-char **lp_parm_string_list(int lookup_service, const char *type, const char *option,
- const char *separator)
+const char **lp_parm_string_list(int lookup_service, const char *type, const char *option,
+ const char *separator)
{
const char *value = get_parametrics(lookup_service, type, option);
if (value)
- return str_list_make(value, separator);
+ return str_list_make(talloc_autofree_context(), value, separator);
return NULL;
}
/* Return parametric option from a given service. Type is a part of option before ':' */
/* Parametric option has following syntax: 'Type: option = value' */
-int lp_parm_int(int lookup_service, const char *type, const char *option)
+int lp_parm_int(int lookup_service, const char *type, const char *option, int default_v)
{
const char *value = get_parametrics(lookup_service, type, option);
if (value)
return lp_int(value);
- return (-1);
+ return default_v;
}
/* Return parametric option from a given service. Type is a part of option before ':' */
/* Parametric option has following syntax: 'Type: option = value' */
-unsigned long lp_parm_ulong(int lookup_service, const char *type, const char *option)
+unsigned long lp_parm_ulong(int lookup_service, const char *type, const char *option, unsigned long default_v)
{
const char *value = get_parametrics(lookup_service, type, option);
if (value)
return lp_ulong(value);
- return (0);
+ return default_v;
}
/* Return parametric option from a given service. Type is a part of option before ':' */
return default_v;
}
-/* Return parametric option from a given service. Type is a part of option before ':' */
-/* Parametric option has following syntax: 'Type: option = value' */
-
-int lp_parm_enum(int lookup_service, const char *type, const char *option,
- const struct enum_list *_enum)
-{
- const char *value = get_parametrics(lookup_service, type, option);
-
- if (value)
- return lp_enum(value, _enum);
-
- return (-1);
-}
-
/***************************************************************************
Initialise a service to the defaults.
for (i = 0; parm_table[i].label; i++) {
if ((parm_table[i].type == P_STRING ||
parm_table[i].type == P_USTRING) &&
- parm_table[i].class == P_LOCAL)
+ parm_table[i].class == P_LOCAL) {
string_free((char **)
(((char *)pservice) +
PTR_DIFF(parm_table[i].ptr, &sDefault)));
- else if (parm_table[i].type == P_LIST &&
- parm_table[i].class == P_LOCAL)
- str_list_free((char ***)
- (((char *)pservice) +
- PTR_DIFF(parm_table[i].ptr, &sDefault)));
+ } else if (parm_table[i].type == P_LIST &&
+ parm_table[i].class == P_LOCAL) {
+ char ***listp = (char ***)(((char *)pservice) +
+ PTR_DIFF(parm_table[i].ptr, &sDefault));
+ talloc_free(*listp);
+ *listp = NULL;
+ }
}
DEBUG(5,("Freeing parametrics:\n"));
if (i == iNumServices) {
service **tsp;
- tsp = (service **) Realloc(ServicePtrs,
- sizeof(service *) *
- num_to_alloc);
+ tsp = realloc_p(ServicePtrs, service *, num_to_alloc);
if (!tsp) {
DEBUG(0,("add_a_service: failed to enlarge ServicePtrs!\n"));
}
else {
ServicePtrs = tsp;
- ServicePtrs[iNumServices] =
- (service *) malloc(sizeof(service));
+ ServicePtrs[iNumServices] = malloc_p(service);
}
if (!ServicePtrs[iNumServices]) {
DEBUG(0,("add_a_service: out of memory!\n"));
Add the IPC service.
***************************************************************************/
-static BOOL lp_add_ipc(const char *ipc_name, BOOL guest_ok)
+static BOOL lp_add_hidden(const char *name, const char *fstype, BOOL guest_ok)
{
pstring comment;
- int i = add_a_service(&sDefault, ipc_name);
+ int i = add_a_service(&sDefault, name);
if (i < 0)
return (False);
slprintf(comment, sizeof(comment) - 1,
- "IPC Service (%s)", Globals.szServerString);
+ "%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, "IPC");
- ServicePtrs[i]->iMaxConnections = 0;
+ 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 = sDefault.bBrowseable;
+ ServicePtrs[i]->bBrowseable = False;
- DEBUG(3, ("adding IPC service\n"));
+ if (strcasecmp(fstype, "IPC") == 0) {
+ lp_do_parameter(i, "ntvfs handler", "default");
+ }
+
+ DEBUG(3, ("adding hidden service %s\n", name));
return (True);
}
strupper(*(char **)dest_ptr);
break;
case P_LIST:
- str_list_copy((char ***)dest_ptr, *(const char ***)src_ptr);
+ *(const char ***)dest_ptr = str_list_copy(talloc_autofree_context(),
+ *(const char ***)src_ptr);
break;
default:
break;
pdata = pdata->next;
}
if (not_added) {
- paramo = smb_xmalloc(sizeof(*paramo));
+ paramo = smb_xmalloc_p(struct param_opt);
paramo->key = strdup(data->key);
paramo->value = strdup(data->value);
DLIST_ADD(pserviceDest->param_opt, paramo);
DEBUG(0, ("WARNING: [%s] service MUST be printable!\n",
ServicePtrs[iService]->szService));
ServicePtrs[iService]->bPrint_ok = True;
+ update_server_announce_as_printserver();
}
/* [printers] service must also be non-browsable. */
if (ServicePtrs[iService]->bBrowseable)
ServicePtrs[iService]->bBrowseable = False;
}
- if (ServicePtrs[iService]->szPath[0] == '\0' &&
- strwicmp(ServicePtrs[iService]->szService, HOMES_NAME) != 0) {
- DEBUG(0, ("No path in service %s - using %s\n",
- ServicePtrs[iService]->szService, tmpdir()));
- string_set(&ServicePtrs[iService]->szPath, tmpdir());
- }
-
/* If a service is flagged unavailable, log the fact at level 0. */
if (!ServicePtrs[iService]->bAvailable)
DEBUG(1, ("NOTE: Service %s is flagged unavailable.\n",
}
if (!f) {
- f = (struct file_lists *)malloc(sizeof(file_lists[0]));
+ f = malloc_p(struct file_lists);
if (!f)
return;
f->next = file_lists;
string_set(ptr, fname);
- if (file_exist(fname, NULL))
+ if (file_exist(fname))
return (pm_process(fname, do_section, do_parameter));
DEBUG(2, ("Can't find include file %s\n", fname));
static uid_t winbind_uid_low, winbind_uid_high;
static gid_t winbind_gid_low, winbind_gid_high;
-static uint32 non_unix_account_low, non_unix_account_high;
+static uint32_t non_unix_account_low, non_unix_account_high;
BOOL lp_winbind_uid(uid_t *low, uid_t *high)
{
return True;
}
-BOOL lp_non_unix_account_range(uint32 *low, uint32 *high)
+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;
static BOOL handle_winbind_uid(const char *pszParmValue, char **ptr)
{
- uint32 low, high;
+ uint32_t low, high;
if (sscanf(pszParmValue, "%u-%u", &low, &high) != 2 || high < low)
return False;
static BOOL handle_winbind_gid(const char *pszParmValue, char **ptr)
{
- uint32 low, high;
+ uint32_t low, high;
if (sscanf(pszParmValue, "%u-%u", &low, &high) != 2 || high < low)
return False;
static BOOL handle_non_unix_account_range(const char *pszParmValue, char **ptr)
{
- uint32 low, high;
+ uint32_t low, high;
if (sscanf(pszParmValue, "%u-%u", &low, &high) != 2 || high < low)
return False;
return True;
}
-/***************************************************************************
- Handle the ldap machine suffix option.
-***************************************************************************/
-
-static BOOL handle_ldap_machine_suffix( const char *pszParmValue, char **ptr)
-{
- pstring suffix;
-
- pstrcpy(suffix, pszParmValue);
-
- if (! *Globals.szLdapSuffix ) {
- string_set( ptr, suffix );
- return True;
- }
-
- if (! strstr(suffix, Globals.szLdapSuffix) ) {
- if ( *pszParmValue )
- pstrcat(suffix, ",");
- pstrcat(suffix, Globals.szLdapSuffix);
- }
- string_set( ptr, suffix );
- return True;
-}
-
-/***************************************************************************
- Handle the ldap user suffix option.
-***************************************************************************/
-
-static BOOL handle_ldap_user_suffix( const char *pszParmValue, char **ptr)
-{
- pstring suffix;
-
- pstrcpy(suffix, pszParmValue);
-
- if (! *Globals.szLdapSuffix ) {
- string_set( ptr, suffix );
- return True;
- }
-
- if (! strstr(suffix, Globals.szLdapSuffix) ) {
- if ( *pszParmValue )
- pstrcat(suffix, ",");
- pstrcat(suffix, Globals.szLdapSuffix);
- }
- string_set( ptr, suffix );
- return True;
-}
-
-/***************************************************************************
- Handle setting ldap suffix and determines whether ldap machine suffix needs
- to be set as well.
-***************************************************************************/
-
-static BOOL handle_ldap_suffix( const char *pszParmValue, char **ptr)
-{
- pstring suffix;
- pstring user_suffix;
- pstring machine_suffix;
-
- pstrcpy(suffix, pszParmValue);
-
- if (! *Globals.szLdapMachineSuffix )
- string_set(&Globals.szLdapMachineSuffix, suffix);
- if (! *Globals.szLdapUserSuffix )
- string_set(&Globals.szLdapUserSuffix, suffix);
-
- if (! strstr(Globals.szLdapMachineSuffix, suffix)) {
- pstrcpy(machine_suffix, Globals.szLdapMachineSuffix);
- if ( *Globals.szLdapMachineSuffix )
- pstrcat(machine_suffix, ",");
- pstrcat(machine_suffix, suffix);
- string_set(&Globals.szLdapMachineSuffix, machine_suffix);
- }
-
- if (! strstr(Globals.szLdapUserSuffix, suffix)) {
- pstrcpy(user_suffix, Globals.szLdapUserSuffix);
- if ( *Globals.szLdapUserSuffix )
- pstrcat(user_suffix, ",");
- pstrcat(user_suffix, suffix);
- string_set(&Globals.szLdapUserSuffix, user_suffix);
- }
-
- string_set(ptr, suffix);
-
- return True;
-}
/***************************************************************************
Initialise a copymap.
{
int i;
SAFE_FREE(pservice->copymap);
- pservice->copymap = (BOOL *)malloc(sizeof(BOOL) * NUMPARAMETERS);
+ pservice->copymap = malloc_array_p(BOOL, NUMPARAMETERS);
if (!pservice->copymap)
DEBUG(0,
("Couldn't allocate copymap!! (size %d)\n",
}
}
- paramo = smb_xmalloc(sizeof(*paramo));
+ paramo = smb_xmalloc_p(struct param_opt);
paramo->key = strdup(name);
paramo->value = strdup(pszParmValue);
paramo->flags = flags;
break;
case P_LIST:
- *(char ***)parm_ptr = str_list_make(pszParmValue, NULL);
+ *(const char ***)parm_ptr = str_list_make(talloc_autofree_context(),
+ pszParmValue, NULL);
break;
case P_STRING:
break;
}
}
+ if (!parm_table[parmnum].enum_list[i].name) {
+ DEBUG(0,("Unknown enumerated value '%s' for '%s'\n",
+ pszParmValue, pszParmName));
+ return False;
+ }
break;
case P_SEP:
break;
if (!bInGlobalSection && bGlobalOnly)
return (True);
- DEBUGADD(4, ("doing parameter %s = %s\n", pszParmName, pszParmValue));
-
return (lp_do_parameter(bInGlobalSection ? -2 : iServiceIndex,
pszParmName, pszParmValue));
}
+/*
+ variable argument do parameter
+*/
+static BOOL do_parameter_var(const char *pszParmName, const char *fmt, ...) PRINTF_ATTRIBUTE(2, 3);
+
+static BOOL do_parameter_var(const char *pszParmName, const char *fmt, ...)
+{
+ char *s;
+ BOOL ret;
+ va_list ap;
+
+ va_start(ap, fmt);
+ s = talloc_vasprintf(NULL, fmt, ap);
+ va_end(ap);
+ ret = do_parameter(pszParmName, s);
+ talloc_free(s);
+ return ret;
+}
+
/*
set a parameter from the commandline - this is called from command line parameter
BOOL lp_set_cmdline(const char *pszParmName, const char *pszParmValue)
{
int parmnum = map_parameter(pszParmName);
+ int i;
+
+ while (isspace(*pszParmValue)) pszParmValue++;
+
if (parmnum < 0 && strchr(pszParmName, ':')) {
/* set a parametric option */
return lp_do_parameter_parametric(-1, pszParmName, pszParmValue, FLAG_CMDLINE);
}
+ if (parmnum < 0) {
+ DEBUG(0,("Unknown option '%s'\n", pszParmName));
+ return False;
+ }
+
/* reset the CMDLINE flag in case this has been called before */
parm_table[parmnum].flags &= ~FLAG_CMDLINE;
}
parm_table[parmnum].flags |= FLAG_CMDLINE;
+
+ /* we have to also set FLAG_CMDLINE on aliases */
+ for (i=parmnum-1;i>=0 && parm_table[i].ptr == parm_table[parmnum].ptr;i--) {
+ parm_table[i].flags |= FLAG_CMDLINE;
+ }
+ for (i=parmnum+1;i<NUMPARAMETERS && parm_table[i].ptr == parm_table[parmnum].ptr;i++) {
+ parm_table[i].flags |= FLAG_CMDLINE;
+ }
+
return True;
}
+/*
+ set a option from the commandline in 'a=b' format. Use to support --option
+*/
+BOOL lp_set_option(const char *option)
+{
+ char *p, *s;
+ BOOL ret;
+
+ s = strdup(option);
+ if (!s) {
+ return False;
+ }
+
+ p = strchr(s, '=');
+ if (!p) {
+ free(s);
+ return False;
+ }
+
+ *p = 0;
+
+ ret = lp_set_cmdline(s, p+1);
+ free(s);
+ return ret;
+}
+
+
+#define BOOLSTR(b) ((b) ? "Yes" : "No")
+
/***************************************************************************
Print a parameter of the specified type.
***************************************************************************/
break;
case P_OCTAL:
- fprintf(f, "%s", octal_string(*(int *)ptr));
+ if (*(int *)ptr == -1) {
+ fprintf(f, "-1");
+ } else {
+ fprintf(f, "0%o", *(int *)ptr);
+ }
break;
case P_LIST:
return (*((char *)ptr1) == *((char *)ptr2));
case P_LIST:
- return str_list_compare(*(char ***)ptr1, *(char ***)ptr2);
+ return str_list_equal((const char **)(*(char ***)ptr1),
+ (const char **)(*(char ***)ptr2));
case P_STRING:
case P_USTRING:
return False;
switch (parm_table[i].type) {
case P_LIST:
- return str_list_compare (parm_table[i].def.lvalue,
- *(char ***)parm_table[i].ptr);
+ return str_list_equal((const char **)parm_table[i].def.lvalue,
+ (const char **)(*(char ***)parm_table[i].ptr));
case P_STRING:
case P_USTRING:
return strequal(parm_table[i].def.svalue,
}
-/***************************************************************************
- Return True if a local parameter is currently set to the global default.
-***************************************************************************/
-
-BOOL lp_is_default(int snum, struct parm_struct *parm)
-{
- int pdiff = PTR_DIFF(parm->ptr, &sDefault);
-
- return equal_parameter(parm->type,
- ((char *)ServicePtrs[snum]) + pdiff,
- ((char *)&sDefault) + pdiff);
-}
-
/***************************************************************************
Display the contents of a single services record.
***************************************************************************/
}
-#if 0
-/***************************************************************************
- Display the contents of a single copy structure.
-***************************************************************************/
-static void dump_copy_map(BOOL *pcopymap)
-{
- int i;
- if (!pcopymap)
- return;
-
- printf("\n\tNon-Copied parameters:\n");
-
- for (i = 0; parm_table[i].label; i++)
- if (parm_table[i].class == P_LOCAL &&
- parm_table[i].ptr && !pcopymap[i] &&
- (i == 0 || (parm_table[i].ptr != parm_table[i - 1].ptr)))
- {
- printf("\t\t%s\n", parm_table[i].label);
- }
-}
-#endif
-
/***************************************************************************
Return TRUE if the passed service number is within range.
***************************************************************************/
Auto-load some home services.
***************************************************************************/
-static void lp_add_auto_services(char *str)
+static void lp_add_auto_services(const char *str)
{
- char *s;
- char *p;
- int homes;
-
- if (!str)
- return;
-
- s = strdup(str);
- if (!s)
- return;
-
- homes = lp_servicenumber(HOMES_NAME);
-
- for (p = strtok(s, LIST_SEP); p; p = strtok(NULL, LIST_SEP)) {
- char *home = get_user_home_dir(p);
-
- if (lp_servicenumber(p) >= 0)
- continue;
-
- if (home && homes >= 0)
- lp_add_home(p, homes, p, home);
- }
- SAFE_FREE(s);
+ return;
}
/***************************************************************************
Unload unused services.
***************************************************************************/
-void lp_killunused(struct server_context *smb, BOOL (*snumused) (struct server_context *, int))
+void lp_killunused(struct smbsrv_connection *smb, BOOL (*snumused) (struct smbsrv_connection *, int))
{
int i;
for (i = 0; i < iNumServices; i++) {
continue;
switch (parm_table[i].type) {
case P_LIST:
- str_list_copy(&(parm_table[i].def.lvalue),
- *(const char ***)parm_table[i].ptr);
+ parm_table[i].def.lvalue = str_list_copy(talloc_autofree_context(),
+ *(const char ***)parm_table[i].ptr);
break;
case P_STRING:
case P_USTRING:
case SEC_DOMAIN:
case SEC_ADS:
if (lp_domain_logons()) {
- server_role = ROLE_DOMAIN_PDC;
+ if (Globals.bDomainMaster) /* auto or yes */
+ server_role = ROLE_DOMAIN_PDC;
+ else
+ server_role = ROLE_DOMAIN_BDC;
break;
}
server_role = ROLE_DOMAIN_MEMBER;
bInGlobalSection = True;
bGlobalOnly = global_only;
- init_globals();
-
- if (save_defaults)
- {
- lp_save_defaults();
- }
-
if (Globals.param_opt != NULL) {
struct param_opt *next;
for (data=Globals.param_opt; data; data=next) {
}
}
+ init_globals();
+
+ if (save_defaults)
+ {
+ lp_save_defaults();
+ }
+
/* We get sections first, so have to start 'behind' to make up */
iServiceIndex = -1;
bRetval = pm_process(n2, do_section, do_parameter);
if (add_ipc) {
/* When 'restrict anonymous = 2' guest connections to ipc$
are denied */
- lp_add_ipc("IPC$", (lp_restrict_anonymous() < 2));
- lp_add_ipc("ADMIN$", False);
+ lp_add_hidden("IPC$", "IPC", (lp_restrict_anonymous() < 2));
+ lp_add_hidden("ADMIN$", "DISK", False);
}
set_server_role();
/*******************************************************************
A useful volume label function.
********************************************************************/
-char *volume_label(int snum)
+const char *volume_label(int snum)
{
- char *ret = lp_volume(snum);
+ const char *ret = lp_volume(snum);
if (!*ret)
return lp_servicename(snum);
return (ret);
if (lp_host_msdfs())
default_server_announce |= SV_TYPE_DFS_SERVER;
+
+ /* TODO: only announce us as print server when we are a print server */
+ default_server_announce |= SV_TYPE_PRINTQ_SERVER;
}
/***********************************************************
void lp_copy_service(int snum, const char *new_name)
{
- char *oldname = lp_servicename(snum);
+ const char *oldname = lp_servicename(snum);
do_section(new_name);
if (snum >= 0) {
snum = lp_servicenumber(new_name);
/*******************************************************************
Get the default server type we will announce as via nmbd.
********************************************************************/
-
int lp_default_server_announce(void)
{
return default_server_announce;
}
-/*******************************************************************
- Split the announce version into major and minor numbers.
-********************************************************************/
-
-int lp_major_announce_version(void)
-{
- static BOOL got_major = False;
- static int major_version = DEFAULT_MAJOR_VERSION;
- char *vers;
- char *p;
-
- if (got_major)
- return major_version;
-
- got_major = True;
- if ((vers = lp_announce_version()) == NULL)
- return major_version;
-
- if ((p = strchr_m(vers, '.')) == 0)
- return major_version;
-
- *p = '\0';
- major_version = atoi(vers);
- return major_version;
-}
-
-int lp_minor_announce_version(void)
-{
- static BOOL got_minor = False;
- static int minor_version = DEFAULT_MINOR_VERSION;
- char *vers;
- char *p;
-
- if (got_minor)
- return minor_version;
-
- got_minor = True;
- if ((vers = lp_announce_version()) == NULL)
- return minor_version;
-
- if ((p = strchr_m(vers, '.')) == 0)
- return minor_version;
-
- p++;
- minor_version = atoi(p);
- return minor_version;
-}
-
const char *lp_printername(int snum)
{
const char *ret = _lp_printername(snum);