param: rename CupsEncrypt -> cups_encrypt
[kai/samba-autobuild/.git] / source3 / param / loadparm.c
index 52ffbccd3c67a09388ef5f2f716edce3229405e1..54a2406738221842e4a3889ee94dce31a0d7861c 100644 (file)
@@ -69,6 +69,7 @@
 #include "dbwrap/dbwrap.h"
 #include "dbwrap/dbwrap_rbt.h"
 #include "../lib/util/bitmap.h"
+#include "librpc/gen_ndr/nbt.h"
 
 #ifdef HAVE_SYS_SYSCTL_H
 #include <sys/sysctl.h>
@@ -157,7 +158,7 @@ static struct loadparm_service sDefault =
        .aio_write_behind = NULL,
        .dfree_command = NULL,
        .min_print_space = 0,
-       .iMaxPrintJobs = 1000,
+       .max_print_jobs = 1000,
        .max_reported_print_jobs = 0,
        .write_cache_size = 0,
        .create_mask = 0744,
@@ -184,6 +185,7 @@ static struct loadparm_service sDefault =
        .access_based_share_enum = false,
        .bAvailable = true,
        .read_only = true,
+       .spotlight = false,
        .guest_only = false,
        .administrative_share = false,
        .guest_ok = false,
@@ -202,10 +204,11 @@ static struct loadparm_service sDefault =
        .level2_oplocks = true,
        .only_user = false,
        .mangled_names = true,
-       .bWidelinks = false,
+       .wide_links = false,
        .follow_symlinks = true,
        .sync_always = false,
        .strict_allocate = false,
+       .strict_rename = false,
        .strict_sync = false,
        .mangling_char = '~',
        .copymap = NULL,
@@ -221,6 +224,7 @@ static struct loadparm_service sDefault =
        .inherit_acls = false,
        .inherit_owner = false,
        .msdfs_root = false,
+       .msdfs_shuffle_referrals = false,
        .use_client_driver = false,
        .default_devmode = true,
        .force_printername = false,
@@ -235,8 +239,6 @@ static struct loadparm_service sDefault =
        .acl_map_full_control = true,
        .acl_group_control = false,
        .acl_allow_execute_always = false,
-       .change_notify = true,
-       .kernel_change_notify = true,
        .allocation_roundup_size = SMB_ROUNDUP_ALLOCATION_SIZE,
        .aio_read_size = 0,
        .aio_write_size = 0,
@@ -558,7 +560,7 @@ static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals)
 
        init_printer_values(lp_ctx, Globals.ctx, &sDefault);
 
-       sDefault.ntvfs_handler = (const char **)str_list_make_v3(NULL, "unixuid default", NULL);
+       sDefault.ntvfs_handler = str_list_make_v3_const(NULL, "unixuid default", NULL);
 
        DEBUG(3, ("Initialising global parameters\n"));
 
@@ -616,7 +618,7 @@ static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals)
        string_set(Globals.ctx, &Globals.logon_home, "\\\\%N\\%U");
        string_set(Globals.ctx, &Globals.logon_path, "\\\\%N\\%U\\profile");
 
-       Globals.name_resolve_order = (const char **)str_list_make_v3(NULL, "lmhosts wins host bcast", NULL);
+       Globals.name_resolve_order = str_list_make_v3_const(NULL, "lmhosts wins host bcast", NULL);
        string_set(Globals.ctx, &Globals.password_server, "*");
 
        Globals.algorithmic_rid_base = BASE_RID;
@@ -640,7 +642,7 @@ static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals)
        Globals.large_readwrite = true;
        Globals.max_log_size = 5000;
        Globals.max_open_files = max_open_files();
-       Globals.server_max_protocol = PROTOCOL_SMB3_00;
+       Globals.server_max_protocol = PROTOCOL_SMB3_11;
        Globals.server_min_protocol = PROTOCOL_LANMAN1;
        Globals._client_max_protocol = PROTOCOL_DEFAULT;
        Globals.client_min_protocol = PROTOCOL_CORE;
@@ -687,6 +689,7 @@ static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals)
        Globals.passwd_chat_timeout = 2; /* 2 second default. */
        Globals.nt_pipe_support = true; /* Do NT pipes by default. */
        Globals.nt_status_support = true; /* Use NT status by default. */
+       Globals.smbd_profiling_level = 0;
        Globals.stat_cache = true;      /* use stat cache by default */
        Globals.max_stat_cache_size = 256; /* 256k by default */
        Globals.restrict_anonymous = 0;
@@ -711,18 +714,21 @@ static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals)
        Globals.reset_on_zero_vc = false;
        Globals.log_writeable_files_on_exit = false;
        Globals.create_krb5_conf = true;
-       Globals.winbindMaxDomainConnections = 1;
+       Globals._winbind_max_domain_connections = 1;
 
        /* hostname lookups can be very expensive and are broken on
           a large number of sites (tridge) */
        Globals.hostname_lookups = false;
 
+       Globals.change_notify = true,
+       Globals.kernel_change_notify = true,
+
        string_set(Globals.ctx, &Globals.passdb_backend, "tdbsam");
        string_set(Globals.ctx, &Globals.ldap_suffix, "");
-       string_set(Globals.ctx, &Globals.szLdapMachineSuffix, "");
-       string_set(Globals.ctx, &Globals.szLdapUserSuffix, "");
-       string_set(Globals.ctx, &Globals.szLdapGroupSuffix, "");
-       string_set(Globals.ctx, &Globals.szLdapIdmapSuffix, "");
+       string_set(Globals.ctx, &Globals._ldap_machine_suffix, "");
+       string_set(Globals.ctx, &Globals._ldap_user_suffix, "");
+       string_set(Globals.ctx, &Globals._ldap_group_suffix, "");
+       string_set(Globals.ctx, &Globals._ldap_idmap_suffix, "");
 
        string_set(Globals.ctx, &Globals.ldap_admin_dn, "");
        Globals.ldap_ssl = LDAP_SSL_START_TLS;
@@ -801,7 +807,7 @@ static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals)
        Globals.winbind_trusted_domains_only = false;
        Globals.winbind_nested_groups = true;
        Globals.winbind_expand_groups = 0;
-       Globals.winbind_nss_info = (const char **)str_list_make_v3(NULL, "template", NULL);
+       Globals.winbind_nss_info = str_list_make_v3_const(NULL, "template", NULL);
        Globals.winbind_refresh_tickets = false;
        Globals.winbind_offline_logon = false;
 
@@ -819,7 +825,7 @@ static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals)
        Globals.server_signing = SMB_SIGNING_DEFAULT;
 
        Globals.defer_sharing_violations = true;
-       Globals.smb_ports = (const char **)str_list_make_v3(NULL, SMB_PORTS, NULL);
+       Globals.smb_ports = str_list_make_v3_const(NULL, SMB_PORTS, NULL);
 
        Globals.enable_privileges = true;
        Globals.host_msdfs        = true;
@@ -844,7 +850,7 @@ static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals)
        /* By default no shares out of the registry */
        Globals.registry_shares = false;
 
-       Globals.iminreceivefile = 0;
+       Globals.min_receivefile_size = 0;
 
        Globals.map_untrusted_to_domain = false;
        Globals.multicast_dns_register = true;
@@ -852,23 +858,25 @@ static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals)
        Globals.smb2_max_read = DEFAULT_SMB2_MAX_READ;
        Globals.smb2_max_write = DEFAULT_SMB2_MAX_WRITE;
        Globals.smb2_max_trans = DEFAULT_SMB2_MAX_TRANSACT;
-       Globals.ismb2_max_credits = DEFAULT_SMB2_MAX_CREDITS;
+       Globals.smb2_max_credits = DEFAULT_SMB2_MAX_CREDITS;
+       Globals.smb2_leases = false;
 
        string_set(Globals.ctx, &Globals.ncalrpc_dir, get_dyn_NCALRPCDIR());
 
-       Globals.server_services = (const char **)str_list_make_v3(NULL, "s3fs rpc nbt wrepl ldap cldap kdc drepl winbindd ntp_signd kcc dnsupdate dns", NULL);
+       Globals.server_services = str_list_make_v3_const(NULL, "s3fs rpc nbt wrepl ldap cldap kdc drepl winbindd ntp_signd kcc dnsupdate dns", NULL);
 
-       Globals.dcerpc_endpoint_servers = (const char **)str_list_make_v3(NULL, "epmapper wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi dssetup unixinfo browser eventlog6 backupkey dnsserver", NULL);
+       Globals.dcerpc_endpoint_servers = str_list_make_v3_const(NULL, "epmapper wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi dssetup unixinfo browser eventlog6 backupkey dnsserver", NULL);
 
        Globals.tls_enabled = true;
 
        string_set(Globals.ctx, &Globals._tls_keyfile, "tls/key.pem");
        string_set(Globals.ctx, &Globals._tls_certfile, "tls/cert.pem");
        string_set(Globals.ctx, &Globals._tls_cafile, "tls/ca.pem");
+       string_set(Globals.ctx, &Globals.tls_priority, "NORMAL:-VERS-SSL3.0");
 
        string_set(Globals.ctx, &Globals.share_backend, "classic");
 
-       Globals.iPreferredMaster = Auto;
+       Globals._preferred_master = Auto;
 
        Globals.allow_dns_updates = DNS_UPDATE_SIGNED;
 
@@ -880,32 +888,32 @@ static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals)
        if (s == NULL) {
                smb_panic("init_globals: ENOMEM");
        }
-       Globals.samba_kcc_command = (const char **)str_list_make_v3(NULL, s, NULL);
+       Globals.samba_kcc_command = str_list_make_v3_const(NULL, s, NULL);
        TALLOC_FREE(s);
 
        s = talloc_asprintf(talloc_tos(), "%s/samba_dnsupdate", get_dyn_SCRIPTSBINDIR());
        if (s == NULL) {
                smb_panic("init_globals: ENOMEM");
        }
-       Globals.dns_update_command = (const char **)str_list_make_v3(NULL, s, NULL);
+       Globals.dns_update_command = str_list_make_v3_const(NULL, s, NULL);
        TALLOC_FREE(s);
 
        s = talloc_asprintf(talloc_tos(), "%s/samba_spnupdate", get_dyn_SCRIPTSBINDIR());
        if (s == NULL) {
                smb_panic("init_globals: ENOMEM");
        }
-       Globals.spn_update_command = (const char **)str_list_make_v3(NULL, s, NULL);
+       Globals.spn_update_command = str_list_make_v3_const(NULL, s, NULL);
        TALLOC_FREE(s);
 
-       Globals.nsupdate_command = (const char **)str_list_make_v3(NULL, "/usr/bin/nsupdate -g", NULL);
+       Globals.nsupdate_command = str_list_make_v3_const(NULL, "/usr/bin/nsupdate -g", NULL);
 
-       Globals.rndc_command = (const char **)str_list_make_v3(NULL, "/usr/sbin/rndc", NULL);
+       Globals.rndc_command = str_list_make_v3_const(NULL, "/usr/sbin/rndc", NULL);
 
        Globals.cldap_port = 389;
 
-       Globals.dgram_port = 138;
+       Globals.dgram_port = NBT_DGRAM_SERVICE_PORT;
 
-       Globals.nbt_port = 137;
+       Globals.nbt_port = NBT_NAME_SERVICE_PORT;
 
        Globals.krb5_port = 88;
 
@@ -1011,32 +1019,22 @@ char *lp_ ## fn_name(TALLOC_CTX *ctx,int i) {return(lp_string((ctx), (LP_SNUM_OK
 #define FN_LOCAL_PARM_CHAR(fn_name,val) \
  char lp_ ## fn_name(const struct share_params *p) {return(LP_SNUM_OK(p->service)? ServicePtrs[(p->service)]->val : sDefault.val);}
 
-static FN_GLOBAL_INTEGER(winbind_max_domain_connections_int,
-                 winbindMaxDomainConnections)
-
 int lp_winbind_max_domain_connections(void)
 {
        if (lp_winbind_offline_logon() &&
-           lp_winbind_max_domain_connections_int() > 1) {
+           lp__winbind_max_domain_connections() > 1) {
                DEBUG(1, ("offline logons active, restricting max domain "
                          "connections to 1\n"));
                return 1;
        }
-       return MAX(1, lp_winbind_max_domain_connections_int());
+       return MAX(1, lp__winbind_max_domain_connections());
 }
 
-int lp_smb2_max_credits(void)
-{
-       if (Globals.ismb2_max_credits == 0) {
-               Globals.ismb2_max_credits = DEFAULT_SMB2_MAX_CREDITS;
-       }
-       return Globals.ismb2_max_credits;
-}
 int lp_cups_encrypt(void)
 {
        int result = 0;
 #ifdef HAVE_HTTPCONNECTENCRYPT
-       switch (Globals.CupsEncrypt) {
+       switch (Globals.cups_encrypt) {
                case Auto:
                        result = HTTP_ENCRYPT_REQUIRED;
                        break;
@@ -1162,7 +1160,7 @@ const char **lp_parm_string_list(int snum, const char *type, const char *option,
                data->list = str_list_make_v3(NULL, data->value, NULL);
        }
 
-       return (const char **)data->list;
+       return discard_const_p(const char *, data->list);
 }
 
 /* Return parametric option from a given service. Type is a part of option before ':' */
@@ -1390,7 +1388,7 @@ static bool hash_a_service(const char *name, int idx)
        canon_name = canonicalize_servicename(talloc_tos(), name );
 
        dbwrap_store_bystring(ServiceHash, canon_name,
-                             make_tdb_data((uint8 *)&idx, sizeof(idx)),
+                             make_tdb_data((uint8_t *)&idx, sizeof(idx)),
                              TDB_REPLACE);
 
        TALLOC_FREE(canon_name);
@@ -1562,22 +1560,6 @@ bool lp_parameter_is_global(const char *pszParmName)
        return false;
 }
 
-/**************************************************************************
- Check whether the given name is the canonical name of a parameter.
- Returns false if it is not a valid parameter Name.
- For parametric options, true is returned.
-**************************************************************************/
-
-bool lp_parameter_is_canonical(const char *parm_name)
-{
-       if (!lp_parameter_is_valid(parm_name)) {
-               return false;
-       }
-
-       return (lpcfg_map_parameter(parm_name) ==
-               map_parameter_canonical(parm_name, NULL));
-}
-
 /**************************************************************************
  Determine the canonical name for a parameter.
  Indicate when it is an inverse (boolean) synonym instead of a
@@ -1663,7 +1645,7 @@ static int map_parameter_canonical(const char *pszParmName, bool *inverse)
        bool loc_inverse = false;
 
        parm_num = lpcfg_map_parameter(pszParmName);
-       if ((parm_num < 0) || !(parm_table[parm_num].flags & FLAG_HIDE)) {
+       if ((parm_num < 0) || !(parm_table[parm_num].flags & FLAG_SYNONYM)) {
                /* invalid, parametric or no canidate for synonyms ... */
                goto done;
        }
@@ -1693,8 +1675,8 @@ static bool is_synonym_of(int parm1, int parm2, bool *inverse)
 {
        if ((parm_table[parm1].offset == parm_table[parm2].offset) &&
            (parm_table[parm1].p_class == parm_table[parm2].p_class) &&
-           (parm_table[parm1].flags & FLAG_HIDE) &&
-           !(parm_table[parm2].flags & FLAG_HIDE))
+           (parm_table[parm1].flags & FLAG_SYNONYM) &&
+           !(parm_table[parm2].flags & FLAG_SYNONYM))
        {
                if (inverse != NULL) {
                        if ((parm_table[parm1].type == P_BOOLREV) &&
@@ -1724,13 +1706,9 @@ static void show_parameter(int parmIndex)
        bool inverse;
        const char *type[] = { "P_BOOL", "P_BOOLREV", "P_CHAR", "P_INTEGER",
                "P_OCTAL", "P_LIST", "P_STRING", "P_USTRING",
-               "P_ENUM", "P_SEP"};
-       unsigned flags[] = { FLAG_BASIC, FLAG_SHARE, FLAG_PRINT, FLAG_GLOBAL,
-               FLAG_WIZARD, FLAG_ADVANCED, FLAG_DEVELOPER, FLAG_DEPRECATED,
-               FLAG_HIDE};
-       const char *flag_names[] = { "FLAG_BASIC", "FLAG_SHARE", "FLAG_PRINT",
-               "FLAG_GLOBAL", "FLAG_WIZARD", "FLAG_ADVANCED", "FLAG_DEVELOPER",
-               "FLAG_DEPRECATED", "FLAG_HIDE", NULL};
+               "P_ENUM", "P_BYTES", "P_CMDLIST" };
+       unsigned flags[] = { FLAG_DEPRECATED, FLAG_SYNONYM };
+       const char *flag_names[] = { "FLAG_DEPRECATED", "FLAG_SYNONYM", NULL};
 
        printf("%s=%s", parm_table[parmIndex].label,
               type[parm_table[parmIndex].type]);
@@ -2373,32 +2351,32 @@ static const char *append_ldap_suffix(TALLOC_CTX *ctx, const char *str )
 
 const char *lp_ldap_machine_suffix(TALLOC_CTX *ctx)
 {
-       if (Globals.szLdapMachineSuffix[0])
-               return append_ldap_suffix(ctx, Globals.szLdapMachineSuffix);
+       if (Globals._ldap_machine_suffix[0])
+               return append_ldap_suffix(ctx, Globals._ldap_machine_suffix);
 
        return lp_string(ctx, Globals.ldap_suffix);
 }
 
 const char *lp_ldap_user_suffix(TALLOC_CTX *ctx)
 {
-       if (Globals.szLdapUserSuffix[0])
-               return append_ldap_suffix(ctx, Globals.szLdapUserSuffix);
+       if (Globals._ldap_user_suffix[0])
+               return append_ldap_suffix(ctx, Globals._ldap_user_suffix);
 
        return lp_string(ctx, Globals.ldap_suffix);
 }
 
 const char *lp_ldap_group_suffix(TALLOC_CTX *ctx)
 {
-       if (Globals.szLdapGroupSuffix[0])
-               return append_ldap_suffix(ctx, Globals.szLdapGroupSuffix);
+       if (Globals._ldap_group_suffix[0])
+               return append_ldap_suffix(ctx, Globals._ldap_group_suffix);
 
        return lp_string(ctx, Globals.ldap_suffix);
 }
 
 const char *lp_ldap_idmap_suffix(TALLOC_CTX *ctx)
 {
-       if (Globals.szLdapIdmapSuffix[0])
-               return append_ldap_suffix(ctx, Globals.szLdapIdmapSuffix);
+       if (Globals._ldap_idmap_suffix[0])
+               return append_ldap_suffix(ctx, Globals._ldap_idmap_suffix);
 
        return lp_string(ctx, Globals.ldap_suffix);
 }
@@ -2835,8 +2813,6 @@ static void lp_save_defaults(void)
                                parm_table[i].def.ivalue =
                                        *(int *)lp_parm_ptr(NULL, &parm_table[i]);
                                break;
-                       case P_SEP:
-                               break;
                }
        }
 
@@ -3622,6 +3598,22 @@ static bool lp_is_in_client(void)
     return in_client;
 }
 
+static void lp_enforce_ad_dc_settings(void)
+{
+       lp_do_parameter(GLOBAL_SECTION_SNUM, "passdb backend", "samba_dsdb");
+       lp_do_parameter(GLOBAL_SECTION_SNUM,
+                       "winbindd:use external pipes", "true");
+       lp_do_parameter(GLOBAL_SECTION_SNUM, "rpc_server:default", "external");
+       lp_do_parameter(GLOBAL_SECTION_SNUM, "rpc_server:svcctl", "embedded");
+       lp_do_parameter(GLOBAL_SECTION_SNUM, "rpc_server:srvsvc", "embedded");
+       lp_do_parameter(GLOBAL_SECTION_SNUM, "rpc_server:eventlog", "embedded");
+       lp_do_parameter(GLOBAL_SECTION_SNUM, "rpc_server:ntsvcs", "embedded");
+       lp_do_parameter(GLOBAL_SECTION_SNUM, "rpc_server:winreg", "embedded");
+       lp_do_parameter(GLOBAL_SECTION_SNUM, "rpc_server:spoolss", "embedded");
+       lp_do_parameter(GLOBAL_SECTION_SNUM, "rpc_daemon:spoolssd", "embedded");
+       lp_do_parameter(GLOBAL_SECTION_SNUM, "rpc_server:tcpip", "no");
+}
+
 /***************************************************************************
  Load the services array from the services file. Return true on success,
  false on failure.
@@ -3631,7 +3623,7 @@ static bool lp_load_ex(const char *pszFname,
                       bool global_only,
                       bool save_defaults,
                       bool add_ipc,
-                      bool initialize_globals,
+                      bool reinit_globals,
                       bool allow_include_registry,
                       bool load_all_shares)
 {
@@ -3650,7 +3642,7 @@ static bool lp_load_ex(const char *pszFname,
 
        lp_ctx = setup_lp_context(talloc_tos());
 
-       init_globals(lp_ctx, initialize_globals);
+       init_globals(lp_ctx, reinit_globals);
 
        free_file_list();
 
@@ -3659,7 +3651,7 @@ static bool lp_load_ex(const char *pszFname,
                lp_save_defaults();
        }
 
-       if (!initialize_globals) {
+       if (!reinit_globals) {
                free_param_opts(&Globals.param_opt);
                apply_lp_set_cmdline();
        }
@@ -3710,7 +3702,7 @@ static bool lp_load_ex(const char *pszFname,
 
                        lp_kill_all_services();
                        ok = lp_load_ex(pszFname, global_only, save_defaults,
-                                       add_ipc, initialize_globals,
+                                       add_ipc, reinit_globals,
                                        allow_include_registry,
                                        load_all_shares);
                        TALLOC_FREE(frame);
@@ -3769,23 +3761,11 @@ static bool lp_load_ex(const char *pszFname,
        /*
         * We run this check once the whole smb.conf is parsed, to
         * force some settings for the standard way a AD DC is
-        * operated.  We may changed these as our code evolves, which
+        * operated.  We may change these as our code evolves, which
         * is why we force these settings.
         */
        if (lp_server_role() == ROLE_ACTIVE_DIRECTORY_DC) {
-               lp_do_parameter(-1, "passdb backend", "samba_dsdb");
-
-               lp_do_parameter(-1, "winbindd:use external pipes", "true");
-
-               lp_do_parameter(-1, "rpc_server:default", "external");
-               lp_do_parameter(-1, "rpc_server:svcctl", "embedded");
-               lp_do_parameter(-1, "rpc_server:srvsvc", "embedded");
-               lp_do_parameter(-1, "rpc_server:eventlog", "embedded");
-               lp_do_parameter(-1, "rpc_server:ntsvcs", "embedded");
-               lp_do_parameter(-1, "rpc_server:winreg", "embedded");
-               lp_do_parameter(-1, "rpc_server:spoolss", "embedded");
-               lp_do_parameter(-1, "rpc_daemon:spoolssd", "embedded");
-               lp_do_parameter(-1, "rpc_server:tcpip", "no");
+               lp_enforce_ad_dc_settings();
        }
 
        bAllowIncludeRegistry = true;
@@ -3794,17 +3774,17 @@ static bool lp_load_ex(const char *pszFname,
        return (bRetval);
 }
 
-bool lp_load(const char *pszFname,
-            bool global_only,
-            bool save_defaults,
-            bool add_ipc,
-            bool initialize_globals)
+static bool lp_load(const char *pszFname,
+                   bool global_only,
+                   bool save_defaults,
+                   bool add_ipc,
+                   bool reinit_globals)
 {
        return lp_load_ex(pszFname,
                          global_only,
                          save_defaults,
                          add_ipc,
-                         initialize_globals,
+                         reinit_globals,
                          true,   /* allow_include_registry */
                          false); /* load_all_shares*/
 }
@@ -3813,9 +3793,9 @@ bool lp_load_initial_only(const char *pszFname)
 {
        return lp_load_ex(pszFname,
                          true,   /* global only */
-                         false,  /* save_defaults */
+                         true,   /* save_defaults */
                          false,  /* add_ipc */
-                         true,   /* initialize_globals */
+                         true,   /* reinit_globals */
                          false,  /* allow_include_registry */
                          false); /* load_all_shares*/
 }
@@ -3825,13 +3805,25 @@ bool lp_load_initial_only(const char *pszFname)
  */
 bool lp_load_global(const char *file_name)
 {
-       return lp_load_ex(file_name,
-                         true,   /* global_only */
-                         false,  /* save_defaults */
-                         false,  /* add_ipc */
-                         true,   /* initialize_globals */
-                         true,   /* allow_include_registry */
-                         false); /* load_all_shares*/
+       return lp_load(file_name,
+                      true,   /* global_only */
+                      false,  /* save_defaults */
+                      false,  /* add_ipc */
+                      true);  /* reinit_globals */
+}
+
+/**
+ * The typical lp_load wrapper with shares, loads global and
+ * shares, including IPC, but does not force immediate
+ * loading of all shares from registry.
+ */
+bool lp_load_with_shares(const char *file_name)
+{
+       return lp_load(file_name,
+                      false,  /* global_only */
+                      false,  /* save_defaults */
+                      true,   /* add_ipc */
+                      true);  /* reinit_globals */
 }
 
 /**
@@ -3851,15 +3843,28 @@ bool lp_load_client(const char *file_name)
  */
 bool lp_load_global_no_reinit(const char *file_name)
 {
-       return lp_load_ex(file_name,
-                         true,   /* global_only */
-                         false,  /* save_defaults */
-                         false,  /* add_ipc */
-                         false,  /* initialize_globals */
-                         true,   /* allow_include_registry */
-                         false); /* load_all_shares*/
+       return lp_load(file_name,
+                      true,   /* global_only */
+                      false,  /* save_defaults */
+                      false,  /* add_ipc */
+                      false); /* reinit_globals */
+}
+
+/**
+ * lp_load wrapper, loading globals and shares,
+ * intended for subsequent calls, i.e. not reinitializing
+ * the globals to default values.
+ */
+bool lp_load_no_reinit(const char *file_name)
+{
+       return lp_load(file_name,
+                      false,  /* global_only */
+                      false,  /* save_defaults */
+                      false,  /* add_ipc */
+                      false); /* reinit_globals */
 }
 
+
 /**
  * lp_load wrapper, especially for clients, no reinitialization
  */
@@ -3870,17 +3875,13 @@ bool lp_load_client_no_reinit(const char *file_name)
        return lp_load_global_no_reinit(file_name);
 }
 
-bool lp_load_with_registry_shares(const char *pszFname,
-                                 bool global_only,
-                                 bool save_defaults,
-                                 bool add_ipc,
-                                 bool initialize_globals)
+bool lp_load_with_registry_shares(const char *pszFname)
 {
        return lp_load_ex(pszFname,
-                         global_only,
-                         save_defaults,
-                         add_ipc,
-                         initialize_globals,
+                         false, /* global_only */
+                         true,  /* save_defaults */
+                         false, /* add_ipc */
+                         false, /* reinit_globals */
                          true,  /* allow_include_registry */
                          true); /* load_all_shares*/
 }
@@ -3954,7 +3955,7 @@ int lp_servicenumber(const char *pszServiceName)
        for (iService = iNumServices - 1; iService >= 0; iService--) {
                if (VALID(iService) && ServicePtrs[iService]->szService) {
                        /*
-                        * The substitution here is used to support %U is
+                        * The substitution here is used to support %U in
                         * service names
                         */
                        fstrcpy(serviceName, ServicePtrs[iService]->szService);
@@ -4090,10 +4091,12 @@ static bool lp_domain_master_true_or_auto(void)
 
 bool lp_preferred_master(void)
 {
-       if (Globals.iPreferredMaster == Auto)
+       int preferred_master = lp__preferred_master();
+
+       if (preferred_master == Auto)
                return (lp_local_master() && lp_domain_master());
 
-       return (bool)Globals.iPreferredMaster;
+       return (bool)preferred_master;
 }
 
 /*******************************************************************
@@ -4132,7 +4135,8 @@ void lp_set_logfile(const char *name)
 
 int lp_maxprintjobs(int snum)
 {
-       int maxjobs = LP_SNUM_OK(snum) ? ServicePtrs[snum]->iMaxPrintJobs : sDefault.iMaxPrintJobs;
+       int maxjobs = lp_max_print_jobs(snum);
+
        if (maxjobs <= 0 || maxjobs >= PRINT_MAX_JOBID)
                maxjobs = PRINT_MAX_JOBID - 1;
 
@@ -4141,9 +4145,11 @@ int lp_maxprintjobs(int snum)
 
 const char *lp_printcapname(void)
 {
-       if ((Globals.szPrintcapname != NULL) &&
-           (Globals.szPrintcapname[0] != '\0'))
-               return Globals.szPrintcapname;
+       const char *printcap_name = lp_printcap_name();
+
+       if ((printcap_name != NULL) &&
+           (printcap_name[0] != '\0'))
+               return printcap_name;
 
        if (sDefault.printing == PRINT_CUPS) {
                return "cups";
@@ -4155,7 +4161,7 @@ const char *lp_printcapname(void)
        return PRINTCAP_NAME;
 }
 
-static uint32 spoolss_state;
+static uint32_t spoolss_state;
 
 bool lp_disable_spoolss( void )
 {
@@ -4165,14 +4171,14 @@ bool lp_disable_spoolss( void )
        return spoolss_state == SVCCTL_STOPPED ? true : false;
 }
 
-void lp_set_spoolss_state( uint32 state )
+void lp_set_spoolss_state( uint32_t state )
 {
        SMB_ASSERT( (state == SVCCTL_STOPPED) || (state == SVCCTL_RUNNING) );
 
        spoolss_state = state;
 }
 
-uint32 lp_get_spoolss_state( void )
+uint32_t lp_get_spoolss_state( void )
 {
        return lp_disable_spoolss() ? SVCCTL_STOPPED : SVCCTL_RUNNING;
 }
@@ -4273,10 +4279,12 @@ void lp_set_posix_default_cifsx_readwrite_locktype(enum brl_flavour val)
 
 int lp_min_receive_file_size(void)
 {
-       if (Globals.iminreceivefile < 0) {
+       int min_receivefile_size = lp_min_receivefile_size();
+
+       if (min_receivefile_size < 0) {
                return 0;
        }
-       return Globals.iminreceivefile;
+       return min_receivefile_size;
 }
 
 /*******************************************************************
@@ -4285,19 +4293,13 @@ int lp_min_receive_file_size(void)
  even after a configuration file reload.
 ********************************************************************/
 
-static bool lp_widelinks_internal(int snum)
-{
-       return (bool)(LP_SNUM_OK(snum)? ServicePtrs[(snum)]->bWidelinks :
-                       sDefault.bWidelinks);
-}
-
 void widelinks_warning(int snum)
 {
        if (lp_allow_insecure_wide_links()) {
                return;
        }
 
-       if (lp_unix_extensions() && lp_widelinks_internal(snum)) {
+       if (lp_unix_extensions() && lp_wide_links(snum)) {
                DEBUG(0,("Share '%s' has wide links and unix extensions enabled. "
                        "These parameters are incompatible. "
                        "Wide links will be disabled for this share.\n",
@@ -4318,7 +4320,7 @@ bool lp_widelinks(int snum)
                }
        }
 
-       return lp_widelinks_internal(snum);
+       return lp_wide_links(snum);
 }
 
 int lp_server_role(void)