char *szAddUserScript;
char *szDelUserScript;
char *szWINSHook;
+ char *szNtForms;
+ char *szNtDriverFile;
#ifdef WITH_UTMP
char *szUtmpDir;
#endif /* WITH_UTMP */
+ char *szSourceEnv;
+ char *szWinbindUID;
+ char *szWinbindGID;
+ char *szTemplateHomedir;
+ char *szTemplateShell;
int max_log_size;
int mangled_stack;
int max_xmit;
int map_to_guest;
int min_passwd_length;
int oplock_break_wait_time;
+ int winbind_cache_time;
#ifdef WITH_LDAP
int ldap_port;
#endif /* WITH_LDAP */
BOOL bBindInterfacesOnly;
BOOL bUnixPasswdSync;
BOOL bPasswdChatDebug;
- BOOL bOleLockingCompat;
BOOL bTimestampLogs;
BOOL bNTSmbSupport;
BOOL bNTPipeSupport;
BOOL bDebugHiresTimestamp;
BOOL bDebugPid;
BOOL bDebugUid;
+ BOOL bHostMSDfs;
} global;
static global Globals;
char *writelist;
char *volume;
char *fstype;
+ char *szVfsObjectFile;
+ char *szVfsOptions;
int iMinPrintSpace;
int iWriteCacheSize;
int iCreate_mask;
BOOL bMap_archive;
BOOL bLocking;
BOOL bStrictLocking;
+ BOOL bPosixLocking;
#ifdef WITH_UTMP
BOOL bUtmp;
#endif
BOOL bDosFiletimeResolution;
BOOL bFakeDirCreateTimes;
BOOL bBlockingLocks;
+ BOOL bInheritPerms;
+#ifdef MS_DFS
+ char *szDfsMap;
+ BOOL bDfsMapLoaded;
+#endif
char dummy[3]; /* for alignment */
} service;
NULL, /* writelist */
NULL, /* volume */
NULL, /* fstype */
+ NULL, /* vfs object */
+ NULL, /* vfs options */
0, /* iMinPrintSpace */
0, /* iWriteCacheSize */
0744, /* iCreate_mask */
True, /* bMap_archive */
True, /* bLocking */
False, /* bStrictLocking */
+ True, /* bPosixLocking */
#ifdef WITH_UTMP
False, /* bUtmp */
#endif
False, /* bDosFiletimeResolution */
False, /* bFakeDirCreateTimes */
True, /* bBlockingLocks */
+ False, /* bInheritPerms */
+#ifdef MS_DFS
+ NULL, /* MS Dfs map path */
+ False, /* bDfsMapLoaded */
+#endif
"" /* dummy */
};
static BOOL handle_character_set(char *pszParmValue,char **ptr);
static BOOL handle_coding_system(char *pszParmValue,char **ptr);
static BOOL handle_client_code_page(char *pszParmValue,char **ptr);
+static BOOL handle_vfs_object(char *pszParmValue, char **ptr);
+static BOOL handle_source_env(char *pszParmValue,char **ptr);
+static BOOL handle_netbios_name(char *pszParmValue,char **ptr);
+static BOOL handle_winbind_id(char *pszParmValue, char **ptr);
static void set_default_server_announce_type(void);
static struct parm_struct parm_table[] =
{
{"Base Options", P_SEP, P_SEPARATOR},
+ {"coding system", P_STRING, P_GLOBAL, &Globals.szCodingSystem, handle_coding_system, NULL, 0},
+ {"client code page", P_INTEGER, P_GLOBAL, &Globals.client_code_page, handle_client_code_page, NULL, 0},
{"comment", P_STRING, P_LOCAL, &sDefault.comment, NULL, NULL, FLAG_BASIC|FLAG_SHARE|FLAG_PRINT|FLAG_DOS_STRING},
{"path", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_BASIC|FLAG_SHARE|FLAG_PRINT|FLAG_DOS_STRING},
{"directory", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_DOS_STRING},
{"workgroup", P_USTRING, P_GLOBAL, &Globals.szWorkGroup, NULL, NULL, FLAG_BASIC|FLAG_DOS_STRING},
- {"netbios name", P_UGSTRING,P_GLOBAL, global_myname, NULL, NULL, FLAG_BASIC|FLAG_DOS_STRING},
+ {"netbios name", P_UGSTRING,P_GLOBAL, global_myname, handle_netbios_name, NULL, FLAG_BASIC|FLAG_DOS_STRING},
{"netbios aliases", P_STRING, P_GLOBAL, &Globals.szNetbiosAliases, NULL, NULL, FLAG_DOS_STRING},
{"netbios scope", P_UGSTRING,P_GLOBAL, global_scope, NULL, NULL, FLAG_DOS_STRING},
{"server string", P_STRING, P_GLOBAL, &Globals.szServerString, NULL, NULL, FLAG_BASIC|FLAG_DOS_STRING},
{"force directory mode", P_OCTAL,P_LOCAL,&sDefault.iDir_force_mode, NULL, NULL, FLAG_GLOBAL|FLAG_SHARE},
{"directory security mask",P_OCTAL,P_LOCAL,&sDefault.iDir_Security_mask,NULL, NULL, FLAG_GLOBAL|FLAG_SHARE},
{"force directory security mode",P_OCTAL, P_LOCAL, &sDefault.iDir_Security_force_mode,NULL,NULL,FLAG_GLOBAL|FLAG_SHARE},
+ {"inherit permissions",P_BOOL, P_LOCAL, &sDefault.bInheritPerms, NULL, NULL, FLAG_SHARE},
{"guest only", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL, NULL, FLAG_SHARE},
{"only guest", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL, NULL, 0},
{"guest ok", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_BASIC|FLAG_SHARE|FLAG_PRINT},
{"printcap name", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, FLAG_PRINT},
{"printcap", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, 0},
{"printer driver file", P_STRING, P_GLOBAL, &Globals.szDriverFile, NULL, NULL, FLAG_PRINT},
- {"print ok", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, FLAG_PRINT},
- {"printable", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, 0},
+ {"printable", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, FLAG_PRINT},
+ {"print ok", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, 0},
{"postscript", P_BOOL, P_LOCAL, &sDefault.bPostscript, NULL, NULL, FLAG_PRINT},
{"printing", P_ENUM, P_LOCAL, &sDefault.iPrinting, NULL, enum_printing, FLAG_PRINT|FLAG_GLOBAL},
{"print command", P_STRING, P_LOCAL, &sDefault.szPrintcommand, NULL, NULL, FLAG_PRINT|FLAG_GLOBAL},
{"printer", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, 0},
{"printer driver", P_STRING, P_LOCAL, &sDefault.szPrinterDriver, NULL, NULL, FLAG_PRINT},
{"printer driver location", P_STRING, P_LOCAL, &sDefault.szPrinterDriverLocation, NULL, NULL, FLAG_PRINT|FLAG_GLOBAL},
+ {"nt forms file", P_STRING, P_GLOBAL, &Globals.szNtForms, NULL, NULL, FLAG_GLOBAL},
+ {"nt printer driver",P_STRING, P_GLOBAL, &Globals.szNtDriverFile, NULL, NULL, FLAG_GLOBAL},
{"Filename Handling", P_SEP, P_SEPARATOR},
{"strip dot", P_BOOL, P_GLOBAL, &Globals.bStripDot, NULL, NULL, 0},
{"character set", P_STRING, P_GLOBAL, &Globals.szCharacterSet, handle_character_set, NULL, 0},
{"mangled stack", P_INTEGER, P_GLOBAL, &Globals.mangled_stack, NULL, NULL, 0},
- {"coding system", P_STRING, P_GLOBAL, &Globals.szCodingSystem, handle_coding_system, NULL, 0},
- {"client code page", P_INTEGER, P_GLOBAL, &Globals.client_code_page, handle_client_code_page, NULL, 0},
{"default case", P_ENUM, P_LOCAL, &sDefault.iDefaultCase, NULL, enum_case, FLAG_SHARE},
{"case sensitive", P_BOOL, P_LOCAL, &sDefault.bCaseSensitive, NULL, NULL, FLAG_SHARE|FLAG_GLOBAL},
{"casesignames", P_BOOL, P_LOCAL, &sDefault.bCaseSensitive, NULL, NULL, 0},
#ifdef WITH_UTMP
{"utmp", P_BOOL, P_LOCAL, &sDefault.bUtmp, NULL, NULL, FLAG_SHARE|FLAG_GLOBAL},
#endif
- {"ole locking compatibility", P_BOOL, P_GLOBAL, &Globals.bOleLockingCompat, NULL, NULL, FLAG_GLOBAL},
{"oplocks", P_BOOL, P_LOCAL, &sDefault.bOpLocks, NULL, NULL, FLAG_SHARE|FLAG_GLOBAL},
{"level2 oplocks", P_BOOL, P_LOCAL, &sDefault.bLevel2OpLocks, NULL, NULL, FLAG_SHARE|FLAG_GLOBAL},
{"oplock break wait time",P_INTEGER,P_GLOBAL,&Globals.oplock_break_wait_time,NULL,NULL,FLAG_GLOBAL},
{"oplock contention limit",P_INTEGER,P_LOCAL,&sDefault.iOplockContentionLimit,NULL,NULL,FLAG_SHARE|FLAG_GLOBAL},
+ {"posix locking", P_BOOL, P_LOCAL, &sDefault.bPosixLocking, NULL, NULL, FLAG_SHARE|FLAG_GLOBAL},
{"strict locking", P_BOOL, P_LOCAL, &sDefault.bStrictLocking, NULL, NULL, FLAG_SHARE|FLAG_GLOBAL},
{"share modes", P_BOOL, P_LOCAL, &sDefault.bShareModes, NULL, NULL, FLAG_SHARE|FLAG_GLOBAL},
{"include", P_STRING, P_LOCAL, &sDefault.szInclude, handle_include, NULL, FLAG_HIDE},
{"exec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, FLAG_SHARE|FLAG_PRINT},
{"preexec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, 0},
- {"preexec close", P_BOOL, P_LOCAL, &sDefault.bPreexecClose, NULL, NULL, 0},
+ {"preexec close", P_BOOL, P_LOCAL, &sDefault.bPreexecClose, NULL, NULL, FLAG_SHARE},
{"postexec", P_STRING, P_LOCAL, &sDefault.szPostExec, NULL, NULL, FLAG_SHARE|FLAG_PRINT},
{"root preexec", P_STRING, P_LOCAL, &sDefault.szRootPreExec, NULL, NULL, FLAG_SHARE|FLAG_PRINT},
- {"root preexec close", P_BOOL, P_LOCAL, &sDefault.bRootpreexecClose,NULL, NULL, 0},
+ {"root preexec close", P_BOOL, P_LOCAL, &sDefault.bRootpreexecClose,NULL, NULL, FLAG_SHARE},
{"root postexec", P_STRING, P_LOCAL, &sDefault.szRootPostExec, NULL, NULL, FLAG_SHARE|FLAG_PRINT},
{"available", P_BOOL, P_LOCAL, &sDefault.bAvailable, NULL, NULL, FLAG_BASIC|FLAG_SHARE|FLAG_PRINT},
{"volume", P_STRING, P_LOCAL, &sDefault.volume, NULL, NULL, FLAG_SHARE},
{"fstype", P_STRING, P_LOCAL, &sDefault.fstype, NULL, NULL, FLAG_SHARE},
{"set directory", P_BOOLREV, P_LOCAL, &sDefault.bNo_set_dir, NULL, NULL, FLAG_SHARE},
+ {"source environment",P_STRING, P_GLOBAL, &Globals.szSourceEnv, handle_source_env,NULL,0},
{"wide links", P_BOOL, P_LOCAL, &sDefault.bWidelinks, NULL, NULL, FLAG_SHARE|FLAG_GLOBAL},
{"follow symlinks", P_BOOL, P_LOCAL, &sDefault.bSymlinks, NULL, NULL, FLAG_SHARE|FLAG_GLOBAL},
{"dont descend", P_STRING, P_LOCAL, &sDefault.szDontdescend, NULL, NULL, FLAG_SHARE},
{"fake directory create times", P_BOOL,P_LOCAL, &sDefault.bFakeDirCreateTimes, NULL, NULL, FLAG_SHARE|FLAG_GLOBAL},
{"panic action", P_STRING, P_GLOBAL, &Globals.szPanicAction, NULL, NULL, 0},
+ {"VFS options", P_SEP, P_SEPARATOR},
+
+ {"vfs object", P_STRING, P_LOCAL, &sDefault.szVfsObjectFile, handle_vfs_object, NULL, 0},
+ {"vfs options", P_STRING, P_LOCAL, &sDefault.szVfsOptions, NULL, NULL, 0},
+
+#ifdef MS_DFS
+ {"dfs map", P_STRING, P_LOCAL, &sDefault.szDfsMap, NULL, NULL, FLAG_SHARE},
+ {"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, FLAG_GLOBAL},
+#endif
+
+ {"Winbind options", P_SEP, P_SEPARATOR},
+
+ {"winbind uid", P_STRING, P_GLOBAL, &Globals.szWinbindUID, handle_winbind_id, NULL, 0},
+ {"winbind gid", P_STRING, P_GLOBAL, &Globals.szWinbindGID, handle_winbind_id, NULL, 0},
+ {"template homedir", P_STRING, P_GLOBAL, &Globals.szTemplateHomedir, NULL, NULL, 0},
+ {"template shell", P_STRING, P_GLOBAL, &Globals.szTemplateShell, NULL, NULL, 0},
+ {"winbind cache time", P_INTEGER, P_GLOBAL, &Globals.winbind_cache_time, NULL, NULL, 0},
+
{NULL, P_BOOL, P_NONE, NULL, NULL, NULL, 0}
};
if ((parm_table[i].type == P_STRING ||
parm_table[i].type == P_USTRING) &&
parm_table[i].ptr)
- string_init(parm_table[i].ptr,"");
+ string_set(parm_table[i].ptr,"");
string_set(&sDefault.szGuestaccount, GUEST_ACCOUNT);
string_set(&sDefault.szPrinterDriver, "NULL");
string_set(&Globals.szPasswdProgram, PASSWD_PROGRAM);
string_set(&Globals.szPrintcapname, PRINTCAP_NAME);
string_set(&Globals.szDriverFile, DRIVERFILE);
+ string_set(&Globals.szNtForms, FORMSFILE);
+ string_set(&Globals.szNtDriverFile, NTDRIVERSDIR);
string_set(&Globals.szLockDir, LOCKDIR);
string_set(&Globals.szRootdir, "/");
#ifdef WITH_UTMP
Globals.shmem_size = SHMEM_SIZE;
Globals.stat_cache_size = 50; /* Number of stat translations we'll keep */
Globals.announce_as = ANNOUNCE_AS_NT_SERVER;
- Globals.bUnixRealname = False;
+ Globals.bUnixRealname = True;
#if (defined(HAVE_NETGROUP) && defined(WITH_AUTOMOUNT))
Globals.bNISHomeMap = False;
#ifdef WITH_NISPLUS_HOME
Globals.bBindInterfacesOnly = False;
Globals.bUnixPasswdSync = False;
Globals.bPasswdChatDebug = False;
- Globals.bOleLockingCompat = True;
Globals.bNTSmbSupport = True; /* Do NT SMB's by default. */
Globals.bNTPipeSupport = True; /* Do NT pipes by default. */
Globals.bNTAclSupport = True; /* Use NT ACLs by default. */
Globals.bAllowTrustedDomains = True;
+ string_set(&Globals.szTemplateShell, "/bin/false");
+ string_set(&Globals.szTemplateHomedir, "/home/%U");
+ Globals.winbind_cache_time = 15;
+
/*
* This must be done last as it checks the value in
* client_code_page.
interpret_coding_system(KANJI);
}
-/***************************************************************************
-check if a string is initialised and if not then initialise it
-***************************************************************************/
-static void string_initial(char **s,char *v)
-{
- if (!*s || !**s)
- string_init(s,v);
-}
-
-
/***************************************************************************
Initialise the sDefault parameter structure.
***************************************************************************/
{
case PRINT_BSD:
case PRINT_AIX:
+ string_set(&sDefault.szLpqcommand,"lpq -P%p");
+ string_set(&sDefault.szLprmcommand,"lprm -P%p %j");
+ string_set(&sDefault.szPrintcommand,"lpr -r -P%p %s");
+ break;
+
case PRINT_LPRNG:
case PRINT_PLP:
- string_initial(&sDefault.szLpqcommand,"lpq -P%p");
- string_initial(&sDefault.szLprmcommand,"lprm -P%p %j");
- string_initial(&sDefault.szPrintcommand,"lpr -r -P%p %s");
+ string_set(&sDefault.szLpqcommand,"lpq -P%p");
+ string_set(&sDefault.szLprmcommand,"lprm -P%p %j");
+ string_set(&sDefault.szPrintcommand,"lpr -r -P%p %s");
+ string_set(&sDefault.szQueuepausecommand, "lpc stop %p");
+ string_set(&sDefault.szQueueresumecommand, "lpc start %p");
+ string_set(&sDefault.szLppausecommand, "lpc hold %p %j");
+ string_set(&sDefault.szLpresumecommand, "lpc release %p %j");
break;
case PRINT_CUPS:
- string_initial(&sDefault.szLpqcommand,"/usr/bin/lpstat -o%p");
- string_initial(&sDefault.szLprmcommand,"/usr/bin/cancel %p-%j");
- string_initial(&sDefault.szPrintcommand,"/usr/bin/lp -d%p -oraw %s; rm %s");
- string_initial(&sDefault.szQueuepausecommand, "/usr/bin/disable %p");
- string_initial(&sDefault.szQueueresumecommand, "/usr/bin/enable %p");
+ string_set(&sDefault.szLpqcommand,"/usr/bin/lpstat -o%p");
+ string_set(&sDefault.szLprmcommand,"/usr/bin/cancel %p-%j");
+ string_set(&sDefault.szPrintcommand,"/usr/bin/lp -d%p -oraw %s; rm %s");
+ string_set(&sDefault.szQueuepausecommand, "/usr/bin/disable %p");
+ string_set(&sDefault.szQueueresumecommand, "/usr/bin/enable %p");
break;
case PRINT_SYSV:
case PRINT_HPUX:
- string_initial(&sDefault.szLpqcommand,"lpstat -o%p");
- string_initial(&sDefault.szLprmcommand,"cancel %p-%j");
- string_initial(&sDefault.szPrintcommand,"lp -c -d%p %s; rm %s");
-#ifdef HPUX
- string_initial(&sDefault.szQueuepausecommand, "disable %p");
- string_initial(&sDefault.szQueueresumecommand, "enable %p");
-#else /* SYSV */
- string_initial(&sDefault.szLppausecommand,"lp -i %p-%j -H hold");
- string_initial(&sDefault.szLpresumecommand,"lp -i %p-%j -H resume");
- string_initial(&sDefault.szQueuepausecommand, "lpc stop %p");
- string_initial(&sDefault.szQueueresumecommand, "lpc start %p");
+ string_set(&sDefault.szLpqcommand,"lpstat -o%p");
+ string_set(&sDefault.szLprmcommand,"cancel %p-%j");
+ string_set(&sDefault.szPrintcommand,"lp -c -d%p %s; rm %s");
+ string_set(&sDefault.szQueuepausecommand, "disable %p");
+ string_set(&sDefault.szQueueresumecommand, "enable %p");
+#ifndef HPUX
+ string_set(&sDefault.szLppausecommand,"lp -i %p-%j -H hold");
+ string_set(&sDefault.szLpresumecommand,"lp -i %p-%j -H resume");
#endif /* SYSV */
break;
case PRINT_QNX:
- string_initial(&sDefault.szLpqcommand,"lpq -P%p");
- string_initial(&sDefault.szLprmcommand,"lprm -P%p %j");
- string_initial(&sDefault.szPrintcommand,"lp -r -P%p %s");
+ string_set(&sDefault.szLpqcommand,"lpq -P%p");
+ string_set(&sDefault.szLprmcommand,"lprm -P%p %j");
+ string_set(&sDefault.szPrintcommand,"lp -r -P%p %s");
break;
case PRINT_SOFTQ:
- string_initial(&sDefault.szLpqcommand,"qstat -l -d%p");
- string_initial(&sDefault.szLprmcommand,"qstat -s -j%j -c");
- string_initial(&sDefault.szPrintcommand,"lp -d%p -s %s; rm %s");
- string_initial(&sDefault.szLppausecommand,"qstat -s -j%j -h");
- string_initial(&sDefault.szLpresumecommand,"qstat -s -j%j -r");
+ string_set(&sDefault.szLpqcommand,"qstat -l -d%p");
+ string_set(&sDefault.szLprmcommand,"qstat -s -j%j -c");
+ string_set(&sDefault.szPrintcommand,"lp -d%p -s %s; rm %s");
+ string_set(&sDefault.szLppausecommand,"qstat -s -j%j -h");
+ string_set(&sDefault.szLpresumecommand,"qstat -s -j%j -r");
break;
}
FN_GLOBAL_STRING(lp_utmpdir,&Globals.szUtmpDir)
#endif /* WITH_UTMP */
FN_GLOBAL_STRING(lp_rootdir,&Globals.szRootdir)
+FN_GLOBAL_STRING(lp_source_environment,&Globals.szSourceEnv)
FN_GLOBAL_STRING(lp_defaultservice,&Globals.szDefaultService)
FN_GLOBAL_STRING(lp_msg_command,&Globals.szMsgCommand)
FN_GLOBAL_STRING(lp_dfree_command,&Globals.szDfree)
FN_GLOBAL_STRING(lp_domain_admin_users,&Globals.szDomainAdminUsers)
FN_GLOBAL_STRING(lp_domain_guest_users,&Globals.szDomainGuestUsers)
+FN_GLOBAL_STRING(lp_nt_forms,&Globals.szNtForms)
+FN_GLOBAL_STRING(lp_nt_drivers_file,&Globals.szNtDriverFile)
+
#ifdef WITH_LDAP
FN_GLOBAL_STRING(lp_ldap_server,&Globals.szLdapServer);
FN_GLOBAL_STRING(lp_ldap_suffix,&Globals.szLdapSuffix);
FN_GLOBAL_BOOL(lp_bind_interfaces_only,&Globals.bBindInterfacesOnly)
FN_GLOBAL_BOOL(lp_unix_password_sync,&Globals.bUnixPasswdSync)
FN_GLOBAL_BOOL(lp_passwd_chat_debug,&Globals.bPasswdChatDebug)
-FN_GLOBAL_BOOL(lp_ole_locking_compat,&Globals.bOleLockingCompat)
FN_GLOBAL_BOOL(lp_nt_smb_support,&Globals.bNTSmbSupport)
FN_GLOBAL_BOOL(lp_nt_pipe_support,&Globals.bNTPipeSupport)
FN_GLOBAL_BOOL(lp_nt_acl_support,&Globals.bNTAclSupport)
FN_GLOBAL_BOOL(lp_stat_cache,&Globals.bStatCache)
FN_GLOBAL_BOOL(lp_allow_trusted_domains,&Globals.bAllowTrustedDomains)
FN_GLOBAL_BOOL(lp_restrict_anonymous,&Globals.bRestrictAnonymous)
-
+FN_GLOBAL_BOOL(lp_host_msdfs,&Globals.bHostMSDfs)
FN_GLOBAL_INTEGER(lp_os_level,&Globals.os_level)
FN_GLOBAL_INTEGER(lp_max_ttl,&Globals.max_ttl)
FN_GLOBAL_INTEGER(lp_max_wins_ttl,&Globals.max_wins_ttl)
FN_LOCAL_STRING(lp_readlist,readlist)
FN_LOCAL_STRING(lp_writelist,writelist)
FN_LOCAL_STRING(lp_fstype,fstype)
+FN_LOCAL_STRING(lp_vfsobj,szVfsObjectFile)
static FN_LOCAL_STRING(lp_volume,volume)
FN_LOCAL_STRING(lp_mangled_map,szMangledMap)
FN_LOCAL_STRING(lp_veto_files,szVetoFiles)
FN_LOCAL_STRING(lp_veto_oplocks,szVetoOplockFiles)
FN_LOCAL_STRING(lp_driverlocation,szPrinterDriverLocation)
+#ifdef MS_DFS
+FN_LOCAL_STRING(lp_dfsmap,szDfsMap)
+FN_LOCAL_BOOL(lp_dfsmap_loaded,bDfsMapLoaded)
+#endif
+
FN_LOCAL_BOOL(lp_preexec_close,bPreexecClose)
FN_LOCAL_BOOL(lp_rootpreexec_close,bRootpreexecClose)
FN_LOCAL_BOOL(lp_revalidate,bRevalidate)
FN_LOCAL_BOOL(lp_map_archive,bMap_archive)
FN_LOCAL_BOOL(lp_locking,bLocking)
FN_LOCAL_BOOL(lp_strict_locking,bStrictLocking)
+FN_LOCAL_BOOL(lp_posix_locking,bPosixLocking)
#ifdef WITH_UTMP
FN_LOCAL_BOOL(lp_utmp,bUtmp)
#endif
FN_LOCAL_BOOL(lp_dos_filetime_resolution,bDosFiletimeResolution)
FN_LOCAL_BOOL(lp_fake_dir_create_times,bFakeDirCreateTimes)
FN_LOCAL_BOOL(lp_blocking_locks,bBlockingLocks)
+FN_LOCAL_BOOL(lp_inherit_perms,bInheritPerms)
FN_LOCAL_INTEGER(lp_create_mask,iCreate_mask)
FN_LOCAL_INTEGER(lp_force_create_mode,iCreate_force_mode)
return(False);
}
+/***************************************************************************
+ Run standard_sub_basic on netbios name... needed because global_myname
+ is not accessed through any lp_ macro.
+ Note: We must *NOT* use string_set() here as ptr points to global_myname.
+***************************************************************************/
+
+static BOOL handle_netbios_name(char *pszParmValue,char **ptr)
+{
+ pstring netbios_name;
+
+ pstrcpy(netbios_name,pszParmValue);
+
+ standard_sub_basic(netbios_name);
+ strupper(netbios_name);
+
+ /*
+ * Convert from UNIX to DOS string - the UNIX to DOS converter
+ * isn't called on the special handlers.
+ */
+ unix_to_dos(netbios_name, True);
+ pstrcpy(global_myname,netbios_name);
+
+ DEBUG(4,("handle_netbios_name: set global_myname to: %s\n", global_myname));
+
+ return(True);
+}
+
+/***************************************************************************
+ Do the work of sourcing in environment variable/value pairs.
+***************************************************************************/
+
+static BOOL source_env(char **lines)
+{
+ char *varval;
+ size_t len;
+ int i;
+ char *p;
+
+ for (i=0; lines[i]; i++) {
+ char *line = lines[i];
+
+ if((len = strlen(line)) == 0)
+ continue;
+
+ if (line[len - 1] == '\n')
+ line[--len] = '\0';
+
+ if ((varval=malloc(len+1)) == NULL) {
+ DEBUG(0,("source_env: Not enough memory!\n"));
+ return(False);
+ }
+
+ DEBUG(4,("source_env: Adding to environment: %s\n", line));
+ strncpy(varval, line, len);
+ varval[len] = '\0';
+
+ p=strchr(line, (int) '=');
+ if (p == NULL) {
+ DEBUG(4,("source_env: missing '=': %s\n", line));
+ continue;
+ }
+
+ if (putenv(varval)) {
+ DEBUG(0,("source_env: Failed to put environment variable %s\n", varval ));
+ continue;
+ }
+
+ *p='\0';
+ p++;
+ DEBUG(4,("source_env: getting var %s = %s\n", line, getenv(line)));
+ }
+
+ DEBUG(4,("source_env: returning successfully\n"));
+ return(True);
+}
+
+/***************************************************************************
+ Handle the source environment operation
+***************************************************************************/
+
+static BOOL handle_source_env(char *pszParmValue,char **ptr)
+{
+ pstring fname;
+ char *p = fname;
+ BOOL result;
+ char **lines;
+
+ pstrcpy(fname,pszParmValue);
+
+ standard_sub_basic(fname);
+
+ string_set(ptr,pszParmValue);
+
+ DEBUG(4, ("handle_source_env: checking env type\n"));
+
+ /*
+ * Filename starting with '|' means popen and read from stdin.
+ */
+
+ if (*p == '|') {
+ lines = file_lines_pload(p+1, NULL);
+ } else {
+ lines = file_lines_load(fname, NULL);
+ }
+
+ if (!lines) {
+ DEBUG(0,("handle_source_env: Failed to open file %s, Error was %s\n", fname, strerror(errno) ));
+ return(False);
+ }
+
+ result=source_env(lines);
+ file_lines_free(lines);
+
+ return(result);
+}
+
+
+
+#ifdef MS_DFS
+void set_dfsmap_loaded(int i,BOOL b)
+{
+ pSERVICE(i)->bDfsMapLoaded = b;
+}
+
+#endif
+
+/***************************************************************************
+ handle the interpretation of the vfs object parameter
+ *************************************************************************/
+static BOOL handle_vfs_object(char *pszParmValue,char **ptr)
+{
+ /* Set string value */
+
+ string_set(ptr,pszParmValue);
+
+ /* Do any other initialisation required for vfs. Note that
+ anything done here may have linking repercussions in nmbd. */
+
+ return True;
+}
+
/***************************************************************************
handle the interpretation of the coding system parameter
*************************************************************************/
return (bRetval);
}
+/***************************************************************************
+ Handle winbind uid and gid allocation parameters. The format of these
+ parameters is:
+
+ [global]
+
+ winbind uid = 1000-1999
+ winbind gid = 700-899
+
+ We only do simple parsing checks here. The strings are parsed into useful
+ structures in the winbind daemon code.
+
+***************************************************************************/
+
+/* Do some simple checks on "winbind [ug]id" parameter value */
+
+static BOOL handle_winbind_id(char *pszParmValue, char **ptr)
+{
+ int low, high;
+
+ if (sscanf(pszParmValue, "%d-%d", &low, &high) != 2) {
+ return False;
+ }
+
+ /* Parse OK */
+
+ string_set(ptr,pszParmValue);
+
+ return True;
+}
/***************************************************************************
initialise a copymap
else if(lp_announce_as() == ANNOUNCE_AS_WFW)
default_server_announce |= SV_TYPE_WFW;
default_server_announce |= (lp_time_server() ? SV_TYPE_TIME_SOURCE : 0);
+ default_server_announce |= (lp_host_msdfs() ? SV_TYPE_DFS_SERVER : 0);
}
return lp_force_dir_mode(snum);
return val;
}
+
+