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
59 extern enum protocol_types Protocol;
60 extern userdom_struct current_user_info;
63 #define GLOBAL_NAME "global"
67 #define PRINTERS_NAME "printers"
71 #define HOMES_NAME "homes"
74 /* the special value for the include parameter
75 * to be interpreted not as a file name but to
76 * trigger loading of the global smb.conf options
78 #ifndef INCLUDE_REGISTRY_NAME
79 #define INCLUDE_REGISTRY_NAME "registry"
82 static bool in_client = False; /* Not in the client by default */
83 static struct smbconf_csn conf_last_csn;
85 #define CONFIG_BACKEND_FILE 0
86 #define CONFIG_BACKEND_REGISTRY 1
88 static int config_backend = CONFIG_BACKEND_FILE;
90 /* some helpful bits */
91 #define LP_SNUM_OK(i) (((i) >= 0) && ((i) < iNumServices) && (ServicePtrs != NULL) && ServicePtrs[(i)]->valid)
92 #define VALID(i) (ServicePtrs != NULL && ServicePtrs[i]->valid)
94 #define USERSHARE_VALID 1
95 #define USERSHARE_PENDING_DELETE 2
97 extern int extra_time_offset;
99 static bool defaults_saved = False;
101 struct param_opt_struct {
102 struct param_opt_struct *prev, *next;
109 * This structure describes global (ie., server-wide) parameters.
116 char *display_charset;
117 char *szPrintcapname;
118 char *szAddPortCommand;
119 char *szEnumPortsCommand;
120 char *szAddPrinterCommand;
121 char *szDeletePrinterCommand;
122 char *szOs2DriverMap;
126 char *szDefaultService;
130 char *szServerString;
131 char *szAutoServices;
132 char *szPasswdProgram;
136 char *szSMBPasswdFile;
138 char *szPassdbBackend;
139 char **szPreloadModules;
140 char *szPasswordServer;
141 char *szSocketOptions;
143 char *szAfsUsernameMap;
144 int iAfsTokenLifetime;
145 char *szLogNtTokenCommand;
151 char **szWINSservers;
153 char *szRemoteAnnounce;
154 char *szRemoteBrowseSync;
155 char *szSocketAddress;
156 char *szNISHomeMapName;
157 char *szAnnounceVersion; /* This is initialised in init_globals */
160 char **szNetbiosAliases;
161 char *szNetbiosScope;
162 char *szNameResolveOrder;
164 char *szAddUserScript;
165 char *szRenameUserScript;
166 char *szDelUserScript;
167 char *szAddGroupScript;
168 char *szDelGroupScript;
169 char *szAddUserToGroupScript;
170 char *szDelUserFromGroupScript;
171 char *szSetPrimaryGroupScript;
172 char *szAddMachineScript;
173 char *szShutdownScript;
174 char *szAbortShutdownScript;
175 char *szUsernameMapScript;
176 char *szCheckPasswordScript;
183 bool bPassdbExpandExplicit;
184 int AlgorithmicRidBase;
185 char *szTemplateHomedir;
186 char *szTemplateShell;
187 char *szWinbindSeparator;
188 bool bWinbindEnumUsers;
189 bool bWinbindEnumGroups;
190 bool bWinbindUseDefaultDomain;
191 bool bWinbindTrustedDomainsOnly;
192 bool bWinbindNestedGroups;
193 int winbind_expand_groups;
194 bool bWinbindRefreshTickets;
195 bool bWinbindOfflineLogon;
196 bool bWinbindNormalizeNames;
197 bool bWinbindRpcOnly;
198 char *szIdmapBackend;
199 char *szIdmapAllocBackend;
200 char *szAddShareCommand;
201 char *szChangeShareCommand;
202 char *szDeleteShareCommand;
204 char *szGuestaccount;
205 char *szManglingMethod;
206 char **szServicesList;
207 char *szUsersharePath;
208 char *szUsershareTemplateShare;
209 char **szUsersharePrefixAllowList;
210 char **szUsersharePrefixDenyList;
217 int open_files_db_hash_size;
226 bool paranoid_server_security;
229 int iMaxSmbdProcesses;
230 bool bDisableSpoolss;
233 bool enhanced_browsing;
239 int announce_as; /* This is initialised in init_globals */
240 int machine_password_timeout;
242 int oplock_break_wait_time;
243 int winbind_cache_time;
244 int winbind_reconnect_delay;
245 int winbind_max_idle_children;
246 char **szWinbindNssInfo;
248 char *szLdapMachineSuffix;
249 char *szLdapUserSuffix;
250 char *szLdapIdmapSuffix;
251 char *szLdapGroupSuffix;
255 int ldap_debug_level;
256 int ldap_debug_threshold;
259 char *szIPrintServer;
261 char **szClusterAddresses;
263 int ldap_passwd_sync;
264 int ldap_replication_sleep;
265 int ldap_timeout; /* This is initialised in init_globals */
266 int ldap_connection_timeout;
269 bool bMsAddPrinterWizard;
274 int iPreferredMaster;
277 char **szInitLogonDelayedHosts;
279 bool bEncryptPasswords;
284 bool bObeyPamRestrictions;
286 int PrintcapCacheTime;
287 bool bLargeReadwrite;
294 bool bBindInterfacesOnly;
295 bool bPamPasswordChange;
296 bool bUnixPasswdSync;
297 bool bPasswdChatDebug;
298 int iPasswdChatTimeout;
302 bool bNTStatusSupport;
304 int iMaxStatCacheSize;
306 bool bAllowTrustedDomains;
310 bool bClientLanManAuth;
311 bool bClientNTLMv2Auth;
312 bool bClientPlaintextAuth;
313 bool bClientUseSpnego;
314 bool bDebugPrefixTimestamp;
315 bool bDebugHiresTimestamp;
319 bool bEnableCoreFiles;
322 bool bHostnameLookups;
323 bool bUnixExtensions;
324 bool bDisableNetbios;
325 bool bUseKerberosKeytab;
326 bool bDeferSharingViolations;
327 bool bEnablePrivileges;
329 bool bUsershareOwnerOnly;
330 bool bUsershareAllowGuests;
331 bool bRegistryShares;
332 int restrict_anonymous;
333 int name_cache_timeout;
336 int client_ldap_sasl_wrapping;
337 int iUsershareMaxShares;
339 int iIdmapNegativeCacheTime;
343 struct param_opt_struct *param_opt;
344 int cups_connection_timeout;
347 static struct global Globals;
350 * This structure describes a single service.
356 time_t usershare_last_mod;
360 char **szInvalidUsers;
368 char *szRootPostExec;
370 char *szPrintcommand;
373 char *szLppausecommand;
374 char *szLpresumecommand;
375 char *szQueuepausecommand;
376 char *szQueueresumecommand;
378 char *szPrintjobUsername;
386 char *szVetoOplockFiles;
392 char **printer_admin;
397 char *szAioWriteBehind;
401 int iMaxReportedPrintJobs;
404 int iCreate_force_mode;
406 int iSecurity_force_mode;
409 int iDir_Security_mask;
410 int iDir_Security_force_mode;
414 int iOplockContentionLimit;
419 bool bRootpreexecClose;
422 bool bShortCasePreserve;
424 bool bHideSpecialFiles;
425 bool bHideUnReadable;
426 bool bHideUnWriteableFiles;
428 bool bAccessBasedShareEnum;
433 bool bAdministrative_share;
439 bool bStoreDosAttributes;
452 bool bStrictAllocate;
455 struct bitmap *copymap;
456 bool bDeleteReadonly;
458 bool bDeleteVetoFiles;
461 bool bDosFiletimeResolution;
462 bool bFakeDirCreateTimes;
468 bool bUseClientDriver;
469 bool bDefaultDevmode;
470 bool bForcePrintername;
472 bool bForceUnknownAclUser;
475 bool bMap_acl_inherit;
478 bool bAclCheckPermissions;
479 bool bAclMapFullControl;
480 bool bAclGroupControl;
482 bool bKernelChangeNotify;
483 int iallocation_roundup_size;
487 int iDirectoryNameCacheSize;
489 struct param_opt_struct *param_opt;
491 char dummy[3]; /* for alignment */
495 /* This is a default service used to prime a services structure */
496 static struct service sDefault = {
498 False, /* not autoloaded */
499 0, /* not a usershare */
500 (time_t)0, /* No last mod time */
501 NULL, /* szService */
503 NULL, /* szUsername */
504 NULL, /* szInvalidUsers */
505 NULL, /* szValidUsers */
506 NULL, /* szAdminUsers */
508 NULL, /* szInclude */
509 NULL, /* szPreExec */
510 NULL, /* szPostExec */
511 NULL, /* szRootPreExec */
512 NULL, /* szRootPostExec */
513 NULL, /* szCupsOptions */
514 NULL, /* szPrintcommand */
515 NULL, /* szLpqcommand */
516 NULL, /* szLprmcommand */
517 NULL, /* szLppausecommand */
518 NULL, /* szLpresumecommand */
519 NULL, /* szQueuepausecommand */
520 NULL, /* szQueueresumecommand */
521 NULL, /* szPrintername */
522 NULL, /* szPrintjobUsername */
523 NULL, /* szDontdescend */
524 NULL, /* szHostsallow */
525 NULL, /* szHostsdeny */
526 NULL, /* szMagicScript */
527 NULL, /* szMagicOutput */
528 NULL, /* szVetoFiles */
529 NULL, /* szHideFiles */
530 NULL, /* szVetoOplockFiles */
532 NULL, /* force user */
533 NULL, /* force group */
535 NULL, /* writelist */
536 NULL, /* printer admin */
539 NULL, /* vfs objects */
540 NULL, /* szMSDfsProxy */
541 NULL, /* szAioWriteBehind */
543 0, /* iMinPrintSpace */
544 1000, /* iMaxPrintJobs */
545 0, /* iMaxReportedPrintJobs */
546 0, /* iWriteCacheSize */
547 0744, /* iCreate_mask */
548 0000, /* iCreate_force_mode */
549 0777, /* iSecurity_mask */
550 0, /* iSecurity_force_mode */
551 0755, /* iDir_mask */
552 0000, /* iDir_force_mode */
553 0777, /* iDir_Security_mask */
554 0, /* iDir_Security_force_mode */
555 0, /* iMaxConnections */
556 CASE_LOWER, /* iDefaultCase */
557 DEFAULT_PRINTING, /* iPrinting */
558 2, /* iOplockContentionLimit */
560 1024, /* iBlock_size */
561 0, /* iDfreeCacheTime */
562 False, /* bPreexecClose */
563 False, /* bRootpreexecClose */
564 Auto, /* case sensitive */
565 True, /* case preserve */
566 True, /* short case preserve */
567 True, /* bHideDotFiles */
568 False, /* bHideSpecialFiles */
569 False, /* bHideUnReadable */
570 False, /* bHideUnWriteableFiles */
571 True, /* bBrowseable */
572 False, /* bAccessBasedShareEnum */
573 True, /* bAvailable */
574 True, /* bRead_only */
575 True, /* bNo_set_dir */
576 False, /* bGuest_only */
577 False, /* bAdministrative_share */
578 False, /* bGuest_ok */
579 False, /* bPrint_ok */
580 False, /* bMap_system */
581 False, /* bMap_hidden */
582 True, /* bMap_archive */
583 False, /* bStoreDosAttributes */
584 False, /* bDmapiSupport */
586 Auto, /* iStrictLocking */
587 True, /* bPosixLocking */
588 True, /* bShareModes */
590 True, /* bLevel2OpLocks */
591 False, /* bOnlyUser */
592 True, /* bMangledNames */
593 True, /* bWidelinks */
594 True, /* bSymlinks */
595 False, /* bSyncAlways */
596 False, /* bStrictAllocate */
597 False, /* bStrictSync */
598 '~', /* magic char */
600 False, /* bDeleteReadonly */
601 False, /* bFakeOplocks */
602 False, /* bDeleteVetoFiles */
603 False, /* bDosFilemode */
604 True, /* bDosFiletimes */
605 False, /* bDosFiletimeResolution */
606 False, /* bFakeDirCreateTimes */
607 True, /* bBlockingLocks */
608 False, /* bInheritPerms */
609 False, /* bInheritACLS */
610 False, /* bInheritOwner */
611 False, /* bMSDfsRoot */
612 False, /* bUseClientDriver */
613 True, /* bDefaultDevmode */
614 False, /* bForcePrintername */
615 True, /* bNTAclSupport */
616 False, /* bForceUnknownAclUser */
617 False, /* bUseSendfile */
618 False, /* bProfileAcls */
619 False, /* bMap_acl_inherit */
620 False, /* bAfs_Share */
621 False, /* bEASupport */
622 True, /* bAclCheckPermissions */
623 True, /* bAclMapFullControl */
624 False, /* bAclGroupControl */
625 True, /* bChangeNotify */
626 True, /* bKernelChangeNotify */
627 SMB_ROUNDUP_ALLOCATION_SIZE, /* iallocation_roundup_size */
628 0, /* iAioReadSize */
629 0, /* iAioWriteSize */
630 MAP_READONLY_YES, /* iMap_readonly */
631 #ifdef BROKEN_DIRECTORY_HANDLING
632 0, /* iDirectoryNameCacheSize */
634 100, /* iDirectoryNameCacheSize */
636 Auto, /* ismb_encrypt */
637 NULL, /* Parametric options */
642 /* local variables */
643 static struct service **ServicePtrs = NULL;
644 static int iNumServices = 0;
645 static int iServiceIndex = 0;
646 static struct db_context *ServiceHash;
647 static int *invalid_services = NULL;
648 static int num_invalid_services = 0;
649 static bool bInGlobalSection = True;
650 static bool bGlobalOnly = False;
651 static int server_role;
652 static int default_server_announce;
654 #define NUMPARAMETERS (sizeof(parm_table) / sizeof(struct parm_struct))
656 /* prototypes for the special type handlers */
657 static bool handle_include( int snum, const char *pszParmValue, char **ptr);
658 static bool handle_copy( int snum, const char *pszParmValue, char **ptr);
659 static bool handle_netbios_name( int snum, const char *pszParmValue, char **ptr);
660 static bool handle_idmap_uid( int snum, const char *pszParmValue, char **ptr);
661 static bool handle_idmap_gid( int snum, const char *pszParmValue, char **ptr);
662 static bool handle_debug_list( int snum, const char *pszParmValue, char **ptr );
663 static bool handle_workgroup( int snum, const char *pszParmValue, char **ptr );
664 static bool handle_netbios_aliases( int snum, const char *pszParmValue, char **ptr );
665 static bool handle_netbios_scope( int snum, const char *pszParmValue, char **ptr );
666 static bool handle_charset( int snum, const char *pszParmValue, char **ptr );
667 static bool handle_printing( int snum, const char *pszParmValue, char **ptr);
668 static bool handle_ldap_debug_level( int snum, const char *pszParmValue, char **ptr);
670 static void set_server_role(void);
671 static void set_default_server_announce_type(void);
672 static void set_allowed_client_auth(void);
674 static const struct enum_list enum_protocol[] = {
675 {PROTOCOL_NT1, "NT1"},
676 {PROTOCOL_LANMAN2, "LANMAN2"},
677 {PROTOCOL_LANMAN1, "LANMAN1"},
678 {PROTOCOL_CORE, "CORE"},
679 {PROTOCOL_COREPLUS, "COREPLUS"},
680 {PROTOCOL_COREPLUS, "CORE+"},
684 static const struct enum_list enum_security[] = {
685 {SEC_SHARE, "SHARE"},
687 {SEC_SERVER, "SERVER"},
688 {SEC_DOMAIN, "DOMAIN"},
695 static const struct enum_list enum_printing[] = {
696 {PRINT_SYSV, "sysv"},
698 {PRINT_HPUX, "hpux"},
702 {PRINT_LPRNG, "lprng"},
703 {PRINT_CUPS, "cups"},
704 {PRINT_IPRINT, "iprint"},
706 {PRINT_LPROS2, "os2"},
708 {PRINT_TEST, "test"},
710 #endif /* DEVELOPER */
714 static const struct enum_list enum_ldap_sasl_wrapping[] = {
716 {ADS_AUTH_SASL_SIGN, "sign"},
717 {ADS_AUTH_SASL_SEAL, "seal"},
721 static const struct enum_list enum_ldap_ssl[] = {
722 {LDAP_SSL_OFF, "no"},
723 {LDAP_SSL_OFF, "No"},
724 {LDAP_SSL_OFF, "off"},
725 {LDAP_SSL_OFF, "Off"},
726 {LDAP_SSL_START_TLS, "start tls"},
727 {LDAP_SSL_START_TLS, "Start_tls"},
731 static const struct enum_list enum_ldap_passwd_sync[] = {
732 {LDAP_PASSWD_SYNC_OFF, "no"},
733 {LDAP_PASSWD_SYNC_OFF, "No"},
734 {LDAP_PASSWD_SYNC_OFF, "off"},
735 {LDAP_PASSWD_SYNC_OFF, "Off"},
736 {LDAP_PASSWD_SYNC_ON, "Yes"},
737 {LDAP_PASSWD_SYNC_ON, "yes"},
738 {LDAP_PASSWD_SYNC_ON, "on"},
739 {LDAP_PASSWD_SYNC_ON, "On"},
740 {LDAP_PASSWD_SYNC_ONLY, "Only"},
741 {LDAP_PASSWD_SYNC_ONLY, "only"},
745 /* Types of machine we can announce as. */
746 #define ANNOUNCE_AS_NT_SERVER 1
747 #define ANNOUNCE_AS_WIN95 2
748 #define ANNOUNCE_AS_WFW 3
749 #define ANNOUNCE_AS_NT_WORKSTATION 4
751 static const struct enum_list enum_announce_as[] = {
752 {ANNOUNCE_AS_NT_SERVER, "NT"},
753 {ANNOUNCE_AS_NT_SERVER, "NT Server"},
754 {ANNOUNCE_AS_NT_WORKSTATION, "NT Workstation"},
755 {ANNOUNCE_AS_WIN95, "win95"},
756 {ANNOUNCE_AS_WFW, "WfW"},
760 static const struct enum_list enum_map_readonly[] = {
761 {MAP_READONLY_NO, "no"},
762 {MAP_READONLY_NO, "false"},
763 {MAP_READONLY_NO, "0"},
764 {MAP_READONLY_YES, "yes"},
765 {MAP_READONLY_YES, "true"},
766 {MAP_READONLY_YES, "1"},
767 {MAP_READONLY_PERMISSIONS, "permissions"},
768 {MAP_READONLY_PERMISSIONS, "perms"},
772 static const struct enum_list enum_case[] = {
773 {CASE_LOWER, "lower"},
774 {CASE_UPPER, "upper"},
778 static const struct enum_list enum_bool_auto[] = {
789 /* Client-side offline caching policy types */
790 #define CSC_POLICY_MANUAL 0
791 #define CSC_POLICY_DOCUMENTS 1
792 #define CSC_POLICY_PROGRAMS 2
793 #define CSC_POLICY_DISABLE 3
795 static const struct enum_list enum_csc_policy[] = {
796 {CSC_POLICY_MANUAL, "manual"},
797 {CSC_POLICY_DOCUMENTS, "documents"},
798 {CSC_POLICY_PROGRAMS, "programs"},
799 {CSC_POLICY_DISABLE, "disable"},
803 /* SMB signing types. */
804 static const struct enum_list enum_smb_signing_vals[] = {
816 {Required, "required"},
817 {Required, "mandatory"},
819 {Required, "forced"},
820 {Required, "enforced"},
824 /* ACL compatibility options. */
825 static const struct enum_list enum_acl_compat_vals[] = {
826 { ACL_COMPAT_AUTO, "auto" },
827 { ACL_COMPAT_WINNT, "winnt" },
828 { ACL_COMPAT_WIN2K, "win2k" },
833 Do you want session setups at user level security with a invalid
834 password to be rejected or allowed in as guest? WinNT rejects them
835 but it can be a pain as it means "net view" needs to use a password
837 You have 3 choices in the setting of map_to_guest:
839 "Never" means session setups with an invalid password
840 are rejected. This is the default.
842 "Bad User" means session setups with an invalid password
843 are rejected, unless the username does not exist, in which case it
844 is treated as a guest login
846 "Bad Password" means session setups with an invalid password
847 are treated as a guest login
849 Note that map_to_guest only has an effect in user or server
853 static const struct enum_list enum_map_to_guest[] = {
854 {NEVER_MAP_TO_GUEST, "Never"},
855 {MAP_TO_GUEST_ON_BAD_USER, "Bad User"},
856 {MAP_TO_GUEST_ON_BAD_PASSWORD, "Bad Password"},
857 {MAP_TO_GUEST_ON_BAD_UID, "Bad Uid"},
861 /* Config backend options */
863 static const struct enum_list enum_config_backend[] = {
864 {CONFIG_BACKEND_FILE, "file"},
865 {CONFIG_BACKEND_REGISTRY, "registry"},
869 /* Note: We do not initialise the defaults union - it is not allowed in ANSI C
871 * The FLAG_HIDE is explicit. Paramters set this way do NOT appear in any edit
872 * screen in SWAT. This is used to exclude parameters as well as to squash all
873 * parameters that have been duplicated by pseudonyms.
875 * NOTE: To display a parameter in BASIC view set FLAG_BASIC
876 * Any parameter that does NOT have FLAG_ADVANCED will not disply at all
877 * Set FLAG_SHARE and FLAG_PRINT to specifically display parameters in
880 * NOTE2: Handling of duplicated (synonym) paramters:
881 * Only the first occurance of a parameter should be enabled by FLAG_BASIC
882 * and/or FLAG_ADVANCED. All duplicates following the first mention should be
883 * set to FLAG_HIDE. ie: Make you must place the parameter that has the preferred
884 * name first, and all synonyms must follow it with the FLAG_HIDE attribute.
887 static struct parm_struct parm_table[] = {
888 {N_("Base Options"), P_SEP, P_SEPARATOR},
891 .label = "dos charset",
894 .ptr = &Globals.dos_charset,
895 .special = handle_charset,
897 .flags = FLAG_ADVANCED
900 .label = "unix charset",
903 .ptr = &Globals.unix_charset,
904 .special = handle_charset,
906 .flags = FLAG_ADVANCED
909 .label = "display charset",
912 .ptr = &Globals.display_charset,
913 .special = handle_charset,
915 .flags = FLAG_ADVANCED
921 .ptr = &sDefault.comment,
924 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT
930 .ptr = &sDefault.szPath,
933 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
936 .label = "directory",
939 .ptr = &sDefault.szPath,
945 .label = "workgroup",
948 .ptr = &Globals.szWorkgroup,
949 .special = handle_workgroup,
951 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
958 .ptr = &Globals.szRealm,
961 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
965 .label = "netbios name",
968 .ptr = &Globals.szNetbiosName,
969 .special = handle_netbios_name,
971 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
974 .label = "netbios aliases",
977 .ptr = &Globals.szNetbiosAliases,
978 .special = handle_netbios_aliases,
980 .flags = FLAG_ADVANCED,
983 .label = "netbios scope",
986 .ptr = &Globals.szNetbiosScope,
987 .special = handle_netbios_scope,
989 .flags = FLAG_ADVANCED,
992 .label = "server string",
995 .ptr = &Globals.szServerString,
998 .flags = FLAG_BASIC | FLAG_ADVANCED,
1001 .label = "interfaces",
1003 .p_class = P_GLOBAL,
1004 .ptr = &Globals.szInterfaces,
1007 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
1010 .label = "bind interfaces only",
1012 .p_class = P_GLOBAL,
1013 .ptr = &Globals.bBindInterfacesOnly,
1016 .flags = FLAG_ADVANCED | FLAG_WIZARD,
1019 .label = "config backend",
1021 .p_class = P_GLOBAL,
1022 .ptr = &Globals.ConfigBackend,
1024 .enum_list = enum_config_backend,
1025 .flags = FLAG_ADVANCED,
1028 {N_("Security Options"), P_SEP, P_SEPARATOR},
1031 .label = "security",
1033 .p_class = P_GLOBAL,
1034 .ptr = &Globals.security,
1036 .enum_list = enum_security,
1037 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
1040 .label = "auth methods",
1042 .p_class = P_GLOBAL,
1043 .ptr = &Globals.AuthMethods,
1046 .flags = FLAG_ADVANCED,
1049 .label = "encrypt passwords",
1051 .p_class = P_GLOBAL,
1052 .ptr = &Globals.bEncryptPasswords,
1055 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
1058 .label = "update encrypted",
1060 .p_class = P_GLOBAL,
1061 .ptr = &Globals.bUpdateEncrypt,
1064 .flags = FLAG_ADVANCED,
1067 .label = "client schannel",
1069 .p_class = P_GLOBAL,
1070 .ptr = &Globals.clientSchannel,
1072 .enum_list = enum_bool_auto,
1073 .flags = FLAG_BASIC | FLAG_ADVANCED,
1076 .label = "server schannel",
1078 .p_class = P_GLOBAL,
1079 .ptr = &Globals.serverSchannel,
1081 .enum_list = enum_bool_auto,
1082 .flags = FLAG_BASIC | FLAG_ADVANCED,
1085 .label = "allow trusted domains",
1087 .p_class = P_GLOBAL,
1088 .ptr = &Globals.bAllowTrustedDomains,
1091 .flags = FLAG_ADVANCED,
1094 .label = "map to guest",
1096 .p_class = P_GLOBAL,
1097 .ptr = &Globals.map_to_guest,
1099 .enum_list = enum_map_to_guest,
1100 .flags = FLAG_ADVANCED,
1103 .label = "null passwords",
1105 .p_class = P_GLOBAL,
1106 .ptr = &Globals.bNullPasswords,
1109 .flags = FLAG_ADVANCED,
1112 .label = "obey pam restrictions",
1114 .p_class = P_GLOBAL,
1115 .ptr = &Globals.bObeyPamRestrictions,
1118 .flags = FLAG_ADVANCED,
1121 .label = "password server",
1123 .p_class = P_GLOBAL,
1124 .ptr = &Globals.szPasswordServer,
1127 .flags = FLAG_ADVANCED | FLAG_WIZARD,
1130 .label = "smb passwd file",
1132 .p_class = P_GLOBAL,
1133 .ptr = &Globals.szSMBPasswdFile,
1136 .flags = FLAG_ADVANCED,
1139 .label = "private dir",
1141 .p_class = P_GLOBAL,
1142 .ptr = &Globals.szPrivateDir,
1145 .flags = FLAG_ADVANCED,
1148 .label = "passdb backend",
1150 .p_class = P_GLOBAL,
1151 .ptr = &Globals.szPassdbBackend,
1154 .flags = FLAG_ADVANCED | FLAG_WIZARD,
1157 .label = "algorithmic rid base",
1159 .p_class = P_GLOBAL,
1160 .ptr = &Globals.AlgorithmicRidBase,
1163 .flags = FLAG_ADVANCED,
1166 .label = "root directory",
1168 .p_class = P_GLOBAL,
1169 .ptr = &Globals.szRootdir,
1172 .flags = FLAG_ADVANCED,
1175 .label = "root dir",
1177 .p_class = P_GLOBAL,
1178 .ptr = &Globals.szRootdir,
1186 .p_class = P_GLOBAL,
1187 .ptr = &Globals.szRootdir,
1193 .label = "guest account",
1195 .p_class = P_GLOBAL,
1196 .ptr = &Globals.szGuestaccount,
1199 .flags = FLAG_BASIC | FLAG_ADVANCED,
1202 .label = "enable privileges",
1204 .p_class = P_GLOBAL,
1205 .ptr = &Globals.bEnablePrivileges,
1208 .flags = FLAG_ADVANCED,
1212 .label = "pam password change",
1214 .p_class = P_GLOBAL,
1215 .ptr = &Globals.bPamPasswordChange,
1218 .flags = FLAG_ADVANCED,
1221 .label = "passwd program",
1223 .p_class = P_GLOBAL,
1224 .ptr = &Globals.szPasswdProgram,
1227 .flags = FLAG_ADVANCED,
1230 .label = "passwd chat",
1232 .p_class = P_GLOBAL,
1233 .ptr = &Globals.szPasswdChat,
1236 .flags = FLAG_ADVANCED,
1239 .label = "passwd chat debug",
1241 .p_class = P_GLOBAL,
1242 .ptr = &Globals.bPasswdChatDebug,
1245 .flags = FLAG_ADVANCED,
1248 .label = "passwd chat timeout",
1250 .p_class = P_GLOBAL,
1251 .ptr = &Globals.iPasswdChatTimeout,
1254 .flags = FLAG_ADVANCED,
1257 .label = "check password script",
1259 .p_class = P_GLOBAL,
1260 .ptr = &Globals.szCheckPasswordScript,
1263 .flags = FLAG_ADVANCED,
1266 .label = "username map",
1268 .p_class = P_GLOBAL,
1269 .ptr = &Globals.szUsernameMap,
1272 .flags = FLAG_ADVANCED,
1275 .label = "password level",
1277 .p_class = P_GLOBAL,
1278 .ptr = &Globals.pwordlevel,
1281 .flags = FLAG_ADVANCED,
1284 .label = "username level",
1286 .p_class = P_GLOBAL,
1287 .ptr = &Globals.unamelevel,
1290 .flags = FLAG_ADVANCED,
1293 .label = "unix password sync",
1295 .p_class = P_GLOBAL,
1296 .ptr = &Globals.bUnixPasswdSync,
1299 .flags = FLAG_ADVANCED,
1302 .label = "restrict anonymous",
1304 .p_class = P_GLOBAL,
1305 .ptr = &Globals.restrict_anonymous,
1308 .flags = FLAG_ADVANCED,
1311 .label = "lanman auth",
1313 .p_class = P_GLOBAL,
1314 .ptr = &Globals.bLanmanAuth,
1317 .flags = FLAG_ADVANCED,
1320 .label = "ntlm auth",
1322 .p_class = P_GLOBAL,
1323 .ptr = &Globals.bNTLMAuth,
1326 .flags = FLAG_ADVANCED,
1329 .label = "client NTLMv2 auth",
1331 .p_class = P_GLOBAL,
1332 .ptr = &Globals.bClientNTLMv2Auth,
1335 .flags = FLAG_ADVANCED,
1338 .label = "client lanman auth",
1340 .p_class = P_GLOBAL,
1341 .ptr = &Globals.bClientLanManAuth,
1344 .flags = FLAG_ADVANCED,
1347 .label = "client plaintext auth",
1349 .p_class = P_GLOBAL,
1350 .ptr = &Globals.bClientPlaintextAuth,
1353 .flags = FLAG_ADVANCED,
1356 .label = "username",
1359 .ptr = &sDefault.szUsername,
1362 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1368 .ptr = &sDefault.szUsername,
1377 .ptr = &sDefault.szUsername,
1383 .label = "invalid users",
1386 .ptr = &sDefault.szInvalidUsers,
1389 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1392 .label = "valid users",
1395 .ptr = &sDefault.szValidUsers,
1398 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1401 .label = "admin users",
1404 .ptr = &sDefault.szAdminUsers,
1407 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1410 .label = "read list",
1413 .ptr = &sDefault.readlist,
1416 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1419 .label = "write list",
1422 .ptr = &sDefault.writelist,
1425 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1428 .label = "printer admin",
1431 .ptr = &sDefault.printer_admin,
1434 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_PRINT | FLAG_DEPRECATED,
1437 .label = "force user",
1440 .ptr = &sDefault.force_user,
1443 .flags = FLAG_ADVANCED | FLAG_SHARE,
1446 .label = "force group",
1449 .ptr = &sDefault.force_group,
1452 .flags = FLAG_ADVANCED | FLAG_SHARE,
1458 .ptr = &sDefault.force_group,
1461 .flags = FLAG_ADVANCED,
1464 .label = "read only",
1467 .ptr = &sDefault.bRead_only,
1470 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE,
1473 .label = "write ok",
1476 .ptr = &sDefault.bRead_only,
1482 .label = "writeable",
1485 .ptr = &sDefault.bRead_only,
1491 .label = "writable",
1494 .ptr = &sDefault.bRead_only,
1500 .label = "acl check permissions",
1503 .ptr = &sDefault.bAclCheckPermissions,
1506 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1509 .label = "acl group control",
1512 .ptr = &sDefault.bAclGroupControl,
1515 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1518 .label = "acl map full control",
1521 .ptr = &sDefault.bAclMapFullControl,
1524 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1527 .label = "create mask",
1530 .ptr = &sDefault.iCreate_mask,
1533 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1536 .label = "create mode",
1539 .ptr = &sDefault.iCreate_mask,
1545 .label = "force create mode",
1548 .ptr = &sDefault.iCreate_force_mode,
1551 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1554 .label = "security mask",
1557 .ptr = &sDefault.iSecurity_mask,
1560 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1563 .label = "force security mode",
1566 .ptr = &sDefault.iSecurity_force_mode,
1569 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1572 .label = "directory mask",
1575 .ptr = &sDefault.iDir_mask,
1578 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1581 .label = "directory mode",
1584 .ptr = &sDefault.iDir_mask,
1587 .flags = FLAG_ADVANCED | FLAG_GLOBAL,
1590 .label = "force directory mode",
1593 .ptr = &sDefault.iDir_force_mode,
1596 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1599 .label = "directory security mask",
1602 .ptr = &sDefault.iDir_Security_mask,
1605 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1608 .label = "force directory security mode",
1611 .ptr = &sDefault.iDir_Security_force_mode,
1614 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1617 .label = "force unknown acl user",
1620 .ptr = &sDefault.bForceUnknownAclUser,
1623 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
1626 .label = "inherit permissions",
1629 .ptr = &sDefault.bInheritPerms,
1632 .flags = FLAG_ADVANCED | FLAG_SHARE,
1635 .label = "inherit acls",
1638 .ptr = &sDefault.bInheritACLS,
1641 .flags = FLAG_ADVANCED | FLAG_SHARE,
1644 .label = "inherit owner",
1647 .ptr = &sDefault.bInheritOwner,
1650 .flags = FLAG_ADVANCED | FLAG_SHARE,
1653 .label = "guest only",
1656 .ptr = &sDefault.bGuest_only,
1659 .flags = FLAG_ADVANCED | FLAG_SHARE,
1662 .label = "only guest",
1665 .ptr = &sDefault.bGuest_only,
1671 .label = "administrative share",
1674 .ptr = &sDefault.bAdministrative_share,
1677 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
1681 .label = "guest ok",
1684 .ptr = &sDefault.bGuest_ok,
1687 .flags = FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
1693 .ptr = &sDefault.bGuest_ok,
1699 .label = "only user",
1702 .ptr = &sDefault.bOnlyUser,
1705 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_DEPRECATED,
1708 .label = "hosts allow",
1711 .ptr = &sDefault.szHostsallow,
1714 .flags = FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
1717 .label = "allow hosts",
1720 .ptr = &sDefault.szHostsallow,
1726 .label = "hosts deny",
1729 .ptr = &sDefault.szHostsdeny,
1732 .flags = FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
1735 .label = "deny hosts",
1738 .ptr = &sDefault.szHostsdeny,
1744 .label = "preload modules",
1746 .p_class = P_GLOBAL,
1747 .ptr = &Globals.szPreloadModules,
1750 .flags = FLAG_ADVANCED | FLAG_GLOBAL,
1753 .label = "use kerberos keytab",
1755 .p_class = P_GLOBAL,
1756 .ptr = &Globals.bUseKerberosKeytab,
1759 .flags = FLAG_ADVANCED,
1762 {N_("Logging Options"), P_SEP, P_SEPARATOR},
1765 .label = "log level",
1767 .p_class = P_GLOBAL,
1768 .ptr = &Globals.szLogLevel,
1769 .special = handle_debug_list,
1771 .flags = FLAG_ADVANCED,
1774 .label = "debuglevel",
1776 .p_class = P_GLOBAL,
1777 .ptr = &Globals.szLogLevel,
1778 .special = handle_debug_list,
1785 .p_class = P_GLOBAL,
1786 .ptr = &Globals.syslog,
1789 .flags = FLAG_ADVANCED,
1792 .label = "syslog only",
1794 .p_class = P_GLOBAL,
1795 .ptr = &Globals.bSyslogOnly,
1798 .flags = FLAG_ADVANCED,
1801 .label = "log file",
1803 .p_class = P_GLOBAL,
1804 .ptr = &Globals.szLogFile,
1807 .flags = FLAG_ADVANCED,
1810 .label = "max log size",
1812 .p_class = P_GLOBAL,
1813 .ptr = &Globals.max_log_size,
1816 .flags = FLAG_ADVANCED,
1819 .label = "debug timestamp",
1821 .p_class = P_GLOBAL,
1822 .ptr = &Globals.bTimestampLogs,
1825 .flags = FLAG_ADVANCED,
1828 .label = "timestamp logs",
1830 .p_class = P_GLOBAL,
1831 .ptr = &Globals.bTimestampLogs,
1834 .flags = FLAG_ADVANCED,
1837 .label = "debug prefix timestamp",
1839 .p_class = P_GLOBAL,
1840 .ptr = &Globals.bDebugPrefixTimestamp,
1843 .flags = FLAG_ADVANCED,
1846 .label = "debug hires timestamp",
1848 .p_class = P_GLOBAL,
1849 .ptr = &Globals.bDebugHiresTimestamp,
1852 .flags = FLAG_ADVANCED,
1855 .label = "debug pid",
1857 .p_class = P_GLOBAL,
1858 .ptr = &Globals.bDebugPid,
1861 .flags = FLAG_ADVANCED,
1864 .label = "debug uid",
1866 .p_class = P_GLOBAL,
1867 .ptr = &Globals.bDebugUid,
1870 .flags = FLAG_ADVANCED,
1873 .label = "debug class",
1875 .p_class = P_GLOBAL,
1876 .ptr = &Globals.bDebugClass,
1879 .flags = FLAG_ADVANCED,
1882 .label = "enable core files",
1884 .p_class = P_GLOBAL,
1885 .ptr = &Globals.bEnableCoreFiles,
1888 .flags = FLAG_ADVANCED,
1891 {N_("Protocol Options"), P_SEP, P_SEPARATOR},
1894 .label = "allocation roundup size",
1897 .ptr = &sDefault.iallocation_roundup_size,
1900 .flags = FLAG_ADVANCED,
1903 .label = "aio read size",
1906 .ptr = &sDefault.iAioReadSize,
1909 .flags = FLAG_ADVANCED,
1912 .label = "aio write size",
1915 .ptr = &sDefault.iAioWriteSize,
1918 .flags = FLAG_ADVANCED,
1921 .label = "aio write behind",
1924 .ptr = &sDefault.szAioWriteBehind,
1927 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
1930 .label = "smb ports",
1932 .p_class = P_GLOBAL,
1933 .ptr = &Globals.smb_ports,
1936 .flags = FLAG_ADVANCED,
1939 .label = "large readwrite",
1941 .p_class = P_GLOBAL,
1942 .ptr = &Globals.bLargeReadwrite,
1945 .flags = FLAG_ADVANCED,
1948 .label = "max protocol",
1950 .p_class = P_GLOBAL,
1951 .ptr = &Globals.maxprotocol,
1953 .enum_list = enum_protocol,
1954 .flags = FLAG_ADVANCED,
1957 .label = "protocol",
1959 .p_class = P_GLOBAL,
1960 .ptr = &Globals.maxprotocol,
1962 .enum_list = enum_protocol,
1963 .flags = FLAG_ADVANCED,
1966 .label = "min protocol",
1968 .p_class = P_GLOBAL,
1969 .ptr = &Globals.minprotocol,
1971 .enum_list = enum_protocol,
1972 .flags = FLAG_ADVANCED,
1975 .label = "min receivefile size",
1977 .p_class = P_GLOBAL,
1978 .ptr = &Globals.iminreceivefile,
1981 .flags = FLAG_ADVANCED,
1984 .label = "read raw",
1986 .p_class = P_GLOBAL,
1987 .ptr = &Globals.bReadRaw,
1990 .flags = FLAG_ADVANCED,
1993 .label = "write raw",
1995 .p_class = P_GLOBAL,
1996 .ptr = &Globals.bWriteRaw,
1999 .flags = FLAG_ADVANCED,
2002 .label = "disable netbios",
2004 .p_class = P_GLOBAL,
2005 .ptr = &Globals.bDisableNetbios,
2008 .flags = FLAG_ADVANCED,
2011 .label = "reset on zero vc",
2013 .p_class = P_GLOBAL,
2014 .ptr = &Globals.bResetOnZeroVC,
2017 .flags = FLAG_ADVANCED,
2020 .label = "acl compatibility",
2022 .p_class = P_GLOBAL,
2023 .ptr = &Globals.iAclCompat,
2025 .enum_list = enum_acl_compat_vals,
2026 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2029 .label = "defer sharing violations",
2031 .p_class = P_GLOBAL,
2032 .ptr = &Globals.bDeferSharingViolations,
2035 .flags = FLAG_ADVANCED | FLAG_GLOBAL,
2038 .label = "ea support",
2041 .ptr = &sDefault.bEASupport,
2044 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2047 .label = "nt acl support",
2050 .ptr = &sDefault.bNTAclSupport,
2053 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2056 .label = "nt pipe support",
2058 .p_class = P_GLOBAL,
2059 .ptr = &Globals.bNTPipeSupport,
2062 .flags = FLAG_ADVANCED,
2065 .label = "nt status support",
2067 .p_class = P_GLOBAL,
2068 .ptr = &Globals.bNTStatusSupport,
2071 .flags = FLAG_ADVANCED,
2074 .label = "profile acls",
2077 .ptr = &sDefault.bProfileAcls,
2080 .flags = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
2083 .label = "announce version",
2085 .p_class = P_GLOBAL,
2086 .ptr = &Globals.szAnnounceVersion,
2089 .flags = FLAG_ADVANCED,
2092 .label = "announce as",
2094 .p_class = P_GLOBAL,
2095 .ptr = &Globals.announce_as,
2097 .enum_list = enum_announce_as,
2098 .flags = FLAG_ADVANCED,
2101 .label = "map acl inherit",
2104 .ptr = &sDefault.bMap_acl_inherit,
2107 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2110 .label = "afs share",
2113 .ptr = &sDefault.bAfs_Share,
2116 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2121 .p_class = P_GLOBAL,
2122 .ptr = &Globals.max_mux,
2125 .flags = FLAG_ADVANCED,
2128 .label = "max xmit",
2130 .p_class = P_GLOBAL,
2131 .ptr = &Globals.max_xmit,
2134 .flags = FLAG_ADVANCED,
2137 .label = "name resolve order",
2139 .p_class = P_GLOBAL,
2140 .ptr = &Globals.szNameResolveOrder,
2143 .flags = FLAG_ADVANCED | FLAG_WIZARD,
2148 .p_class = P_GLOBAL,
2149 .ptr = &Globals.max_ttl,
2152 .flags = FLAG_ADVANCED,
2155 .label = "max wins ttl",
2157 .p_class = P_GLOBAL,
2158 .ptr = &Globals.max_wins_ttl,
2161 .flags = FLAG_ADVANCED,
2164 .label = "min wins ttl",
2166 .p_class = P_GLOBAL,
2167 .ptr = &Globals.min_wins_ttl,
2170 .flags = FLAG_ADVANCED,
2173 .label = "time server",
2175 .p_class = P_GLOBAL,
2176 .ptr = &Globals.bTimeServer,
2179 .flags = FLAG_ADVANCED,
2182 .label = "unix extensions",
2184 .p_class = P_GLOBAL,
2185 .ptr = &Globals.bUnixExtensions,
2188 .flags = FLAG_ADVANCED,
2191 .label = "use spnego",
2193 .p_class = P_GLOBAL,
2194 .ptr = &Globals.bUseSpnego,
2197 .flags = FLAG_ADVANCED,
2200 .label = "client signing",
2202 .p_class = P_GLOBAL,
2203 .ptr = &Globals.client_signing,
2205 .enum_list = enum_smb_signing_vals,
2206 .flags = FLAG_ADVANCED,
2209 .label = "server signing",
2211 .p_class = P_GLOBAL,
2212 .ptr = &Globals.server_signing,
2214 .enum_list = enum_smb_signing_vals,
2215 .flags = FLAG_ADVANCED,
2218 .label = "smb encrypt",
2221 .ptr = &sDefault.ismb_encrypt,
2223 .enum_list = enum_smb_signing_vals,
2224 .flags = FLAG_ADVANCED,
2227 .label = "client use spnego",
2229 .p_class = P_GLOBAL,
2230 .ptr = &Globals.bClientUseSpnego,
2233 .flags = FLAG_ADVANCED,
2236 .label = "client ldap sasl wrapping",
2238 .p_class = P_GLOBAL,
2239 .ptr = &Globals.client_ldap_sasl_wrapping,
2241 .enum_list = enum_ldap_sasl_wrapping,
2242 .flags = FLAG_ADVANCED,
2245 .label = "enable asu support",
2247 .p_class = P_GLOBAL,
2248 .ptr = &Globals.bASUSupport,
2251 .flags = FLAG_ADVANCED,
2254 .label = "svcctl list",
2256 .p_class = P_GLOBAL,
2257 .ptr = &Globals.szServicesList,
2260 .flags = FLAG_ADVANCED,
2263 {N_("Tuning Options"), P_SEP, P_SEPARATOR},
2266 .label = "block size",
2269 .ptr = &sDefault.iBlock_size,
2272 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2275 .label = "deadtime",
2277 .p_class = P_GLOBAL,
2278 .ptr = &Globals.deadtime,
2281 .flags = FLAG_ADVANCED,
2284 .label = "getwd cache",
2286 .p_class = P_GLOBAL,
2287 .ptr = &Globals.getwd_cache,
2290 .flags = FLAG_ADVANCED,
2293 .label = "keepalive",
2295 .p_class = P_GLOBAL,
2296 .ptr = &Globals.iKeepalive,
2299 .flags = FLAG_ADVANCED,
2302 .label = "change notify",
2305 .ptr = &sDefault.bChangeNotify,
2308 .flags = FLAG_ADVANCED | FLAG_SHARE,
2311 .label = "directory name cache size",
2314 .ptr = &sDefault.iDirectoryNameCacheSize,
2317 .flags = FLAG_ADVANCED | FLAG_SHARE,
2320 .label = "kernel change notify",
2323 .ptr = &sDefault.bKernelChangeNotify,
2326 .flags = FLAG_ADVANCED | FLAG_SHARE,
2329 .label = "lpq cache time",
2331 .p_class = P_GLOBAL,
2332 .ptr = &Globals.lpqcachetime,
2335 .flags = FLAG_ADVANCED,
2338 .label = "max smbd processes",
2340 .p_class = P_GLOBAL,
2341 .ptr = &Globals.iMaxSmbdProcesses,
2344 .flags = FLAG_ADVANCED,
2347 .label = "max connections",
2350 .ptr = &sDefault.iMaxConnections,
2353 .flags = FLAG_ADVANCED | FLAG_SHARE,
2356 .label = "paranoid server security",
2358 .p_class = P_GLOBAL,
2359 .ptr = &Globals.paranoid_server_security,
2362 .flags = FLAG_ADVANCED,
2365 .label = "max disk size",
2367 .p_class = P_GLOBAL,
2368 .ptr = &Globals.maxdisksize,
2371 .flags = FLAG_ADVANCED,
2374 .label = "max open files",
2376 .p_class = P_GLOBAL,
2377 .ptr = &Globals.max_open_files,
2380 .flags = FLAG_ADVANCED,
2383 .label = "min print space",
2386 .ptr = &sDefault.iMinPrintSpace,
2389 .flags = FLAG_ADVANCED | FLAG_PRINT,
2392 .label = "socket options",
2394 .p_class = P_GLOBAL,
2395 .ptr = &Globals.szSocketOptions,
2398 .flags = FLAG_ADVANCED,
2401 .label = "strict allocate",
2404 .ptr = &sDefault.bStrictAllocate,
2407 .flags = FLAG_ADVANCED | FLAG_SHARE,
2410 .label = "strict sync",
2413 .ptr = &sDefault.bStrictSync,
2416 .flags = FLAG_ADVANCED | FLAG_SHARE,
2419 .label = "sync always",
2422 .ptr = &sDefault.bSyncAlways,
2425 .flags = FLAG_ADVANCED | FLAG_SHARE,
2428 .label = "use mmap",
2430 .p_class = P_GLOBAL,
2431 .ptr = &Globals.bUseMmap,
2434 .flags = FLAG_ADVANCED,
2437 .label = "use sendfile",
2440 .ptr = &sDefault.bUseSendfile,
2443 .flags = FLAG_ADVANCED | FLAG_SHARE,
2446 .label = "hostname lookups",
2448 .p_class = P_GLOBAL,
2449 .ptr = &Globals.bHostnameLookups,
2452 .flags = FLAG_ADVANCED,
2455 .label = "write cache size",
2458 .ptr = &sDefault.iWriteCacheSize,
2461 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_DEPRECATED,
2464 .label = "name cache timeout",
2466 .p_class = P_GLOBAL,
2467 .ptr = &Globals.name_cache_timeout,
2470 .flags = FLAG_ADVANCED,
2473 .label = "ctdbd socket",
2475 .p_class = P_GLOBAL,
2476 .ptr = &Globals.ctdbdSocket,
2479 .flags = FLAG_ADVANCED | FLAG_GLOBAL,
2482 .label = "cluster addresses",
2484 .p_class = P_GLOBAL,
2485 .ptr = &Globals.szClusterAddresses,
2488 .flags = FLAG_ADVANCED | FLAG_GLOBAL,
2491 .label = "clustering",
2493 .p_class = P_GLOBAL,
2494 .ptr = &Globals.clustering,
2497 .flags = FLAG_ADVANCED | FLAG_GLOBAL,
2500 {N_("Printing Options"), P_SEP, P_SEPARATOR},
2503 .label = "max reported print jobs",
2506 .ptr = &sDefault.iMaxReportedPrintJobs,
2509 .flags = FLAG_ADVANCED | FLAG_PRINT,
2512 .label = "max print jobs",
2515 .ptr = &sDefault.iMaxPrintJobs,
2518 .flags = FLAG_ADVANCED | FLAG_PRINT,
2521 .label = "load printers",
2523 .p_class = P_GLOBAL,
2524 .ptr = &Globals.bLoadPrinters,
2527 .flags = FLAG_ADVANCED | FLAG_PRINT,
2530 .label = "printcap cache time",
2532 .p_class = P_GLOBAL,
2533 .ptr = &Globals.PrintcapCacheTime,
2536 .flags = FLAG_ADVANCED | FLAG_PRINT,
2539 .label = "printcap name",
2541 .p_class = P_GLOBAL,
2542 .ptr = &Globals.szPrintcapname,
2545 .flags = FLAG_ADVANCED | FLAG_PRINT,
2548 .label = "printcap",
2550 .p_class = P_GLOBAL,
2551 .ptr = &Globals.szPrintcapname,
2557 .label = "printable",
2560 .ptr = &sDefault.bPrint_ok,
2563 .flags = FLAG_ADVANCED | FLAG_PRINT,
2566 .label = "print ok",
2569 .ptr = &sDefault.bPrint_ok,
2575 .label = "printing",
2578 .ptr = &sDefault.iPrinting,
2579 .special = handle_printing,
2580 .enum_list = enum_printing,
2581 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2584 .label = "cups options",
2587 .ptr = &sDefault.szCupsOptions,
2590 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2593 .label = "cups server",
2595 .p_class = P_GLOBAL,
2596 .ptr = &Globals.szCupsServer,
2599 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2602 .label = "cups connection timeout",
2604 .p_class = P_GLOBAL,
2605 .ptr = &Globals.cups_connection_timeout,
2608 .flags = FLAG_ADVANCED,
2611 .label = "iprint server",
2613 .p_class = P_GLOBAL,
2614 .ptr = &Globals.szIPrintServer,
2617 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2620 .label = "print command",
2623 .ptr = &sDefault.szPrintcommand,
2626 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2629 .label = "disable spoolss",
2631 .p_class = P_GLOBAL,
2632 .ptr = &Globals.bDisableSpoolss,
2635 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2638 .label = "enable spoolss",
2640 .p_class = P_GLOBAL,
2641 .ptr = &Globals.bDisableSpoolss,
2647 .label = "lpq command",
2650 .ptr = &sDefault.szLpqcommand,
2653 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2656 .label = "lprm command",
2659 .ptr = &sDefault.szLprmcommand,
2662 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2665 .label = "lppause command",
2668 .ptr = &sDefault.szLppausecommand,
2671 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2674 .label = "lpresume command",
2677 .ptr = &sDefault.szLpresumecommand,
2680 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2683 .label = "queuepause command",
2686 .ptr = &sDefault.szQueuepausecommand,
2689 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2692 .label = "queueresume command",
2695 .ptr = &sDefault.szQueueresumecommand,
2698 .flags = FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
2701 .label = "addport command",
2703 .p_class = P_GLOBAL,
2704 .ptr = &Globals.szAddPortCommand,
2707 .flags = FLAG_ADVANCED,
2710 .label = "enumports command",
2712 .p_class = P_GLOBAL,
2713 .ptr = &Globals.szEnumPortsCommand,
2716 .flags = FLAG_ADVANCED,
2719 .label = "addprinter command",
2721 .p_class = P_GLOBAL,
2722 .ptr = &Globals.szAddPrinterCommand,
2725 .flags = FLAG_ADVANCED,
2728 .label = "deleteprinter command",
2730 .p_class = P_GLOBAL,
2731 .ptr = &Globals.szDeletePrinterCommand,
2734 .flags = FLAG_ADVANCED,
2737 .label = "show add printer wizard",
2739 .p_class = P_GLOBAL,
2740 .ptr = &Globals.bMsAddPrinterWizard,
2743 .flags = FLAG_ADVANCED,
2746 .label = "os2 driver map",
2748 .p_class = P_GLOBAL,
2749 .ptr = &Globals.szOs2DriverMap,
2752 .flags = FLAG_ADVANCED,
2756 .label = "printer name",
2759 .ptr = &sDefault.szPrintername,
2762 .flags = FLAG_ADVANCED | FLAG_PRINT,
2768 .ptr = &sDefault.szPrintername,
2774 .label = "use client driver",
2777 .ptr = &sDefault.bUseClientDriver,
2780 .flags = FLAG_ADVANCED | FLAG_PRINT,
2783 .label = "default devmode",
2786 .ptr = &sDefault.bDefaultDevmode,
2789 .flags = FLAG_ADVANCED | FLAG_PRINT,
2792 .label = "force printername",
2795 .ptr = &sDefault.bForcePrintername,
2798 .flags = FLAG_ADVANCED | FLAG_PRINT,
2801 .label = "printjob username",
2804 .ptr = &sDefault.szPrintjobUsername,
2807 .flags = FLAG_ADVANCED | FLAG_PRINT,
2810 {N_("Filename Handling"), P_SEP, P_SEPARATOR},
2813 .label = "mangling method",
2815 .p_class = P_GLOBAL,
2816 .ptr = &Globals.szManglingMethod,
2819 .flags = FLAG_ADVANCED,
2822 .label = "mangle prefix",
2824 .p_class = P_GLOBAL,
2825 .ptr = &Globals.mangle_prefix,
2828 .flags = FLAG_ADVANCED,
2832 .label = "default case",
2835 .ptr = &sDefault.iDefaultCase,
2837 .enum_list = enum_case,
2838 .flags = FLAG_ADVANCED | FLAG_SHARE,
2841 .label = "case sensitive",
2844 .ptr = &sDefault.iCaseSensitive,
2846 .enum_list = enum_bool_auto,
2847 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2850 .label = "casesignames",
2853 .ptr = &sDefault.iCaseSensitive,
2855 .enum_list = enum_bool_auto,
2856 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL | FLAG_HIDE,
2859 .label = "preserve case",
2862 .ptr = &sDefault.bCasePreserve,
2865 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2868 .label = "short preserve case",
2871 .ptr = &sDefault.bShortCasePreserve,
2874 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2877 .label = "mangling char",
2880 .ptr = &sDefault.magic_char,
2883 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2886 .label = "hide dot files",
2889 .ptr = &sDefault.bHideDotFiles,
2892 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2895 .label = "hide special files",
2898 .ptr = &sDefault.bHideSpecialFiles,
2901 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2904 .label = "hide unreadable",
2907 .ptr = &sDefault.bHideUnReadable,
2910 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2913 .label = "hide unwriteable files",
2916 .ptr = &sDefault.bHideUnWriteableFiles,
2919 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2922 .label = "delete veto files",
2925 .ptr = &sDefault.bDeleteVetoFiles,
2928 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2931 .label = "veto files",
2934 .ptr = &sDefault.szVetoFiles,
2937 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2940 .label = "hide files",
2943 .ptr = &sDefault.szHideFiles,
2946 .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
2949 .label = "veto oplock files",