2 Unix SMB/CIFS implementation.
3 Parameter loading functions
4 Copyright (C) Karl Auer 1993-1998
6 Largely re-written by Andrew Tridgell, September 1994
8 Copyright (C) Simo Sorce 2001
9 Copyright (C) Alexander Bokovoy 2002
10 Copyright (C) Stefan (metze) Metzmacher 2002
11 Copyright (C) Jim McDonough <jmcd@us.ibm.com> 2003
12 Copyright (C) Michael Adam 2008
14 This program is free software; you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation; either version 3 of the License, or
17 (at your option) any later version.
19 This program is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 GNU General Public License for more details.
24 You should have received a copy of the GNU General Public License
25 along with this program. If not, see <http://www.gnu.org/licenses/>.
31 * This module provides suitable callback functions for the params
32 * module. It builds the internal table of service details which is
33 * then used by the rest of the server.
37 * 1) add it to the global or service structure definition
38 * 2) add it to the parm_table
39 * 3) add it to the list of available functions (eg: using FN_GLOBAL_STRING())
40 * 4) If it's a global then initialise it in init_globals. If a local
41 * (ie. service) parameter then initialise it in the sDefault structure
45 * The configuration file is processed sequentially for speed. It is NOT
46 * accessed randomly as happens in 'real' Windows. For this reason, there
47 * is a fair bit of sequence-dependent code here - ie., code which assumes
48 * that certain things happen before others. In particular, the code which
49 * happens at the boundary between sections is delicately poised, so be
57 #ifdef HAVE_SYS_SYSCTL_H
58 #include <sys/sysctl.h>
61 #ifdef HAVE_HTTPCONNECTENCRYPT
62 #include <cups/http.h>
67 extern userdom_struct current_user_info;
70 #define GLOBAL_NAME "global"
74 #define PRINTERS_NAME "printers"
78 #define HOMES_NAME "homes"
81 /* the special value for the include parameter
82 * to be interpreted not as a file name but to
83 * trigger loading of the global smb.conf options
85 #ifndef INCLUDE_REGISTRY_NAME
86 #define INCLUDE_REGISTRY_NAME "registry"
89 static bool in_client = False; /* Not in the client by default */
90 static struct smbconf_csn conf_last_csn;
92 #define CONFIG_BACKEND_FILE 0
93 #define CONFIG_BACKEND_REGISTRY 1
95 static int config_backend = CONFIG_BACKEND_FILE;
97 /* some helpful bits */
98 #define LP_SNUM_OK(i) (((i) >= 0) && ((i) < iNumServices) && (ServicePtrs != NULL) && ServicePtrs[(i)]->valid)
99 #define VALID(i) (ServicePtrs != NULL && ServicePtrs[i]->valid)
101 #define USERSHARE_VALID 1
102 #define USERSHARE_PENDING_DELETE 2
104 static bool defaults_saved = False;
106 struct param_opt_struct {
107 struct param_opt_struct *prev, *next;
114 * This structure describes global (ie., server-wide) parameters.
121 char *display_charset;
122 char *szPrintcapname;
123 char *szAddPortCommand;
124 char *szEnumPortsCommand;
125 char *szAddPrinterCommand;
126 char *szDeletePrinterCommand;
127 char *szOs2DriverMap;
133 char *szDefaultService;
137 char *szServerString;
138 char *szAutoServices;
139 char *szPasswdProgram;
143 char *szSMBPasswdFile;
145 char *szPassdbBackend;
146 char **szPreloadModules;
147 char *szPasswordServer;
148 char *szSocketOptions;
150 char *szAfsUsernameMap;
151 int iAfsTokenLifetime;
152 char *szLogNtTokenCommand;
158 char **szWINSservers;
160 char *szRemoteAnnounce;
161 char *szRemoteBrowseSync;
162 char *szSocketAddress;
163 char *szNISHomeMapName;
164 char *szAnnounceVersion; /* This is initialised in init_globals */
167 char **szNetbiosAliases;
168 char *szNetbiosScope;
169 char *szNameResolveOrder;
171 char *szAddUserScript;
172 char *szRenameUserScript;
173 char *szDelUserScript;
174 char *szAddGroupScript;
175 char *szDelGroupScript;
176 char *szAddUserToGroupScript;
177 char *szDelUserFromGroupScript;
178 char *szSetPrimaryGroupScript;
179 char *szAddMachineScript;
180 char *szShutdownScript;
181 char *szAbortShutdownScript;
182 char *szUsernameMapScript;
183 char *szCheckPasswordScript;
190 bool bPassdbExpandExplicit;
191 int AlgorithmicRidBase;
192 char *szTemplateHomedir;
193 char *szTemplateShell;
194 char *szWinbindSeparator;
195 bool bWinbindEnumUsers;
196 bool bWinbindEnumGroups;
197 bool bWinbindUseDefaultDomain;
198 bool bWinbindTrustedDomainsOnly;
199 bool bWinbindNestedGroups;
200 int winbind_expand_groups;
201 bool bWinbindRefreshTickets;
202 bool bWinbindOfflineLogon;
203 bool bWinbindNormalizeNames;
204 bool bWinbindRpcOnly;
205 bool bCreateKrb5Conf;
206 char *szIdmapBackend;
207 char *szIdmapAllocBackend;
208 char *szAddShareCommand;
209 char *szChangeShareCommand;
210 char *szDeleteShareCommand;
212 char *szGuestaccount;
213 char *szManglingMethod;
214 char **szServicesList;
215 char *szUsersharePath;
216 char *szUsershareTemplateShare;
217 char **szUsersharePrefixAllowList;
218 char **szUsersharePrefixDenyList;
225 int open_files_db_hash_size;
234 bool paranoid_server_security;
237 int iMaxSmbdProcesses;
238 bool bDisableSpoolss;
241 bool enhanced_browsing;
247 int announce_as; /* This is initialised in init_globals */
248 int machine_password_timeout;
250 int oplock_break_wait_time;
251 int winbind_cache_time;
252 int winbind_reconnect_delay;
253 int winbind_max_idle_children;
254 char **szWinbindNssInfo;
256 char *szLdapMachineSuffix;
257 char *szLdapUserSuffix;
258 char *szLdapIdmapSuffix;
259 char *szLdapGroupSuffix;
263 int ldap_follow_referral;
266 int ldap_debug_level;
267 int ldap_debug_threshold;
271 char *szIPrintServer;
273 char **szClusterAddresses;
276 int ldap_passwd_sync;
277 int ldap_replication_sleep;
278 int ldap_timeout; /* This is initialised in init_globals */
279 int ldap_connection_timeout;
282 bool bMsAddPrinterWizard;
287 int iPreferredMaster;
290 char **szInitLogonDelayedHosts;
292 bool bEncryptPasswords;
297 bool bObeyPamRestrictions;
299 int PrintcapCacheTime;
300 bool bLargeReadwrite;
307 bool bBindInterfacesOnly;
308 bool bPamPasswordChange;
309 bool bUnixPasswdSync;
310 bool bPasswdChatDebug;
311 int iPasswdChatTimeout;
315 bool bNTStatusSupport;
317 int iMaxStatCacheSize;
319 bool bAllowTrustedDomains;
323 bool bClientLanManAuth;
324 bool bClientNTLMv2Auth;
325 bool bClientPlaintextAuth;
326 bool bClientUseSpnego;
327 bool bDebugPrefixTimestamp;
328 bool bDebugHiresTimestamp;
332 bool bEnableCoreFiles;
335 bool bHostnameLookups;
336 bool bUnixExtensions;
337 bool bDisableNetbios;
338 char * szDedicatedKeytabFile;
340 bool bDeferSharingViolations;
341 bool bEnablePrivileges;
343 bool bUsershareOwnerOnly;
344 bool bUsershareAllowGuests;
345 bool bRegistryShares;
346 int restrict_anonymous;
347 int name_cache_timeout;
350 int client_ldap_sasl_wrapping;
351 int iUsershareMaxShares;
353 int iIdmapNegativeCacheTime;
357 struct param_opt_struct *param_opt;
358 int cups_connection_timeout;
359 char *szSMBPerfcountModule;
360 bool bMapUntrustedToDomain;
363 static struct global Globals;
366 * This structure describes a single service.
372 struct timespec usershare_last_mod;
376 char **szInvalidUsers;
384 char *szRootPostExec;
386 char *szPrintcommand;
389 char *szLppausecommand;
390 char *szLpresumecommand;
391 char *szQueuepausecommand;
392 char *szQueueresumecommand;
394 char *szPrintjobUsername;
402 char *szVetoOplockFiles;
408 char **printer_admin;
413 char *szAioWriteBehind;
417 int iMaxReportedPrintJobs;
420 int iCreate_force_mode;
422 int iSecurity_force_mode;
425 int iDir_Security_mask;
426 int iDir_Security_force_mode;
430 int iOplockContentionLimit;
435 bool bRootpreexecClose;
438 bool bShortCasePreserve;
440 bool bHideSpecialFiles;
441 bool bHideUnReadable;
442 bool bHideUnWriteableFiles;
444 bool bAccessBasedShareEnum;
449 bool bAdministrative_share;
455 bool bStoreDosAttributes;
468 bool bStrictAllocate;
471 struct bitmap *copymap;
472 bool bDeleteReadonly;
474 bool bDeleteVetoFiles;
477 bool bDosFiletimeResolution;
478 bool bFakeDirCreateTimes;
484 bool bUseClientDriver;
485 bool bDefaultDevmode;
486 bool bForcePrintername;
488 bool bForceUnknownAclUser;
491 bool bMap_acl_inherit;
494 bool bAclCheckPermissions;
495 bool bAclMapFullControl;
496 bool bAclGroupControl;
498 bool bKernelChangeNotify;
499 int iallocation_roundup_size;
503 int iDirectoryNameCacheSize;
505 struct param_opt_struct *param_opt;
507 char dummy[3]; /* for alignment */
511 /* This is a default service used to prime a services structure */
512 static struct service sDefault = {
514 False, /* not autoloaded */
515 0, /* not a usershare */
516 {0, }, /* No last mod time */
517 NULL, /* szService */
519 NULL, /* szUsername */
520 NULL, /* szInvalidUsers */
521 NULL, /* szValidUsers */
522 NULL, /* szAdminUsers */
524 NULL, /* szInclude */
525 NULL, /* szPreExec */
526 NULL, /* szPostExec */
527 NULL, /* szRootPreExec */
528 NULL, /* szRootPostExec */
529 NULL, /* szCupsOptions */
530 NULL, /* szPrintcommand */
531 NULL, /* szLpqcommand */
532 NULL, /* szLprmcommand */
533 NULL, /* szLppausecommand */
534 NULL, /* szLpresumecommand */
535 NULL, /* szQueuepausecommand */
536 NULL, /* szQueueresumecommand */
537 NULL, /* szPrintername */
538 NULL, /* szPrintjobUsername */
539 NULL, /* szDontdescend */
540 NULL, /* szHostsallow */
541 NULL, /* szHostsdeny */
542 NULL, /* szMagicScript */
543 NULL, /* szMagicOutput */
544 NULL, /* szVetoFiles */
545 NULL, /* szHideFiles */
546 NULL, /* szVetoOplockFiles */
548 NULL, /* force user */
549 NULL, /* force group */
551 NULL, /* writelist */
552 NULL, /* printer admin */
555 NULL, /* vfs objects */
556 NULL, /* szMSDfsProxy */
557 NULL, /* szAioWriteBehind */
559 0, /* iMinPrintSpace */
560 1000, /* iMaxPrintJobs */
561 0, /* iMaxReportedPrintJobs */
562 0, /* iWriteCacheSize */
563 0744, /* iCreate_mask */
564 0000, /* iCreate_force_mode */
565 0777, /* iSecurity_mask */
566 0, /* iSecurity_force_mode */
567 0755, /* iDir_mask */
568 0000, /* iDir_force_mode */
569 0777, /* iDir_Security_mask */
570 0, /* iDir_Security_force_mode */
571 0, /* iMaxConnections */
572 CASE_LOWER, /* iDefaultCase */
573 DEFAULT_PRINTING, /* iPrinting */
574 2, /* iOplockContentionLimit */
576 1024, /* iBlock_size */
577 0, /* iDfreeCacheTime */
578 False, /* bPreexecClose */
579 False, /* bRootpreexecClose */
580 Auto, /* case sensitive */
581 True, /* case preserve */
582 True, /* short case preserve */
583 True, /* bHideDotFiles */
584 False, /* bHideSpecialFiles */
585 False, /* bHideUnReadable */
586 False, /* bHideUnWriteableFiles */
587 True, /* bBrowseable */
588 False, /* bAccessBasedShareEnum */
589 True, /* bAvailable */
590 True, /* bRead_only */
591 True, /* bNo_set_dir */
592 False, /* bGuest_only */
593 False, /* bAdministrative_share */
594 False, /* bGuest_ok */
595 False, /* bPrint_ok */
596 False, /* bMap_system */
597 False, /* bMap_hidden */
598 True, /* bMap_archive */
599 False, /* bStoreDosAttributes */
600 False, /* bDmapiSupport */
602 Auto, /* iStrictLocking */
603 True, /* bPosixLocking */
604 True, /* bShareModes */
606 True, /* bLevel2OpLocks */
607 False, /* bOnlyUser */
608 True, /* bMangledNames */
609 True, /* bWidelinks */
610 True, /* bSymlinks */
611 False, /* bSyncAlways */
612 False, /* bStrictAllocate */
613 False, /* bStrictSync */
614 '~', /* magic char */
616 False, /* bDeleteReadonly */
617 False, /* bFakeOplocks */
618 False, /* bDeleteVetoFiles */
619 False, /* bDosFilemode */
620 True, /* bDosFiletimes */
621 False, /* bDosFiletimeResolution */
622 False, /* bFakeDirCreateTimes */
623 True, /* bBlockingLocks */
624 False, /* bInheritPerms */
625 False, /* bInheritACLS */
626 False, /* bInheritOwner */
627 False, /* bMSDfsRoot */
628 False, /* bUseClientDriver */
629 True, /* bDefaultDevmode */
630 False, /* bForcePrintername */
631 True, /* bNTAclSupport */
632 False, /* bForceUnknownAclUser */
633 False, /* bUseSendfile */
634 False, /* bProfileAcls */
635 False, /* bMap_acl_inherit */
636 False, /* bAfs_Share */
637 False, /* bEASupport */
638 True, /* bAclCheckPermissions */
639 True, /* bAclMapFullControl */
640 False, /* bAclGroupControl */
641 True, /* bChangeNotify */
642 True, /* bKernelChangeNotify */
643 SMB_ROUNDUP_ALLOCATION_SIZE, /* iallocation_roundup_size */
644 0, /* iAioReadSize */
645 0, /* iAioWriteSize */
646 MAP_READONLY_YES, /* iMap_readonly */
647 #ifdef BROKEN_DIRECTORY_HANDLING
648 0, /* iDirectoryNameCacheSize */
650 100, /* iDirectoryNameCacheSize */
652 Auto, /* ismb_encrypt */
653 NULL, /* Parametric options */
658 /* local variables */
659 static struct service **ServicePtrs = NULL;
660 static int iNumServices = 0;
661 static int iServiceIndex = 0;
662 static struct db_context *ServiceHash;
663 static int *invalid_services = NULL;
664 static int num_invalid_services = 0;
665 static bool bInGlobalSection = True;
666 static bool bGlobalOnly = False;
667 static int server_role;
668 static int default_server_announce;
670 #define NUMPARAMETERS (sizeof(parm_table) / sizeof(struct parm_struct))
672 /* prototypes for the special type handlers */
673 static bool handle_include( int snum, const char *pszParmValue, char **ptr);
674 static bool handle_copy( int snum, const char *pszParmValue, char **ptr);
675 static bool handle_netbios_name( int snum, const char *pszParmValue, char **ptr);
676 static bool handle_idmap_uid( int snum, const char *pszParmValue, char **ptr);
677 static bool handle_idmap_gid( int snum, const char *pszParmValue, char **ptr);
678 static bool handle_debug_list( int snum, const char *pszParmValue, char **ptr );
679 static bool handle_workgroup( int snum, const char *pszParmValue, char **ptr );
680 static bool handle_netbios_aliases( int snum, const char *pszParmValue, char **ptr );
681 static bool handle_netbios_scope( int snum, const char *pszParmValue, char **ptr );
682 static bool handle_charset( int snum, const char *pszParmValue, char **ptr );
683 static bool handle_printing( int snum, const char *pszParmValue, char **ptr);
684 static bool handle_ldap_debug_level( int snum, const char *pszParmValue, char **ptr);
686 static void set_server_role(void);
687 static void set_default_server_announce_type(void);
688 static void set_allowed_client_auth(void);
690 static void *lp_local_ptr(struct service *service, void *ptr);
692 static void add_to_file_list(const char *fname, const char *subfname);
694 static const struct enum_list enum_protocol[] = {
695 {PROTOCOL_SMB2, "SMB2"},
696 {PROTOCOL_NT1, "NT1"},
697 {PROTOCOL_LANMAN2, "LANMAN2"},
698 {PROTOCOL_LANMAN1, "LANMAN1"},
699 {PROTOCOL_CORE, "CORE"},
700 {PROTOCOL_COREPLUS, "COREPLUS"},
701 {PROTOCOL_COREPLUS, "CORE+"},
705 static const struct enum_list enum_security[] = {
706 {SEC_SHARE, "SHARE"},
708 {SEC_SERVER, "SERVER"},
709 {SEC_DOMAIN, "DOMAIN"},
716 static const struct enum_list enum_printing[] = {
717 {PRINT_SYSV, "sysv"},
719 {PRINT_HPUX, "hpux"},
723 {PRINT_LPRNG, "lprng"},
724 {PRINT_CUPS, "cups"},
725 {PRINT_IPRINT, "iprint"},
727 {PRINT_LPROS2, "os2"},
729 {PRINT_TEST, "test"},
731 #endif /* DEVELOPER */
735 static const struct enum_list enum_ldap_sasl_wrapping[] = {
737 {ADS_AUTH_SASL_SIGN, "sign"},
738 {ADS_AUTH_SASL_SEAL, "seal"},
742 static const struct enum_list enum_ldap_ssl[] = {
743 {LDAP_SSL_OFF, "no"},
744 {LDAP_SSL_OFF, "off"},
745 {LDAP_SSL_START_TLS, "start tls"},
746 {LDAP_SSL_START_TLS, "start_tls"},
750 static const struct enum_list enum_ldap_deref[] = {
751 {LDAP_DEREFERENCE_NEVER, "never"},
752 {LDAP_DEREFERENCE_SEARCHING, "searching"},
753 {LDAP_DEREFERENCE_FINDING, "finding"},
754 {LDAP_DEREFERENCE_ALWAYS, "always"},
758 static const struct enum_list enum_ldap_passwd_sync[] = {
759 {LDAP_PASSWD_SYNC_OFF, "no"},
760 {LDAP_PASSWD_SYNC_OFF, "off"},
761 {LDAP_PASSWD_SYNC_ON, "yes"},
762 {LDAP_PASSWD_SYNC_ON, "on"},
763 {LDAP_PASSWD_SYNC_ONLY, "only"},
767 /* Types of machine we can announce as. */
768 #define ANNOUNCE_AS_NT_SERVER 1
769 #define ANNOUNCE_AS_WIN95 2
770 #define ANNOUNCE_AS_WFW 3
771 #define ANNOUNCE_AS_NT_WORKSTATION 4
773 static const struct enum_list enum_announce_as[] = {
774 {ANNOUNCE_AS_NT_SERVER, "NT"},
775 {ANNOUNCE_AS_NT_SERVER, "NT Server"},
776 {ANNOUNCE_AS_NT_WORKSTATION, "NT Workstation"},
777 {ANNOUNCE_AS_WIN95, "win95"},
778 {ANNOUNCE_AS_WFW, "WfW"},
782 static const struct enum_list enum_map_readonly[] = {
783 {MAP_READONLY_NO, "no"},
784 {MAP_READONLY_NO, "false"},
785 {MAP_READONLY_NO, "0"},
786 {MAP_READONLY_YES, "yes"},
787 {MAP_READONLY_YES, "true"},
788 {MAP_READONLY_YES, "1"},
789 {MAP_READONLY_PERMISSIONS, "permissions"},
790 {MAP_READONLY_PERMISSIONS, "perms"},
794 static const struct enum_list enum_case[] = {
795 {CASE_LOWER, "lower"},
796 {CASE_UPPER, "upper"},
802 static const struct enum_list enum_bool_auto[] = {
813 /* Client-side offline caching policy types */
814 #define CSC_POLICY_MANUAL 0
815 #define CSC_POLICY_DOCUMENTS 1
816 #define CSC_POLICY_PROGRAMS 2
817 #define CSC_POLICY_DISABLE 3
819 static const struct enum_list enum_csc_policy[] = {
820 {CSC_POLICY_MANUAL, "manual"},
821 {CSC_POLICY_DOCUMENTS, "documents"},
822 {CSC_POLICY_PROGRAMS, "programs"},
823 {CSC_POLICY_DISABLE, "disable"},
827 /* SMB signing types. */
828 static const struct enum_list enum_smb_signing_vals[] = {
840 {Required, "required"},
841 {Required, "mandatory"},
843 {Required, "forced"},
844 {Required, "enforced"},
848 /* ACL compatibility options. */
849 static const struct enum_list enum_acl_compat_vals[] = {
850 { ACL_COMPAT_AUTO, "auto" },
851 { ACL_COMPAT_WINNT, "winnt" },
852 { ACL_COMPAT_WIN2K, "win2k" },
857 Do you want session setups at user level security with a invalid
858 password to be rejected or allowed in as guest? WinNT rejects them
859 but it can be a pain as it means "net view" needs to use a password
861 You have 3 choices in the setting of map_to_guest:
863 "Never" means session setups with an invalid password
864 are rejected. This is the default.
866 "Bad User" means session setups with an invalid password
867 are rejected, unless the username does not exist, in which case it
868 is treated as a guest login
870 "Bad Password" means session setups with an invalid password
871 are treated as a guest login
873 Note that map_to_guest only has an effect in user or server
877 static const struct enum_list enum_map_to_guest[] = {
878 {NEVER_MAP_TO_GUEST, "Never"},
879 {MAP_TO_GUEST_ON_BAD_USER, "Bad User"},
880 {MAP_TO_GUEST_ON_BAD_PASSWORD, "Bad Password"},
881 {MAP_TO_GUEST_ON_BAD_UID, "Bad Uid"},
885 /* Config backend options */
887 static const struct enum_list enum_config_backend[] = {
888 {CONFIG_BACKEND_FILE, "file"},
889 {CONFIG_BACKEND_REGISTRY, "registry"},
893 /* ADS kerberos ticket verification options */
895 static const struct enum_list enum_kerberos_method[] = {
896 {KERBEROS_VERIFY_SECRETS, "default"},
897 {KERBEROS_VERIFY_SECRETS, "secrets only"},
898 {KERBEROS_VERIFY_SYSTEM_KEYTAB, "system keytab"},
899 {KERBEROS_VERIFY_DEDICATED_KEYTAB, "dedicated keytab"},
900 {KERBEROS_VERIFY_SECRETS_AND_KEYTAB, "secrets and keytab"},
904 /* Note: We do not initialise the defaults union - it is not allowed in ANSI C
906 * The FLAG_HIDE is explicit. Parameters set this way do NOT appear in any edit
907 * screen in SWAT. This is used to exclude parameters as well as to squash all
908 * parameters that have been duplicated by pseudonyms.
910 * NOTE: To display a parameter in BASIC view set FLAG_BASIC
911 * Any parameter that does NOT have FLAG_ADVANCED will not disply at all
912 * Set FLAG_SHARE and FLAG_PRINT to specifically display parameters in
915 * NOTE2: Handling of duplicated (synonym) parameters:
916 * Only the first occurance of a parameter should be enabled by FLAG_BASIC
917 * and/or FLAG_ADVANCED. All duplicates following the first mention should be
918 * set to FLAG_HIDE. ie: Make you must place the parameter that has the preferred
919 * name first, and all synonyms must follow it with the FLAG_HIDE attribute.
922 static struct parm_struct parm_table[] = {
923 {N_("Base Options"), P_SEP, P_SEPARATOR},
926 .label = "dos charset",
929 .ptr = &Globals.dos_charset,
930 .special = handle_charset,
932 .flags = FLAG_ADVANCED
935 .label = "unix charset",
938 .ptr = &Globals.unix_charset,
939 .special = handle_charset,
941 .flags = FLAG_ADVANCED
944 .label = "display charset",
947 .ptr = &Globals.display_charset,
948 .special = handle_charset,
950 .flags = FLAG_ADVANCED
956 .ptr = &sDefault.comment,
959 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT
965 .ptr = &sDefault.szPath,
968 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
971 .label = "directory",
974 .ptr = &sDefault.szPath,
980 .label = "workgroup",
983 .ptr = &Globals.szWorkgroup,
984 .special = handle_workgroup,
986 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
993 .ptr = &Globals.szRealm,
996 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
1000 .label = "netbios name",
1002 .p_class = P_GLOBAL,
1003 .ptr = &Globals.szNetbiosName,
1004 .special = handle_netbios_name,
1006 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
1009 .label = "netbios aliases",
1011 .p_class = P_GLOBAL,
1012 .ptr = &Globals.szNetbiosAliases,
1013 .special = handle_netbios_aliases,
1015 .flags = FLAG_ADVANCED,
1018 .label = "netbios scope",
1020 .p_class = P_GLOBAL,
1021 .ptr = &Globals.szNetbiosScope,
1022 .special = handle_netbios_scope,
1024 .flags = FLAG_ADVANCED,
1027 .label = "server string",
1029 .p_class = P_GLOBAL,
1030 .ptr = &Globals.szServerString,
1033 .flags = FLAG_BASIC | FLAG_ADVANCED,
1036 .label = "interfaces",
1038 .p_class = P_GLOBAL,
1039 .ptr = &Globals.szInterfaces,
1042 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
1045 .label = "bind interfaces only",
1047 .p_class = P_GLOBAL,
1048 .ptr = &Globals.bBindInterfacesOnly,
1051 .flags = FLAG_ADVANCED | FLAG_WIZARD,
1054 .label = "config backend",
1056 .p_class = P_GLOBAL,
1057 .ptr = &Globals.ConfigBackend,
1059 .enum_list = enum_config_backend,
1060 .flags = FLAG_HIDE|FLAG_ADVANCED|FLAG_META,
1063 {N_("Security Options"), P_SEP, P_SEPARATOR},
1066 .label = "security",
1068 .p_class = P_GLOBAL,
1069 .ptr = &Globals.security,
1071 .enum_list = enum_security,
1072 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
1075 .label = "auth methods",
1077 .p_class = P_GLOBAL,
1078 .ptr = &Globals.AuthMethods,
1081 .flags = FLAG_ADVANCED,
1084 .label = "encrypt passwords",
1086 .p_class = P_GLOBAL,
1087 .ptr = &Globals.bEncryptPasswords,
1090 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
1093 .label = "update encrypted",
1095 .p_class = P_GLOBAL,
1096 .ptr = &Globals.bUpdateEncrypt,
1099 .flags = FLAG_ADVANCED,
1102 .label = "client schannel",
1104 .p_class = P_GLOBAL,
1105 .ptr = &Globals.clientSchannel,
1107 .enum_list = enum_bool_auto,
1108 .flags = FLAG_BASIC | FLAG_ADVANCED,
1111 .label = "server schannel",
1113 .p_class = P_GLOBAL,
1114 .ptr = &Globals.serverSchannel,
1116 .enum_list = enum_bool_auto,
1117 .flags = FLAG_BASIC | FLAG_ADVANCED,
1120 .label = "allow trusted domains",
1122 .p_class = P_GLOBAL,
1123 .ptr = &Globals.bAllowTrustedDomains,
1126 .flags = FLAG_ADVANCED,
1129 .label = "map to guest",
1131 .p_class = P_GLOBAL,
1132 .ptr = &Globals.map_to_guest,
1134 .enum_list = enum_map_to_guest,
1135 .flags = FLAG_ADVANCED,
1138 .label = "null passwords",
1140 .p_class = P_GLOBAL,
1141 .ptr = &Globals.bNullPasswords,
1144 .flags = FLAG_ADVANCED,
1147 .label = "obey pam restrictions",
1149 .p_class = P_GLOBAL,
1150 .ptr = &Globals.bObeyPamRestrictions,
1153 .flags = FLAG_ADVANCED,
1156 .label = "password server",
1158 .p_class = P_GLOBAL,
1159 .ptr = &Globals.szPasswordServer,
1162 .flags = FLAG_ADVANCED | FLAG_WIZARD,
1165 .label = "smb passwd file",
1167 .p_class = P_GLOBAL,
1168 .ptr = &Globals.szSMBPasswdFile,
1171 .flags = FLAG_ADVANCED,
1174 .label = "private dir",
1176 .p_class = P_GLOBAL,
1177 .ptr = &Globals.szPrivateDir,
1180 .flags = FLAG_ADVANCED,
1183 .label = "passdb backend",
1185 .p_class = P_GLOBAL,
1186 .ptr = &Globals.szPassdbBackend,
1189 .flags = FLAG_ADVANCED | FLAG_WIZARD,
1192 .label = "algorithmic rid base",
1194 .p_class = P_GLOBAL,
1195 .ptr = &Globals.AlgorithmicRidBase,
1198 .flags = FLAG_ADVANCED,
1201 .label = "root directory",
1203 .p_class = P_GLOBAL,
1204 .ptr = &Globals.szRootdir,
1207 .flags = FLAG_ADVANCED,
1210 .label = "root dir",
1212 .p_class = P_GLOBAL,
1213 .ptr = &Globals.szRootdir,
1221 .p_class = P_GLOBAL,
1222 .ptr = &Globals.szRootdir,
1228 .label = "guest account",
1230 .p_class = P_GLOBAL,
1231 .ptr = &Globals.szGuestaccount,
1234 .flags = FLAG_BASIC | FLAG_ADVANCED,
1237 .label = "enable privileges",
1239 .p_class = P_GLOBAL,
1240 .ptr = &Globals.bEnablePrivileges,
1243 .flags = FLAG_ADVANCED,
1247 .label = "pam password change",
1249 .p_class = P_GLOBAL,
1250 .ptr = &Globals.bPamPasswordChange,
1253 .flags = FLAG_ADVANCED,
1256 .label = "passwd program",
1258 .p_class = P_GLOBAL,
1259 .ptr = &Globals.szPasswdProgram,
1262 .flags = FLAG_ADVANCED,
1265 .label = "passwd chat",
1267 .p_class = P_GLOBAL,
1268 .ptr = &Globals.szPasswdChat,
1271 .flags = FLAG_ADVANCED,
1274 .label = "passwd chat debug",
1276 .p_class = P_GLOBAL,
1277 .ptr = &Globals.bPasswdChatDebug,
1280 .flags = FLAG_ADVANCED,
1283 .label = "passwd chat timeout",
1285 .p_class = P_GLOBAL,
1286 .ptr = &Globals.iPasswdChatTimeout,
1289 .flags = FLAG_ADVANCED,
1292 .label = "check password script",
1294 .p_class = P_GLOBAL,
1295 .ptr = &Globals.szCheckPasswordScript,
1298 .flags = FLAG_ADVANCED,
1301 .label = "username map",
1303 .p_class = P_GLOBAL,
1304 .ptr = &Globals.szUsernameMap,
1307 .flags = FLAG_ADVANCED,
1310 .label = "password level",
1312 .p_class = P_GLOBAL,
1313 .ptr = &Globals.pwordlevel,
1316 .flags = FLAG_ADVANCED,
1319 .label = "username level",
1321 .p_class = P_GLOBAL,
1322 .ptr = &Globals.unamelevel,
1325 .flags = FLAG_ADVANCED,
1328 .label = "unix password sync",
1330 .p_class = P_GLOBAL,
1331 .ptr = &Globals.bUnixPasswdSync,
1334 .flags = FLAG_ADVANCED,
1337 .label = "restrict anonymous",
1339 .p_class = P_GLOBAL,
1340 .ptr = &Globals.restrict_anonymous,
1343 .flags = FLAG_ADVANCED,
1346 .label = "lanman auth",
1348 .p_class = P_GLOBAL,
1349 .ptr = &Globals.bLanmanAuth,
1352 .flags = FLAG_ADVANCED,
1355 .label = "ntlm auth",
1357 .p_class = P_GLOBAL,
1358 .ptr = &Globals.bNTLMAuth,
1361 .flags = FLAG_ADVANCED,
1364 .label = "client NTLMv2 auth",
1366 .p_class = P_GLOBAL,
1367 .ptr = &Globals.bClientNTLMv2Auth,
1370 .flags = FLAG_ADVANCED,
1373 .label = "client lanman auth",
1375 .p_class = P_GLOBAL,
1376 .ptr = &Globals.bClientLanManAuth,
1379 .flags = FLAG_ADVANCED,
1382 .label = "client plaintext auth",
1384 .p_class = P_GLOBAL,
1385 .ptr = &Globals.bClientPlaintextAuth,
1388 .flags = FLAG_ADVANCED,
1391 .label = "username",
1394 .ptr = &sDefault.szUsername,
1397 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1403 .ptr = &sDefault.szUsername,
1412 .ptr = &sDefault.szUsername,
1418 .label = "invalid users",
1421 .ptr = &sDefault.szInvalidUsers,
1424 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1427 .label = "valid users",
1430 .ptr = &sDefault.szValidUsers,
1433 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1436 .label = "admin users",
1439 .ptr = &sDefault.szAdminUsers,
1442 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1445 .label = "read list",
1448 .ptr = &sDefault.readlist,
1451 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1454 .label = "write list",
1457 .ptr = &sDefault.writelist,
1460 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1463 .label = "printer admin",
1466 .ptr = &sDefault.printer_admin,
1469 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_PRINT | FLAG_DEPRECATED,
1472 .label = "force user",
1475 .ptr = &sDefault.force_user,
1478 .flags = FLAG_ADVANCED | FLAG_SHARE,
1481 .label = "force group",
1484 .ptr = &sDefault.force_group,
1487 .flags = FLAG_ADVANCED | FLAG_SHARE,
1493 .ptr = &sDefault.force_group,
1496 .flags = FLAG_ADVANCED,
1499 .label = "read only",
1502 .ptr = &sDefault.bRead_only,
1505 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE,
1508 .label = "write ok",
1511 .ptr = &sDefault.bRead_only,
1517 .label = "writeable",
1520 .ptr = &sDefault.bRead_only,
1526 .label = "writable",
1529 .ptr = &sDefault.bRead_only,
1535 .label = "acl check permissions",
1538 .ptr = &sDefault.bAclCheckPermissions,
1541 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1544 .label = "acl group control",
1547 .ptr = &sDefault.bAclGroupControl,
1550 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1553 .label = "acl map full control",
1556 .ptr = &sDefault.bAclMapFullControl,
1559 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1562 .label = "create mask",
1565 .ptr = &sDefault.iCreate_mask,
1568 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1571 .label = "create mode",
1574 .ptr = &sDefault.iCreate_mask,
1580 .label = "force create mode",
1583 .ptr = &sDefault.iCreate_force_mode,
1586 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1589 .label = "security mask",
1592 .ptr = &sDefault.iSecurity_mask,
1595 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1598 .label = "force security mode",
1601 .ptr = &sDefault.iSecurity_force_mode,
1604 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1607 .label = "directory mask",
1610 .ptr = &sDefault.iDir_mask,
1613 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1616 .label = "directory mode",
1619 .ptr = &sDefault.iDir_mask,
1622 .flags = FLAG_ADVANCED | FLAG_GLOBAL,
1625 .label = "force directory mode",
1628 .ptr = &sDefault.iDir_force_mode,
1631 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1634 .label = "directory security mask",
1637 .ptr = &sDefault.iDir_Security_mask,
1640 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1643 .label = "force directory security mode",
1646 .ptr = &sDefault.iDir_Security_force_mode,
1649 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1652 .label = "force unknown acl user",
1655 .ptr = &sDefault.bForceUnknownAclUser,
1658 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1661 .label = "inherit permissions",
1664 .ptr = &sDefault.bInheritPerms,
1667 .flags = FLAG_ADVANCED | FLAG_SHARE,
1670 .label = "inherit acls",
1673 .ptr = &sDefault.bInheritACLS,
1676 .flags = FLAG_ADVANCED | FLAG_SHARE,
1679 .label = "inherit owner",
1682 .ptr = &sDefault.bInheritOwner,
1685 .flags = FLAG_ADVANCED | FLAG_SHARE,
1688 .label = "guest only",
1691 .ptr = &sDefault.bGuest_only,
1694 .flags = FLAG_ADVANCED | FLAG_SHARE,
1697 .label = "only guest",
1700 .ptr = &sDefault.bGuest_only,
1706 .label = "administrative share",
1709 .ptr = &sDefault.bAdministrative_share,
1712 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
1716 .label = "guest ok",
1719 .ptr = &sDefault.bGuest_ok,
1722 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
1728 .ptr = &sDefault.bGuest_ok,
1734 .label = "only user",
1737 .ptr = &sDefault.bOnlyUser,
1740 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_DEPRECATED,
1743 .label = "hosts allow",
1746 .ptr = &sDefault.szHostsallow,
1749 .flags = FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
1752 .label = "allow hosts",
1755 .ptr = &sDefault.szHostsallow,
1761 .label = "hosts deny",
1764 .ptr = &sDefault.szHostsdeny,
1767 .flags = FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
1770 .label = "deny hosts",
1773 .ptr = &sDefault.szHostsdeny,
1779 .label = "preload modules",
1781 .p_class = P_GLOBAL,
1782 .ptr = &Globals.szPreloadModules,
1785 .flags = FLAG_ADVANCED | FLAG_GLOBAL,
1788 .label = "dedicated keytab file",
1790 .p_class = P_GLOBAL,
1791 .ptr = &Globals.szDedicatedKeytabFile,
1794 .flags = FLAG_ADVANCED,
1797 .label = "kerberos method",
1799 .p_class = P_GLOBAL,
1800 .ptr = &Globals.iKerberosMethod,
1802 .enum_list = enum_kerberos_method,
1803 .flags = FLAG_ADVANCED,
1806 .label = "map untrusted to domain",
1808 .p_class = P_GLOBAL,
1809 .ptr = &Globals.bMapUntrustedToDomain,
1812 .flags = FLAG_ADVANCED | FLAG_GLOBAL,
1816 {N_("Logging Options"), P_SEP, P_SEPARATOR},
1819 .label = "log level",
1821 .p_class = P_GLOBAL,
1822 .ptr = &Globals.szLogLevel,
1823 .special = handle_debug_list,
1825 .flags = FLAG_ADVANCED,
1828 .label = "debuglevel",
1830 .p_class = P_GLOBAL,
1831 .ptr = &Globals.szLogLevel,
1832 .special = handle_debug_list,
1839 .p_class = P_GLOBAL,
1840 .ptr = &Globals.syslog,
1843 .flags = FLAG_ADVANCED,
1846 .label = "syslog only",
1848 .p_class = P_GLOBAL,
1849 .ptr = &Globals.bSyslogOnly,
1852 .flags = FLAG_ADVANCED,
1855 .label = "log file",
1857 .p_class = P_GLOBAL,
1858 .ptr = &Globals.szLogFile,
1861 .flags = FLAG_ADVANCED,
1864 .label = "max log size",
1866 .p_class = P_GLOBAL,
1867 .ptr = &Globals.max_log_size,
1870 .flags = FLAG_ADVANCED,
1873 .label = "debug timestamp",
1875 .p_class = P_GLOBAL,
1876 .ptr = &Globals.bTimestampLogs,
1879 .flags = FLAG_ADVANCED,
1882 .label = "timestamp logs",
1884 .p_class = P_GLOBAL,
1885 .ptr = &Globals.bTimestampLogs,
1888 .flags = FLAG_ADVANCED,
1891 .label = "debug prefix timestamp",
1893 .p_class = P_GLOBAL,
1894 .ptr = &Globals.bDebugPrefixTimestamp,
1897 .flags = FLAG_ADVANCED,
1900 .label = "debug hires timestamp",
1902 .p_class = P_GLOBAL,
1903 .ptr = &Globals.bDebugHiresTimestamp,
1906 .flags = FLAG_ADVANCED,
1909 .label = "debug pid",
1911 .p_class = P_GLOBAL,
1912 .ptr = &Globals.bDebugPid,
1915 .flags = FLAG_ADVANCED,
1918 .label = "debug uid",
1920 .p_class = P_GLOBAL,
1921 .ptr = &Globals.bDebugUid,
1924 .flags = FLAG_ADVANCED,
1927 .label = "debug class",
1929 .p_class = P_GLOBAL,
1930 .ptr = &Globals.bDebugClass,
1933 .flags = FLAG_ADVANCED,
1936 .label = "enable core files",
1938 .p_class = P_GLOBAL,
1939 .ptr = &Globals.bEnableCoreFiles,
1942 .flags = FLAG_ADVANCED,
1945 {N_("Protocol Options"), P_SEP, P_SEPARATOR},
1948 .label = "allocation roundup size",
1951 .ptr = &sDefault.iallocation_roundup_size,
1954 .flags = FLAG_ADVANCED,
1957 .label = "aio read size",
1960 .ptr = &sDefault.iAioReadSize,
1963 .flags = FLAG_ADVANCED,
1966 .label = "aio write size",
1969 .ptr = &sDefault.iAioWriteSize,
1972 .flags = FLAG_ADVANCED,
1975 .label = "aio write behind",
1978 .ptr = &sDefault.szAioWriteBehind,
1981 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
1984 .label = "smb ports",
1986 .p_class = P_GLOBAL,
1987 .ptr = &Globals.smb_ports,
1990 .flags = FLAG_ADVANCED,
1993 .label = "large readwrite",
1995 .p_class = P_GLOBAL,
1996 .ptr = &Globals.bLargeReadwrite,
1999 .flags = FLAG_ADVANCED,
2002 .label = "max protocol",
2004 .p_class = P_GLOBAL,
2005 .ptr = &Globals.maxprotocol,
2007 .enum_list = enum_protocol,
2008 .flags = FLAG_ADVANCED,
2011 .label = "protocol",
2013 .p_class = P_GLOBAL,
2014 .ptr = &Globals.maxprotocol,
2016 .enum_list = enum_protocol,
2017 .flags = FLAG_ADVANCED,
2020 .label = "min protocol",
2022 .p_class = P_GLOBAL,
2023 .ptr = &Globals.minprotocol,
2025 .enum_list = enum_protocol,
2026 .flags = FLAG_ADVANCED,
2029 .label = "min receivefile size",
2031 .p_class = P_GLOBAL,
2032 .ptr = &Globals.iminreceivefile,
2035 .flags = FLAG_ADVANCED,
2038 .label = "read raw",
2040 .p_class = P_GLOBAL,
2041 .ptr = &Globals.bReadRaw,
2044 .flags = FLAG_ADVANCED,
2047 .label = "write raw",
2049 .p_class = P_GLOBAL,
2050 .ptr = &Globals.bWriteRaw,
2053 .flags = FLAG_ADVANCED,
2056 .label = "disable netbios",
2058 .p_class = P_GLOBAL,
2059 .ptr = &Globals.bDisableNetbios,
2062 .flags = FLAG_ADVANCED,
2065 .label = "reset on zero vc",
2067 .p_class = P_GLOBAL,
2068 .ptr = &Globals.bResetOnZeroVC,
2071 .flags = FLAG_ADVANCED,
2074 .label = "acl compatibility",
2076 .p_class = P_GLOBAL,
2077 .ptr = &Globals.iAclCompat,
2079 .enum_list = enum_acl_compat_vals,
2080 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2083 .label = "defer sharing violations",
2085 .p_class = P_GLOBAL,
2086 .ptr = &Globals.bDeferSharingViolations,
2089 .flags = FLAG_ADVANCED | FLAG_GLOBAL,
2092 .label = "ea support",
2095 .ptr = &sDefault.bEASupport,
2098 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2101 .label = "nt acl support",
2104 .ptr = &sDefault.bNTAclSupport,
2107 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2110 .label = "nt pipe support",
2112 .p_class = P_GLOBAL,
2113 .ptr = &Globals.bNTPipeSupport,
2116 .flags = FLAG_ADVANCED,
2119 .label = "nt status support",
2121 .p_class = P_GLOBAL,
2122 .ptr = &Globals.bNTStatusSupport,
2125 .flags = FLAG_ADVANCED,
2128 .label = "profile acls",
2131 .ptr = &sDefault.bProfileAcls,
2134 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
2137 .label = "announce version",
2139 .p_class = P_GLOBAL,
2140 .ptr = &Globals.szAnnounceVersion,
2143 .flags = FLAG_ADVANCED,
2146 .label = "announce as",
2148 .p_class = P_GLOBAL,
2149 .ptr = &Globals.announce_as,
2151 .enum_list = enum_announce_as,
2152 .flags = FLAG_ADVANCED,
2155 .label = "map acl inherit",
2158 .ptr = &sDefault.bMap_acl_inherit,
2161 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2164 .label = "afs share",
2167 .ptr = &sDefault.bAfs_Share,
2170 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2175 .p_class = P_GLOBAL,
2176 .ptr = &Globals.max_mux,
2179 .flags = FLAG_ADVANCED,
2182 .label = "max xmit",
2184 .p_class = P_GLOBAL,
2185 .ptr = &Globals.max_xmit,
2188 .flags = FLAG_ADVANCED,
2191 .label = "name resolve order",
2193 .p_class = P_GLOBAL,
2194 .ptr = &Globals.szNameResolveOrder,
2197 .flags = FLAG_ADVANCED | FLAG_WIZARD,
2202 .p_class = P_GLOBAL,
2203 .ptr = &Globals.max_ttl,
2206 .flags = FLAG_ADVANCED,
2209 .label = "max wins ttl",
2211 .p_class = P_GLOBAL,
2212 .ptr = &Globals.max_wins_ttl,
2215 .flags = FLAG_ADVANCED,
2218 .label = "min wins ttl",
2220 .p_class = P_GLOBAL,
2221 .ptr = &Globals.min_wins_ttl,
2224 .flags = FLAG_ADVANCED,
2227 .label = "time server",
2229 .p_class = P_GLOBAL,
2230 .ptr = &Globals.bTimeServer,
2233 .flags = FLAG_ADVANCED,
2236 .label = "unix extensions",
2238 .p_class = P_GLOBAL,
2239 .ptr = &Globals.bUnixExtensions,
2242 .flags = FLAG_ADVANCED,
2245 .label = "use spnego",
2247 .p_class = P_GLOBAL,
2248 .ptr = &Globals.bUseSpnego,
2251 .flags = FLAG_ADVANCED,
2254 .label = "client signing",
2256 .p_class = P_GLOBAL,
2257 .ptr = &Globals.client_signing,
2259 .enum_list = enum_smb_signing_vals,
2260 .flags = FLAG_ADVANCED,
2263 .label = "server signing",
2265 .p_class = P_GLOBAL,
2266 .ptr = &Globals.server_signing,
2268 .enum_list = enum_smb_signing_vals,
2269 .flags = FLAG_ADVANCED,
2272 .label = "smb encrypt",
2275 .ptr = &sDefault.ismb_encrypt,
2277 .enum_list = enum_smb_signing_vals,
2278 .flags = FLAG_ADVANCED,
2281 .label = "client use spnego",
2283 .p_class = P_GLOBAL,
2284 .ptr = &Globals.bClientUseSpnego,
2287 .flags = FLAG_ADVANCED,
2290 .label = "client ldap sasl wrapping",
2292 .p_class = P_GLOBAL,
2293 .ptr = &Globals.client_ldap_sasl_wrapping,
2295 .enum_list = enum_ldap_sasl_wrapping,
2296 .flags = FLAG_ADVANCED,
2299 .label = "enable asu support",
2301 .p_class = P_GLOBAL,
2302 .ptr = &Globals.bASUSupport,
2305 .flags = FLAG_ADVANCED,
2308 .label = "svcctl list",
2310 .p_class = P_GLOBAL,
2311 .ptr = &Globals.szServicesList,
2314 .flags = FLAG_ADVANCED,
2317 {N_("Tuning Options"), P_SEP, P_SEPARATOR},
2320 .label = "block size",
2323 .ptr = &sDefault.iBlock_size,
2326 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2329 .label = "deadtime",
2331 .p_class = P_GLOBAL,
2332 .ptr = &Globals.deadtime,
2335 .flags = FLAG_ADVANCED,
2338 .label = "getwd cache",
2340 .p_class = P_GLOBAL,
2341 .ptr = &Globals.getwd_cache,
2344 .flags = FLAG_ADVANCED,
2347 .label = "keepalive",
2349 .p_class = P_GLOBAL,
2350 .ptr = &Globals.iKeepalive,
2353 .flags = FLAG_ADVANCED,
2356 .label = "change notify",
2359 .ptr = &sDefault.bChangeNotify,
2362 .flags = FLAG_ADVANCED | FLAG_SHARE,
2365 .label = "directory name cache size",
2368 .ptr = &sDefault.iDirectoryNameCacheSize,
2371 .flags = FLAG_ADVANCED | FLAG_SHARE,
2374 .label = "kernel change notify",
2377 .ptr = &sDefault.bKernelChangeNotify,
2380 .flags = FLAG_ADVANCED | FLAG_SHARE,
2383 .label = "lpq cache time",
2385 .p_class = P_GLOBAL,
2386 .ptr = &Globals.lpqcachetime,
2389 .flags = FLAG_ADVANCED,
2392 .label = "max smbd processes",
2394 .p_class = P_GLOBAL,
2395 .ptr = &Globals.iMaxSmbdProcesses,
2398 .flags = FLAG_ADVANCED,
2401 .label = "max connections",
2404 .ptr = &sDefault.iMaxConnections,
2407 .flags = FLAG_ADVANCED | FLAG_SHARE,
2410 .label = "paranoid server security",
2412 .p_class = P_GLOBAL,
2413 .ptr = &Globals.paranoid_server_security,
2416 .flags = FLAG_ADVANCED,
2419 .label = "max disk size",
2421 .p_class = P_GLOBAL,
2422 .ptr = &Globals.maxdisksize,
2425 .flags = FLAG_ADVANCED,
2428 .label = "max open files",
2430 .p_class = P_GLOBAL,
2431 .ptr = &Globals.max_open_files,
2434 .flags = FLAG_ADVANCED,
2437 .label = "min print space",
2440 .ptr = &sDefault.iMinPrintSpace,
2443 .flags = FLAG_ADVANCED | FLAG_PRINT,
2446 .label = "socket options",
2448 .p_class = P_GLOBAL,
2449 .ptr = &Globals.szSocketOptions,
2452 .flags = FLAG_ADVANCED,
2455 .label = "strict allocate",
2458 .ptr = &sDefault.bStrictAllocate,
2461 .flags = FLAG_ADVANCED | FLAG_SHARE,
2464 .label = "strict sync",
2467 .ptr = &sDefault.bStrictSync,
2470 .flags = FLAG_ADVANCED | FLAG_SHARE,
2473 .label = "sync always",
2476 .ptr = &sDefault.bSyncAlways,
2479 .flags = FLAG_ADVANCED | FLAG_SHARE,
2482 .label = "use mmap",
2484 .p_class = P_GLOBAL,
2485 .ptr = &Globals.bUseMmap,
2488 .flags = FLAG_ADVANCED,
2491 .label = "use sendfile",
2494 .ptr = &sDefault.bUseSendfile,
2497 .flags = FLAG_ADVANCED | FLAG_SHARE,
2500 .label = "hostname lookups",
2502 .p_class = P_GLOBAL,
2503 .ptr = &Globals.bHostnameLookups,
2506 .flags = FLAG_ADVANCED,
2509 .label = "write cache size",
2512 .ptr = &sDefault.iWriteCacheSize,
2515 .flags = FLAG_ADVANCED | FLAG_SHARE,
2518 .label = "name cache timeout",
2520 .p_class = P_GLOBAL,
2521 .ptr = &Globals.name_cache_timeout,
2524 .flags = FLAG_ADVANCED,
2527 .label = "ctdbd socket",
2529 .p_class = P_GLOBAL,
2530 .ptr = &Globals.ctdbdSocket,
2533 .flags = FLAG_ADVANCED | FLAG_GLOBAL,
2536 .label = "cluster addresses",
2538 .p_class = P_GLOBAL,
2539 .ptr = &Globals.szClusterAddresses,
2542 .flags = FLAG_ADVANCED | FLAG_GLOBAL,
2545 .label = "clustering",
2547 .p_class = P_GLOBAL,
2548 .ptr = &Globals.clustering,
2551 .flags = FLAG_ADVANCED | FLAG_GLOBAL,
2554 .label = "ctdb timeout",
2556 .p_class = P_GLOBAL,
2557 .ptr = &Globals.ctdb_timeout,
2560 .flags = FLAG_ADVANCED | FLAG_GLOBAL,
2563 {N_("Printing Options"), P_SEP, P_SEPARATOR},
2566 .label = "max reported print jobs",
2569 .ptr = &sDefault.iMaxReportedPrintJobs,
2572 .flags = FLAG_ADVANCED | FLAG_PRINT,
2575 .label = "max print jobs",
2578 .ptr = &sDefault.iMaxPrintJobs,
2581 .flags = FLAG_ADVANCED | FLAG_PRINT,
2584 .label = "load printers",
2586 .p_class = P_GLOBAL,
2587 .ptr = &Globals.bLoadPrinters,
2590 .flags = FLAG_ADVANCED | FLAG_PRINT,
2593 .label = "printcap cache time",
2595 .p_class = P_GLOBAL,
2596 .ptr = &Globals.PrintcapCacheTime,
2599 .flags = FLAG_ADVANCED | FLAG_PRINT,
2602 .label = "printcap name",
2604 .p_class = P_GLOBAL,
2605 .ptr = &Globals.szPrintcapname,
2608 .flags = FLAG_ADVANCED | FLAG_PRINT,
2611 .label = "printcap",
2613 .p_class = P_GLOBAL,
2614 .ptr = &Globals.szPrintcapname,
2620 .label = "printable",
2623 .ptr = &sDefault.bPrint_ok,
2626 .flags = FLAG_ADVANCED | FLAG_PRINT,
2629 .label = "print ok",
2632 .ptr = &sDefault.bPrint_ok,
2638 .label = "printing",
2641 .ptr = &sDefault.iPrinting,
2642 .special = handle_printing,
2643 .enum_list = enum_printing,
2644 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2647 .label = "cups options",
2650 .ptr = &sDefault.szCupsOptions,
2653 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2656 .label = "cups server",
2658 .p_class = P_GLOBAL,
2659 .ptr = &Globals.szCupsServer,
2662 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2665 .label = "cups encrypt",
2667 .p_class = P_GLOBAL,
2668 .ptr = &Globals.CupsEncrypt,
2670 .enum_list = enum_bool_auto,
2671 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2675 .label = "cups connection timeout",
2677 .p_class = P_GLOBAL,
2678 .ptr = &Globals.cups_connection_timeout,
2681 .flags = FLAG_ADVANCED,
2684 .label = "iprint server",
2686 .p_class = P_GLOBAL,
2687 .ptr = &Globals.szIPrintServer,
2690 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2693 .label = "print command",
2696 .ptr = &sDefault.szPrintcommand,
2699 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2702 .label = "disable spoolss",
2704 .p_class = P_GLOBAL,
2705 .ptr = &Globals.bDisableSpoolss,
2708 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2711 .label = "enable spoolss",
2713 .p_class = P_GLOBAL,
2714 .ptr = &Globals.bDisableSpoolss,
2720 .label = "lpq command",
2723 .ptr = &sDefault.szLpqcommand,
2726 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2729 .label = "lprm command",
2732 .ptr = &sDefault.szLprmcommand,
2735 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2738 .label = "lppause command",
2741 .ptr = &sDefault.szLppausecommand,
2744 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2747 .label = "lpresume command",
2750 .ptr = &sDefault.szLpresumecommand,
2753 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2756 .label = "queuepause command",
2759 .ptr = &sDefault.szQueuepausecommand,
2762 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2765 .label = "queueresume command",
2768 .ptr = &sDefault.szQueueresumecommand,
2771 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2774 .label = "addport command",
2776 .p_class = P_GLOBAL,
2777 .ptr = &Globals.szAddPortCommand,
2780 .flags = FLAG_ADVANCED,
2783 .label = "enumports command",
2785 .p_class = P_GLOBAL,
2786 .ptr = &Globals.szEnumPortsCommand,
2789 .flags = FLAG_ADVANCED,
2792 .label = "addprinter command",
2794 .p_class = P_GLOBAL,
2795 .ptr = &Globals.szAddPrinterCommand,
2798 .flags = FLAG_ADVANCED,
2801 .label = "deleteprinter command",
2803 .p_class = P_GLOBAL,
2804 .ptr = &Globals.szDeletePrinterCommand,
2807 .flags = FLAG_ADVANCED,
2810 .label = "show add printer wizard",
2812 .p_class = P_GLOBAL,
2813 .ptr = &Globals.bMsAddPrinterWizard,
2816 .flags = FLAG_ADVANCED,
2819 .label = "os2 driver map",
2821 .p_class = P_GLOBAL,
2822 .ptr = &Globals.szOs2DriverMap,
2825 .flags = FLAG_ADVANCED,
2829 .label = "printer name",
2832 .ptr = &sDefault.szPrintername,
2835 .flags = FLAG_ADVANCED | FLAG_PRINT,
2841 .ptr = &sDefault.szPrintername,
2847 .label = "use client driver",
2850 .ptr = &sDefault.bUseClientDriver,
2853 .flags = FLAG_ADVANCED | FLAG_PRINT,
2856 .label = "default devmode",
2859 .ptr = &sDefault.bDefaultDevmode,
2862 .flags = FLAG_ADVANCED | FLAG_PRINT,
2865 .label = "force printername",
2868 .ptr = &sDefault.bForcePrintername,
2871 .flags = FLAG_ADVANCED | FLAG_PRINT,
2874 .label = "printjob username",
2877 .ptr = &sDefault.szPrintjobUsername,
2880 .flags = FLAG_ADVANCED | FLAG_PRINT,
2883 {N_("Filename Handling"), P_SEP, P_SEPARATOR},
2886 .label = "mangling method",
2888 .p_class = P_GLOBAL,
2889 .ptr = &Globals.szManglingMethod,
2892 .flags = FLAG_ADVANCED,
2895 .label = "mangle prefix",
2897 .p_class = P_GLOBAL,
2898 .ptr = &Globals.mangle_prefix,
2901 .flags = FLAG_ADVANCED,
2905 .label = "default case",
2908 .ptr = &sDefault.iDefaultCase,
2910 .enum_list = enum_case,
2911 .flags = FLAG_ADVANCED | FLAG_SHARE,
2914 .label = "case sensitive",
2917 .ptr = &sDefault.iCaseSensitive,
2919 .enum_list = enum_bool_auto,
2920 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2923 .label = "casesignames",
2926 .ptr = &sDefault.iCaseSensitive,
2928 .enum_list = enum_bool_auto,
2929 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL | FLAG_HIDE,
2932 .label = "preserve case",
2935 .ptr = &sDefault.bCasePreserve,
2938 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2941 .label = "short preserve case",
2944 .ptr = &sDefault.bShortCasePreserve,
2947 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2950 .label = "mangling char",
2953 .ptr = &sDefault.magic_char,
2956 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2959 .label = "hide dot files",