1 /* 2 Unix SMB/CIFS implementation. 3 4 type definitions for loadparm 5 6 Copyright (C) Karl Auer 1993-1998 7 8 Largely re-written by Andrew Tridgell, September 1994 9 10 Copyright (C) Simo Sorce 2001 11 Copyright (C) Alexander Bokovoy 2002 12 Copyright (C) Stefan (metze) Metzmacher 2002 13 Copyright (C) Jim McDonough (jmcd@us.ibm.com) 2003. 14 Copyright (C) James Myers 2003 <myersjj@samba.org> 15 16 This program is free software; you can redistribute it and/or modify 17 it under the terms of the GNU General Public License as published by 18 the Free Software Foundation; either version 3 of the License, or 19 (at your option) any later version. 20 21 This program is distributed in the hope that it will be useful, 22 but WITHOUT ANY WARRANTY; without even the implied warranty of 23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 24 GNU General Public License for more details. 25 26 You should have received a copy of the GNU General Public License 27 along with this program. If not, see <http://www.gnu.org/licenses/>. 28 */ 29 30 #ifndef _LOADPARM_H 31 #define _LOADPARM_H 32 33 #include <talloc.h> 34 35 struct parmlist_entry { 36 struct parmlist_entry *prev, *next; 37 char *key; 38 char *value; 39 char **list; /* For the source3 parametric options, to save the parsed list */ 40 int priority; 41 }; 42 43 struct parmlist { 44 struct parmlist_entry *entries; 45 }; 46 47 /* the following are used by loadparm for option lists */ 48 typedef enum { 49 P_BOOL,P_BOOLREV,P_CHAR,P_INTEGER,P_OCTAL,P_LIST, 50 P_STRING,P_USTRING,P_ENUM,P_BYTES,P_CMDLIST 51 } parm_type; 52 53 typedef enum { 54 P_LOCAL,P_GLOBAL,P_NONE 55 } parm_class; 56 57 struct enum_list { 58 int value; 59 const char *name; 60 }; 61 62 struct loadparm_service; 63 struct loadparm_context { 64 const char *szConfigFile; 65 struct loadparm_global *globals; 66 struct loadparm_service **services; 67 struct loadparm_service *sDefault; 68 struct smb_iconv_handle *iconv_handle; 69 int iNumServices; 70 struct loadparm_service *currentService; 71 bool bInGlobalSection; 72 struct file_lists *file_lists; 73 unsigned int *flags; 74 bool loaded; 75 bool refuse_free; 76 bool global; /* Is this the global context, which may set 77 * global variables such as debug level etc? */ 78 const struct loadparm_s3_helpers *s3_fns; 79 }; 80 81 struct parm_struct { 82 const char *label; 83 parm_type type; 84 parm_class p_class; 85 offset_t offset; 86 bool (*special)(struct loadparm_context *lpcfg_ctx, 87 struct loadparm_service *, const char *, char **); 88 const struct enum_list *enum_list; 89 unsigned flags; 90 union { 91 bool bvalue; 92 int ivalue; 93 char *svalue; 94 char cvalue; 95 char **lvalue; 96 } def; 97 }; 98 99 extern struct parm_struct parm_table[]; 100 101 struct file_lists { 102 struct file_lists *next; 103 char *name; 104 char *subfname; 105 time_t modtime; 106 }; 107 108 #define DEFAULT_NAME_RESOLVE_ORDER "lmhosts wins host bcast" 109 #define FLAG_DEPRECATED 0x1000 /* options that should no longer be used */ 110 #define FLAG_SYNONYM 0x2000 /* options that is a synonym of another option */ 111 #define FLAG_CMDLINE 0x10000 /* option has been overridden */ 112 #define FLAG_DEFAULT 0x20000 /* this option was a default */ 113 114 /* This defines the section name in the configuration file that will 115 refer to the special "printers" service */ 116 #ifndef PRINTERS_NAME 117 #define PRINTERS_NAME "printers" 118 #endif 119 120 /* This defines the section name in the configuration file that will 121 refer to the special "homes" service */ 122 #ifndef HOMES_NAME 123 #define HOMES_NAME "homes" 124 #endif 125 126 /* This defines the section name in the configuration file that will contain */ 127 /* global parameters - that is, parameters relating to the whole server, not */ 128 /* just services. This name is then reserved, and may not be used as a */ 129 /* a service name. It will default to "global" if not defined here. */ 130 #ifndef GLOBAL_NAME 131 #define GLOBAL_NAME "global" 132 #define GLOBAL_NAME2 "globals" 133 #endif 134 135 /* The default workgroup - usually overridden in smb.conf */ 136 #ifndef DEFAULT_WORKGROUP 137 #define DEFAULT_WORKGROUP "WORKGROUP" 138 #endif 139 140 /* types of configuration backends for loadparm */ 141 #define CONFIG_BACKEND_FILE 0 142 #define CONFIG_BACKEND_REGISTRY 1 143 144 /* 145 Do you want session setups at user level security with a invalid 146 password to be rejected or allowed in as guest? WinNT rejects them 147 but it can be a pain as it means "net view" needs to use a password 148 149 You have 3 choices in the setting of map_to_guest: 150 151 "NEVER_MAP_TO_GUEST" means session setups with an invalid password 152 are rejected. This is the default. 153 154 "MAP_TO_GUEST_ON_BAD_USER" means session setups with an invalid password 155 are rejected, unless the username does not exist, in which case it 156 is treated as a guest login 157 158 "MAP_TO_GUEST_ON_BAD_PASSWORD" means session setups with an invalid password 159 are treated as a guest login 160 161 Note that map_to_guest only has an effect in user or server 162 level security. 163 */ 164 165 #define NEVER_MAP_TO_GUEST 0 166 #define MAP_TO_GUEST_ON_BAD_USER 1 167 #define MAP_TO_GUEST_ON_BAD_PASSWORD 2 168 #define MAP_TO_GUEST_ON_BAD_UID 3 169 170 /* 171 * This should be under the HAVE_KRB5 flag but since they're used 172 * in lp_kerberos_method(), they ned to be always available 173 * If you add any entries to KERBEROS_VERIFY defines, please modify USE.*KEYTAB macros 174 * so they remain accurate. 175 */ 176 177 #define KERBEROS_VERIFY_SECRETS 0 178 #define KERBEROS_VERIFY_SYSTEM_KEYTAB 1 179 #define KERBEROS_VERIFY_DEDICATED_KEYTAB 2 180 #define KERBEROS_VERIFY_SECRETS_AND_KEYTAB 3 181 182 #define KERBEROS_ETYPES_ALL 0 183 #define KERBEROS_ETYPES_STRONG 1 184 #define KERBEROS_ETYPES_LEGACY 2 185 186 /* ACL compatibility */ 187 enum acl_compatibility {ACL_COMPAT_AUTO, ACL_COMPAT_WINNT, ACL_COMPAT_WIN2K}; 188 189 /* printing types */ 190 enum printing_types {PRINT_BSD,PRINT_SYSV,PRINT_AIX,PRINT_HPUX, 191 PRINT_QNX,PRINT_PLP,PRINT_LPRNG,PRINT_SOFTQ, 192 PRINT_CUPS,PRINT_LPRNT,PRINT_LPROS2,PRINT_IPRINT 193 #if defined(DEVELOPER) || defined(ENABLE_SELFTEST) 194 ,PRINT_TEST,PRINT_VLP 195 #endif /* DEVELOPER */ 196 }; 197 198 #define SERVER_TCP_LOW_PORT 49152 199 #define SERVER_TCP_HIGH_PORT 65535 200 201 #define SERVER_TCP_PORT_MIN 1024 202 #define SERVER_TCP_PORT_MAX 65535 203 204 205 206 /* ads auth control flags */ 207 #define ADS_AUTH_DISABLE_KERBEROS 0x0001 208 #define ADS_AUTH_NO_BIND 0x0002 209 #define ADS_AUTH_ANON_BIND 0x0004 210 #define ADS_AUTH_SIMPLE_BIND 0x0008 211 #define ADS_AUTH_ALLOW_NTLMSSP 0x0010 212 #define ADS_AUTH_SASL_SIGN 0x0020 213 #define ADS_AUTH_SASL_SEAL 0x0040 214 #define ADS_AUTH_SASL_FORCE 0x0080 215 #define ADS_AUTH_USER_CREDS 0x0100 216 217 enum ldap_server_require_strong_auth { 218 LDAP_SERVER_REQUIRE_STRONG_AUTH_NO, 219 LDAP_SERVER_REQUIRE_STRONG_AUTH_ALLOW_SASL_OVER_TLS, 220 LDAP_SERVER_REQUIRE_STRONG_AUTH_YES, 221 }; 222 223 /* DNS update settings */ 224 enum dns_update_settings {DNS_UPDATE_OFF, DNS_UPDATE_ON, DNS_UPDATE_SIGNED}; 225 226 /* MDNS name sources */ 227 enum mdns_name_values {MDNS_NAME_NETBIOS, MDNS_NAME_MDNS}; 228 229 /* LDAP SSL options */ 230 enum ldap_ssl_types {LDAP_SSL_OFF, LDAP_SSL_START_TLS}; 231 232 /* LDAP PASSWD SYNC methods */ 233 enum ldap_passwd_sync_types {LDAP_PASSWD_SYNC_ON, LDAP_PASSWD_SYNC_OFF, LDAP_PASSWD_SYNC_ONLY}; 234 235 /* map readonly options */ 236 enum mapreadonly_options {MAP_READONLY_NO, MAP_READONLY_YES, MAP_READONLY_PERMISSIONS}; 237 238 /* case handling */ 239 enum case_handling {CASE_LOWER,CASE_UPPER}; 240 241 /* inherit owner options */ 242 enum inheritowner_options { 243 INHERIT_OWNER_NO, 244 INHERIT_OWNER_WINDOWS_AND_UNIX, 245 INHERIT_OWNER_UNIX_ONLY 246 }; 247 248 /* mangled names options */ 249 enum mangled_names_options {MANGLED_NAMES_NO, MANGLED_NAMES_YES, MANGLED_NAMES_ILLEGAL}; 250 251 /* Spotlight backend options */ 252 enum spotlight_backend_options { 253 SPOTLIGHT_BACKEND_NOINDEX, 254 SPOTLIGHT_BACKEND_TRACKER, 255 SPOTLIGHT_BACKEND_ES, 256 }; 257 258 /* 259 * Default passwd chat script. 260 */ 261 #ifndef DEFAULT_PASSWD_CHAT 262 #define DEFAULT_PASSWD_CHAT "*new*password* %n\\n *new*password* %n\\n *changed*" 263 #endif 264 265 /* Max number of jobs per print queue. */ 266 #ifndef PRINT_MAX_JOBID 267 #define PRINT_MAX_JOBID 10000 268 #endif 269 270 /* the default guest account - allow override via CFLAGS */ 271 #ifndef GUEST_ACCOUNT 272 #define GUEST_ACCOUNT "nobody" 273 #endif 274 275 /* SMB2 defaults */ 276 #define DEFAULT_SMB2_MAX_READ (8*1024*1024) 277 #define DEFAULT_SMB2_MAX_WRITE (8*1024*1024) 278 #define DEFAULT_SMB2_MAX_TRANSACT (8*1024*1024) 279 #define DEFAULT_SMB2_MAX_CREDITS 8192 280 281 #define LOADPARM_EXTRA_LOCALS \ 282 int usershare; \ 283 struct timespec usershare_last_mod; \ 284 char *szService; \ 285 struct parmlist_entry *param_opt; \ 286 struct bitmap *copymap; \ 287 char dummy[3]; /* for alignment */ 288 289 #include "lib/param/param_local.h" 290 291 #define LOADPARM_EXTRA_GLOBALS \ 292 struct parmlist_entry *param_opt; \ 293 char *dnsdomain; \ 294 int rpc_low_port; \ 295 int rpc_high_port; 296 297 const char* server_role_str(uint32_t role); 298 int lp_find_server_role(int server_role, int security, int domain_logons, int domain_master); 299 int lp_find_security(int server_role, int security); 300 bool lp_is_security_and_server_role_valid(int server_role, int security); 301 302 struct loadparm_global * get_globals(void); 303 unsigned int * get_flags(void); 304 int getservicebyname(const char *, struct loadparm_service *); 305 bool lp_include(struct loadparm_context *, struct loadparm_service *, 306 const char *, char **); 307 bool lp_do_section(const char *pszSectionName, void *userdata); 308 bool store_lp_set_cmdline(const char *pszParmName, const char *pszParmValue); 309 310 int num_parameters(void); 311 312 struct loadparm_substitution; 313 #ifdef LOADPARM_SUBSTITUTION_INTERNALS 314 struct loadparm_substitution { 315 char *(*substituted_string_fn)( 316 TALLOC_CTX *mem_ctx, 317 const struct loadparm_substitution *lp_sub, 318 const char *raw_value, 319 void *private_data); 320 void *private_data; 321 }; 322 #endif /* LOADPARM_SUBSTITUTION_INTERNALS */ 323 324 const struct loadparm_substitution *lpcfg_noop_substitution(void); 325 char *lpcfg_substituted_string(TALLOC_CTX *mem_ctx, 326 const struct loadparm_substitution *lp_sub, 327 const char *raw_value); 328 329 #endif /* _LOADPARM_H */ 330