*/
#include "includes.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 "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;
+ 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 *szSAM_URL;
char *szSPOOLSS_URL;
char *szPrivateDir;
- char **szPassdbBackend;
char **szPreloadModules;
char *szPasswordServer;
char *szSocketOptions;
BOOL bWinbindUseDefaultDomain;
char *szIDMapBackend;
char *szGuestaccount;
- int mangled_stack;
int max_mux;
int max_xmit;
int pwordlevel;
int winbind_cache_time;
int iLockSpinCount;
int iLockSpinTime;
- char *szLdapMachineSuffix;
- char *szLdapUserSuffix;
-#ifdef WITH_LDAP_SAMCONFIG
- int ldap_port;
- char *szLdapServer;
-#endif
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;
- BOOL server_signing;
- BOOL client_signing;
+ 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"},
{SMB_SIGNING_SUPPORTED, "1"},
{SMB_SIGNING_SUPPORTED, "On"},
{SMB_SIGNING_SUPPORTED, "enabled"},
- {SMB_SIGNING_SUPPORTED, "auto"},
{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}
};
-/*
- 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"},
- {-1, NULL}
-};
/* Note: We do not initialise the defaults union - it is not allowed in ANSI C
*
{"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", 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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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 srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss", NULL);
-
- Globals.server_services = str_list_make("smb rpc", NULL);
-
- Globals.AuthMethods = str_list_make("guest sam_ignoredomain", NULL);
-
- string_set(&Globals.szSMBPasswdFile, dyn_SMB_PASSWD_FILE);
- string_set(&Globals.szPrivateDir, dyn_PRIVATE_DIR);
- asprintf(&Globals.szSAM_URL, "tdb://%s/sam.ldb", dyn_PRIVATE_DIR);
- asprintf(&Globals.szSPOOLSS_URL, "tdb://%s/spoolss.ldb", dyn_PRIVATE_DIR);
+ do_parameter("fstype", FSTYPE_STRING);
+ do_parameter("ntvfs handler", "unixuid default");
+ do_parameter("max connections", "-1");
- string_set(&Globals.szGuestaccount, GUEST_ACCOUNT);
+ do_parameter("dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg IOXIDResolver IRemoteActivation");
+ do_parameter("server services", "smb rpc");
+ 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("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.bLoadPrinters = True;
- Globals.mangled_stack = 50;
- Globals.max_mux = 50; /* This is *needed* for profile support. */
- Globals.max_xmit = 4356; /* the value w2k3 chooses */
- 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;
-
-#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, "");
-
- 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("HostnameLookups", "False");
-/* these parameters are set to defaults that are more appropriate
- for the increasing samba install base:
+ 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");
- 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("DNSproxy", "True");
- doesn't provide WINS server service by default (wsupp = False),
- and doesn't provide domain master browser services by default, either.
+ do_parameter("AllowTrustedDomains", "True");
-*/
-
- 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;
-
- Globals.bDNSproxy = True;
+ do_parameter("TemplateShell", "/bin/false");
+ do_parameter("TemplateHomedir", "/home/%D/%U");
+ do_parameter("WinbindSeparator", "\\");
- Globals.bAllowTrustedDomains = True;
+ do_parameter("winbind cache time", "15");
+ do_parameter("WinbindEnumUsers", "True");
+ do_parameter("WinbindEnumGroups", "True");
+ do_parameter("WinbindUseDefaultDomain", "False");
- string_set(&Globals.szTemplateShell, "/bin/false");
- string_set(&Globals.szTemplateHomedir, "/home/%D/%U");
- string_set(&Globals.szWinbindSeparator, "\\");
+ do_parameter("IDMapBackend", "tdb");
- Globals.winbind_cache_time = 15;
- Globals.bWinbindEnumUsers = True;
- Globals.bWinbindEnumGroups = True;
- Globals.bWinbindUseDefaultDomain = False;
+ do_parameter("name cache timeout", "660"); /* In seconds */
- string_set(&Globals.szIDMapBackend, "tdb");
+ do_parameter("client signing", "Yes");
+ do_parameter("server signing", "auto");
- Globals.name_cache_timeout = 660; /* In seconds */
+ do_parameter("use spnego", "True");
- Globals.bUseSpnego = True;
+ do_parameter("smb ports", SMB_PORTS);
- Globals.client_signing = SMB_SIGNING_SUPPORTED;
- Globals.server_signing = SMB_SIGNING_SUPPORTED;
-
- string_set(&Globals.smb_ports, SMB_PORTS);
+ do_parameter("nt status support", "True");
}
static TALLOC_CTX *lp_talloc;
{
if (!lp_talloc)
return;
- talloc_destroy(lp_talloc);
+ talloc_free(lp_talloc);
lp_talloc = NULL;
}
#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_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_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_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_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)
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' */
/* 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.
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);
}
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);
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;
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;
}
}
+ 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;
+}
+
+
/***************************************************************************
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 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.
***************************************************************************/
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();
lp_do_parameter(-1, "wins server", "127.0.0.1");
}
+ lp_do_parameter(-1, "gensec:krb5", "False");
+ lp_do_parameter(-1, "gensec:ms_krb5", "False");
+
init_iconv();
return (bRetval);
/*******************************************************************
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;
- const 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;
- const 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);