s3-param Remove special case for global_myname(), rename to lp_netbios_name()
[kai/samba.git] / source3 / param / loadparm.c
index 8dadebfa8915d97e040e230af84decde299fc5b7..3ba5312454afbfa37651c1d152585626929e26d0 100644 (file)
  */
 
 #include "includes.h"
+#include "system/filesys.h"
+#include "util_tdb.h"
 #include "printing.h"
 #include "lib/smbconf/smbconf.h"
 #include "lib/smbconf/smbconf_init.h"
-#include "lib/smbconf/smbconf_reg.h"
 
 #include "ads.h"
 #include "../librpc/gen_ndr/svcctl.h"
-
+#include "intl.h"
 #include "smb_signing.h"
 #include "dbwrap.h"
 #include "smbldap.h"
@@ -158,6 +159,8 @@ struct global {
        char *szPasswordServer;
        char *szSocketOptions;
        char *szRealm;
+       char *szRealmUpper;
+       char *szDnsDomain;
        char *szAfsUsernameMap;
        int iAfsTokenLifetime;
        char *szLogNtTokenCommand;
@@ -216,6 +219,7 @@ struct global {
        bool bWinbindNormalizeNames;
        bool bWinbindRpcOnly;
        bool bCreateKrb5Conf;
+       int winbindMaxDomainConnections;
        char *szIdmapBackend;
        bool bIdmapReadOnly;
        char *szAddShareCommand;
@@ -338,6 +342,8 @@ struct global {
        bool bClientNTLMv2Auth;
        bool bClientPlaintextAuth;
        bool bClientUseSpnego;
+       bool client_use_spnego_principal;
+       bool send_spnego_principal;
        bool bDebugPrefixTimestamp;
        bool bDebugHiresTimestamp;
        bool bDebugPid;
@@ -374,9 +380,11 @@ struct global {
        char *szSMBPerfcountModule;
        bool bMapUntrustedToDomain;
        bool bAsyncSMBEchoHandler;
+       bool bMulticastDnsRegister;
        int ismb2_max_read;
        int ismb2_max_write;
        int ismb2_max_trans;
+       int ismb2_max_credits;
        char *ncalrpc_dir;
 };
 
@@ -469,6 +477,7 @@ struct service {
        bool bAdministrative_share;
        bool bGuest_ok;
        bool bPrint_ok;
+       bool bPrintNotifyBackchannel;
        bool bMap_system;
        bool bMap_hidden;
        bool bMap_archive;
@@ -613,6 +622,7 @@ static struct service sDefault = {
        False,                  /* bAdministrative_share */
        False,                  /* bGuest_ok */
        False,                  /* bPrint_ok */
+       True,                   /* bPrintNotifyBackchannel */
        False,                  /* bMap_system */
        False,                  /* bMap_hidden */
        True,                   /* bMap_archive */
@@ -691,14 +701,14 @@ static int default_server_announce;
 /* prototypes for the special type handlers */
 static bool handle_include( int snum, const char *pszParmValue, char **ptr);
 static bool handle_copy( int snum, const char *pszParmValue, char **ptr);
-static bool handle_netbios_name( int snum, const char *pszParmValue, char **ptr);
+static bool handle_idmap_backend(int snum, const char *pszParmValue, char **ptr);
 static bool handle_idmap_uid( int snum, const char *pszParmValue, char **ptr);
 static bool handle_idmap_gid( int snum, const char *pszParmValue, char **ptr);
 static bool handle_debug_list( int snum, const char *pszParmValue, char **ptr );
-static bool handle_workgroup( int snum, const char *pszParmValue, char **ptr );
+static bool handle_realm( int snum, const char *pszParmValue, char **ptr );
 static bool handle_netbios_aliases( int snum, const char *pszParmValue, char **ptr );
-static bool handle_netbios_scope( int snum, const char *pszParmValue, char **ptr );
 static bool handle_charset( int snum, const char *pszParmValue, char **ptr );
+static bool handle_dos_charset( int snum, const char *pszParmValue, char **ptr );
 static bool handle_printing( int snum, const char *pszParmValue, char **ptr);
 static bool handle_ldap_debug_level( int snum, const char *pszParmValue, char **ptr);
 
@@ -744,7 +754,7 @@ static const struct enum_list enum_printing[] = {
        {PRINT_IPRINT, "iprint"},
        {PRINT_LPRNT, "nt"},
        {PRINT_LPROS2, "os2"},
-#ifdef DEVELOPER
+#if defined(DEVELOPER) || defined(ENABLE_BUILD_FARM_HACKS)
        {PRINT_TEST, "test"},
        {PRINT_VLP, "vlp"},
 #endif /* DEVELOPER */
@@ -946,7 +956,7 @@ static struct parm_struct parm_table[] = {
                .type           = P_STRING,
                .p_class        = P_GLOBAL,
                .ptr            = &Globals.dos_charset,
-               .special        = handle_charset,
+               .special        = handle_dos_charset,
                .enum_list      = NULL,
                .flags          = FLAG_ADVANCED
        },
@@ -1000,27 +1010,25 @@ static struct parm_struct parm_table[] = {
                .type           = P_USTRING,
                .p_class        = P_GLOBAL,
                .ptr            = &Globals.szWorkgroup,
-               .special        = handle_workgroup,
+               .special        = NULL,
                .enum_list      = NULL,
                .flags          = FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
        },
-#ifdef WITH_ADS
        {
                .label          = "realm",
                .type           = P_USTRING,
                .p_class        = P_GLOBAL,
                .ptr            = &Globals.szRealm,
-               .special        = NULL,
+               .special        = handle_realm,
                .enum_list      = NULL,
                .flags          = FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
        },
-#endif
        {
                .label          = "netbios name",
                .type           = P_USTRING,
                .p_class        = P_GLOBAL,
                .ptr            = &Globals.szNetbiosName,
-               .special        = handle_netbios_name,
+               .special        = NULL,
                .enum_list      = NULL,
                .flags          = FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
        },
@@ -1038,7 +1046,7 @@ static struct parm_struct parm_table[] = {
                .type           = P_USTRING,
                .p_class        = P_GLOBAL,
                .ptr            = &Globals.szNetbiosScope,
-               .special        = handle_netbios_scope,
+               .special        = NULL,
                .enum_list      = NULL,
                .flags          = FLAG_ADVANCED,
        },
@@ -1151,7 +1159,7 @@ static struct parm_struct parm_table[] = {
                .ptr            = &Globals.bNullPasswords,
                .special        = NULL,
                .enum_list      = NULL,
-               .flags          = FLAG_ADVANCED,
+               .flags          = FLAG_ADVANCED | FLAG_DEPRECATED,
        },
        {
                .label          = "obey pam restrictions",
@@ -1250,7 +1258,7 @@ static struct parm_struct parm_table[] = {
                .ptr            = &Globals.bEnablePrivileges,
                .special        = NULL,
                .enum_list      = NULL,
-               .flags          = FLAG_ADVANCED,
+               .flags          = FLAG_ADVANCED | FLAG_DEPRECATED,
        },
 
        {
@@ -1323,7 +1331,7 @@ static struct parm_struct parm_table[] = {
                .ptr            = &Globals.pwordlevel,
                .special        = NULL,
                .enum_list      = NULL,
-               .flags          = FLAG_ADVANCED,
+               .flags          = FLAG_ADVANCED | FLAG_DEPRECATED,
        },
        {
                .label          = "username level",
@@ -1397,6 +1405,24 @@ static struct parm_struct parm_table[] = {
                .enum_list      = NULL,
                .flags          = FLAG_ADVANCED,
        },
+       {
+               .label          = "client use spnego principal",
+               .type           = P_BOOL,
+               .p_class        = P_GLOBAL,
+               .ptr            = &Globals.client_use_spnego_principal,
+               .special        = NULL,
+               .enum_list      = NULL,
+               .flags          = FLAG_ADVANCED,
+       },
+       {
+               .label          = "send spnego principal",
+               .type           = P_BOOL,
+               .p_class        = P_GLOBAL,
+               .ptr            = &Globals.send_spnego_principal,
+               .special        = NULL,
+               .enum_list      = NULL,
+               .flags          = FLAG_ADVANCED,
+       },
        {
                .label          = "username",
                .type           = P_STRING,
@@ -1404,7 +1430,7 @@ static struct parm_struct parm_table[] = {
                .ptr            = &sDefault.szUsername,
                .special        = NULL,
                .enum_list      = NULL,
-               .flags          = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
+               .flags          = FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE | FLAG_DEPRECATED,
        },
        {
                .label          = "user",
@@ -2267,7 +2293,7 @@ static struct parm_struct parm_table[] = {
                .ptr            = &Globals.bUseSpnego,
                .special        = NULL,
                .enum_list      = NULL,
-               .flags          = FLAG_ADVANCED,
+               .flags          = FLAG_ADVANCED | FLAG_DEPRECATED,
        },
        {
                .label          = "client signing",
@@ -2614,6 +2640,15 @@ static struct parm_struct parm_table[] = {
                .enum_list      = NULL,
                .flags          = FLAG_ADVANCED,
        },
+       {
+               .label          = "smb2 max credits",
+               .type           = P_INTEGER,
+               .p_class        = P_GLOBAL,
+               .ptr            = &Globals.ismb2_max_credits,
+               .special        = NULL,
+               .enum_list      = NULL,
+               .flags          = FLAG_ADVANCED,
+       },
 
        {N_("Printing Options"), P_SEP, P_SEPARATOR},
 
@@ -2680,6 +2715,15 @@ static struct parm_struct parm_table[] = {
                .enum_list      = NULL,
                .flags          = FLAG_ADVANCED | FLAG_PRINT,
        },
+       {
+               .label          = "print notify backchannel",
+               .type           = P_BOOL,
+               .p_class        = P_LOCAL,
+               .ptr            = &sDefault.bPrintNotifyBackchannel,
+               .special        = NULL,
+               .enum_list      = NULL,
+               .flags          = FLAG_ADVANCED,
+       },
        {
                .label          = "print ok",
                .type           = P_BOOL,
@@ -4408,6 +4452,15 @@ static struct parm_struct parm_table[] = {
                .enum_list      = NULL,
                .flags          = FLAG_ADVANCED | FLAG_GLOBAL,
        },
+       {
+               .label          = "multicast dns register",
+               .type           = P_BOOL,
+               .p_class        = P_GLOBAL,
+               .ptr            = &Globals.bMulticastDnsRegister,
+               .special        = NULL,
+               .enum_list      = NULL,
+               .flags          = FLAG_ADVANCED | FLAG_GLOBAL,
+       },
        {
                .label          = "panic action",
                .type           = P_STRING,
@@ -4495,18 +4548,9 @@ static struct parm_struct parm_table[] = {
                .type           = P_STRING,
                .p_class        = P_GLOBAL,
                .ptr            = &Globals.szIdmapBackend,
-               .special        = NULL,
-               .enum_list      = NULL,
-               .flags          = FLAG_ADVANCED,
-       },
-       {
-               .label          = "idmap read only",
-               .type           = P_BOOL,
-               .p_class        = P_GLOBAL,
-               .ptr            = &Globals.bIdmapReadOnly,
-               .special        = NULL,
+               .special        = handle_idmap_backend,
                .enum_list      = NULL,
-               .flags          = FLAG_ADVANCED,
+               .flags          = FLAG_ADVANCED | FLAG_DEPRECATED,
        },
        {
                .label          = "idmap cache time",
@@ -4533,7 +4577,7 @@ static struct parm_struct parm_table[] = {
                .ptr            = &Globals.szIdmapUID,
                .special        = handle_idmap_uid,
                .enum_list      = NULL,
-               .flags          = FLAG_ADVANCED,
+               .flags          = FLAG_ADVANCED | FLAG_DEPRECATED,
        },
        {
                .label          = "winbind uid",
@@ -4551,7 +4595,7 @@ static struct parm_struct parm_table[] = {
                .ptr            = &Globals.szIdmapGID,
                .special        = handle_idmap_gid,
                .enum_list      = NULL,
-               .flags          = FLAG_ADVANCED,
+               .flags          = FLAG_ADVANCED | FLAG_DEPRECATED,
        },
        {
                .label          = "winbind gid",
@@ -4733,6 +4777,15 @@ static struct parm_struct parm_table[] = {
                .enum_list      = NULL,
                .flags          = FLAG_ADVANCED,
        },
+       {
+               .label          = "winbind max domain connections",
+               .type           = P_INTEGER,
+               .p_class        = P_GLOBAL,
+               .ptr            = &Globals.winbindMaxDomainConnections,
+               .special        = NULL,
+               .enum_list      = NULL,
+               .flags          = FLAG_ADVANCED,
+       },
 
        {NULL,  P_BOOL,  P_NONE,  NULL,  NULL,  NULL,  0}
 };
@@ -4807,17 +4860,65 @@ static void init_printer_values(struct service *pService)
                        string_set(&pService->szPrintcommand, "lp -r -P%p %s");
                        break;
 
-#ifdef DEVELOPER
+#if defined(DEVELOPER) || defined(ENABLE_BUILD_FARM_HACKS)
+
        case PRINT_TEST:
-       case PRINT_VLP:
-               string_set(&pService->szPrintcommand, "vlp print %p %s");
-               string_set(&pService->szLpqcommand, "vlp lpq %p");
-               string_set(&pService->szLprmcommand, "vlp lprm %p %j");
-               string_set(&pService->szLppausecommand, "vlp lppause %p %j");
-               string_set(&pService->szLpresumecommand, "vlp lpresume %p %j");
-               string_set(&pService->szQueuepausecommand, "vlp queuepause %p");
-               string_set(&pService->szQueueresumecommand, "vlp queueresume %p");
+       case PRINT_VLP: {
+               const char *tdbfile;
+               char *tmp;
+
+               tdbfile = talloc_asprintf(
+                       talloc_tos(), "tdbfile=%s",
+                       lp_parm_const_string(-1, "vlp", "tdbfile",
+                                            "/tmp/vlp.tdb"));
+               if (tdbfile == NULL) {
+                       tdbfile="tdbfile=/tmp/vlp.tdb";
+               }
+
+               tmp = talloc_asprintf(talloc_tos(), "vlp %s print %%p %%s",
+                                     tdbfile);
+               string_set(&pService->szPrintcommand,
+                          tmp ? tmp : "vlp print %p %s");
+               TALLOC_FREE(tmp);
+
+               tmp = talloc_asprintf(talloc_tos(), "vlp %s lpq %%p",
+                                     tdbfile);
+               string_set(&pService->szLpqcommand,
+                          tmp ? tmp : "vlp lpq %p");
+               TALLOC_FREE(tmp);
+
+               tmp = talloc_asprintf(talloc_tos(), "vlp %s lprm %%p %%j",
+                                     tdbfile);
+               string_set(&pService->szLprmcommand,
+                          tmp ? tmp : "vlp lprm %p %j");
+               TALLOC_FREE(tmp);
+
+               tmp = talloc_asprintf(talloc_tos(), "vlp %s lppause %%p %%j",
+                                     tdbfile);
+               string_set(&pService->szLppausecommand,
+                          tmp ? tmp : "vlp lppause %p %j");
+               TALLOC_FREE(tmp);
+
+               tmp = talloc_asprintf(talloc_tos(), "vlp %s lpresume %%p %%j",
+                                     tdbfile);
+               string_set(&pService->szLpresumecommand,
+                          tmp ? tmp : "vlp lpresume %p %j");
+               TALLOC_FREE(tmp);
+
+               tmp = talloc_asprintf(talloc_tos(), "vlp %s queuepause %%p",
+                                     tdbfile);
+               string_set(&pService->szQueuepausecommand,
+                          tmp ? tmp : "vlp queuepause %p");
+               TALLOC_FREE(tmp);
+
+               tmp = talloc_asprintf(talloc_tos(), "vlp %s queueresume %%p",
+                                     tdbfile);
+               string_set(&pService->szQueueresumecommand,
+                          tmp ? tmp : "vlp queueresume %p");
+               TALLOC_FREE(tmp);
+
                break;
+       }
 #endif /* DEVELOPER */
 
        }
@@ -4853,12 +4954,12 @@ static int max_open_files(void)
 #if defined(RLIM_INFINITY)
                if(rl.rlim_cur == RLIM_INFINITY)
                        rlimit_max = MAX_OPEN_FILES;
-       }
 #endif
+       }
 #endif
 
        if (sysctl_max < MIN_OPEN_FILES_WINDOWS) {
-               DEBUG(2,("max_open_files: sysctl_max (%d) below "
+               DEBUG(2,("max_open_files: increasing sysctl_max (%d) to "
                        "minimum Windows limit (%d)\n",
                        sysctl_max,
                        MIN_OPEN_FILES_WINDOWS));
@@ -4866,7 +4967,7 @@ static int max_open_files(void)
        }
 
        if (rlimit_max < MIN_OPEN_FILES_WINDOWS) {
-               DEBUG(2,("rlimit_max: rlimit_max (%d) below "
+               DEBUG(2,("rlimit_max: increasing rlimit_max (%d) to "
                        "minimum Windows limit (%d)\n",
                        rlimit_max,
                        MIN_OPEN_FILES_WINDOWS));
@@ -4983,8 +5084,9 @@ static struct lp_stored_option *stored_options;
  */
 static bool store_lp_set_cmdline(const char *pszParmName, const char *pszParmValue)
 {
-       struct lp_stored_option *entry = NULL;
-       for (entry = stored_options; entry != NULL; entry = entry->next) {
+       struct lp_stored_option *entry, *entry_next;
+       for (entry = stored_options; entry != NULL; entry = entry_next) {
+               entry_next = entry->next;
                if (strcmp(pszParmName, entry->label) == 0) {
                        DLIST_REMOVE(stored_options, entry);
                        talloc_free(entry);
@@ -5069,6 +5171,7 @@ static void init_globals(bool reinit_globals)
                }
        }
 
+
        string_set(&sDefault.fstype, FSTYPE_STRING);
        string_set(&sDefault.szPrintjobUsername, "%U");
 
@@ -5077,6 +5180,9 @@ static void init_globals(bool reinit_globals)
 
        DEBUG(3, ("Initialising global parameters\n"));
 
+       /* Must manually force to upper case here, as this does not go via the handler */
+       string_set(&Globals.szNetbiosName, myhostname_upper());
+
        string_set(&Globals.szSMBPasswdFile, get_dyn_SMB_PASSWD_FILE());
        string_set(&Globals.szPrivateDir, get_dyn_PRIVATE_DIR());
 
@@ -5105,11 +5211,7 @@ static void init_globals(bool reinit_globals)
         */
        string_set(&Globals.szPasswdChat, DEFAULT_PASSWD_CHAT);
 
-       set_global_myname(myhostname());
-       string_set(&Globals.szNetbiosName,global_myname());
-
-       set_global_myworkgroup(WORKGROUP);
-       string_set(&Globals.szWorkgroup, lp_workgroup());
+       string_set(&Globals.szWorkgroup, WORKGROUP);
 
        string_set(&Globals.szPasswdProgram, "");
        string_set(&Globals.szLockDir, get_dyn_LOCKDIR());
@@ -5222,8 +5324,8 @@ static void init_globals(bool reinit_globals)
        Globals.bClientPlaintextAuth = False;   /* Do NOT use a plaintext password even if is requested by the server */
        Globals.bLanmanAuth = False;    /* Do NOT use the LanMan hash, even if it is supplied */
        Globals.bNTLMAuth = True;       /* Do use NTLMv1 if it is supplied by the client (otherwise NTLMv2) */
-       Globals.bClientNTLMv2Auth = False; /* Client should not use NTLMv2, as we can't tell that the server supports it. */
-       /* Note, that we will use NTLM2 session security (which is different), if it is available */
+       Globals.bClientNTLMv2Auth = True; /* Client should always use use NTLMv2, as we can't tell that the server supports it, but most modern servers do */
+       /* Note, that we will also use NTLM2 session security (which is different), if it is available */
 
        Globals.map_to_guest = 0;       /* By Default, "Never" */
        Globals.oplock_break_wait_time = 0;     /* By Default, 0 msecs. */
@@ -5238,6 +5340,7 @@ static void init_globals(bool reinit_globals)
        Globals.bResetOnZeroVC = False;
        Globals.bLogWriteableFilesOnExit = False;
        Globals.bCreateKrb5Conf = true;
+       Globals.winbindMaxDomainConnections = 1;
 
        /* hostname lookups can be very expensive and are broken on
           a large number of sites (tridge) */
@@ -5371,10 +5474,12 @@ static void init_globals(bool reinit_globals)
        Globals.iminreceivefile = 0;
 
        Globals.bMapUntrustedToDomain = false;
+       Globals.bMulticastDnsRegister = true;
 
-       Globals.ismb2_max_read = 1024*1024;
-       Globals.ismb2_max_write = 1024*1024;
-       Globals.ismb2_max_trans = 1024*1024;
+       Globals.ismb2_max_read = DEFAULT_SMB2_MAX_READ;
+       Globals.ismb2_max_write = DEFAULT_SMB2_MAX_WRITE;
+       Globals.ismb2_max_trans = DEFAULT_SMB2_MAX_TRANSACT;
+       Globals.ismb2_max_credits = DEFAULT_SMB2_MAX_CREDITS;
 
        string_set(&Globals.ncalrpc_dir, get_dyn_NCALRPCDIR());
 
@@ -5457,14 +5562,14 @@ static char *lp_string(const char *s)
 #define FN_LOCAL_CHAR(fn_name,val) \
  char fn_name(const struct share_params *p) {return(LP_SNUM_OK(p->service)? ServicePtrs[(p->service)]->val : sDefault.val);}
 
-FN_GLOBAL_STRING(lp_smb_ports, &Globals.smb_ports)
-FN_GLOBAL_STRING(lp_dos_charset, &Globals.dos_charset)
-FN_GLOBAL_STRING(lp_unix_charset, &Globals.unix_charset)
-FN_GLOBAL_STRING(lp_display_charset, &Globals.display_charset)
+FN_GLOBAL_CONST_STRING(lp_smb_ports, &Globals.smb_ports)
+FN_GLOBAL_CONST_STRING(lp_dos_charset, &Globals.dos_charset)
+FN_GLOBAL_CONST_STRING(lp_unix_charset, &Globals.unix_charset)
+FN_GLOBAL_CONST_STRING(lp_display_charset, &Globals.display_charset)
 FN_GLOBAL_STRING(lp_logfile, &Globals.szLogFile)
 FN_GLOBAL_STRING(lp_configfile, &Globals.szConfigFile)
-FN_GLOBAL_STRING(lp_smb_passwd_file, &Globals.szSMBPasswdFile)
-FN_GLOBAL_STRING(lp_private_dir, &Globals.szPrivateDir)
+FN_GLOBAL_CONST_STRING(lp_smb_passwd_file, &Globals.szSMBPasswdFile)
+FN_GLOBAL_CONST_STRING(lp_private_dir, &Globals.szPrivateDir)
 FN_GLOBAL_STRING(lp_serverstring, &Globals.szServerString)
 FN_GLOBAL_INTEGER(lp_printcap_cache_time, &Globals.PrintcapCacheTime)
 FN_GLOBAL_STRING(lp_addport_cmd, &Globals.szAddPortCommand)
@@ -5472,33 +5577,33 @@ FN_GLOBAL_STRING(lp_enumports_cmd, &Globals.szEnumPortsCommand)
 FN_GLOBAL_STRING(lp_addprinter_cmd, &Globals.szAddPrinterCommand)
 FN_GLOBAL_STRING(lp_deleteprinter_cmd, &Globals.szDeletePrinterCommand)
 FN_GLOBAL_STRING(lp_os2_driver_map, &Globals.szOs2DriverMap)
-FN_GLOBAL_STRING(lp_lockdir, &Globals.szLockDir)
+FN_GLOBAL_CONST_STRING(lp_lockdir, &Globals.szLockDir)
 /* If lp_statedir() and lp_cachedir() are explicitely set during the
  * build process or in smb.conf, we use that value.  Otherwise they
  * default to the value of lp_lockdir(). */
-char *lp_statedir(void) {
+const char *lp_statedir(void) {
        if ((strcmp(get_dyn_STATEDIR(), get_dyn_LOCKDIR()) != 0) ||
            (strcmp(get_dyn_STATEDIR(), Globals.szStateDir) != 0))
-               return(lp_string(*(char **)(&Globals.szStateDir) ?
-                   *(char **)(&Globals.szStateDir) : ""));
+               return(*(char **)(&Globals.szStateDir) ?
+                      *(char **)(&Globals.szStateDir) : "");
        else
-               return(lp_string(*(char **)(&Globals.szLockDir) ?
-                   *(char **)(&Globals.szLockDir) : ""));
+               return(*(char **)(&Globals.szLockDir) ?
+                      *(char **)(&Globals.szLockDir) : "");
 }
-char *lp_cachedir(void) {
+const char *lp_cachedir(void) {
        if ((strcmp(get_dyn_CACHEDIR(), get_dyn_LOCKDIR()) != 0) ||
            (strcmp(get_dyn_CACHEDIR(), Globals.szCacheDir) != 0))
-               return(lp_string(*(char **)(&Globals.szCacheDir) ?
-                   *(char **)(&Globals.szCacheDir) : ""));
+               return(*(char **)(&Globals.szCacheDir) ?
+                      *(char **)(&Globals.szCacheDir) : "");
        else
-               return(lp_string(*(char **)(&Globals.szLockDir) ?
-                   *(char **)(&Globals.szLockDir) : ""));
+               return(*(char **)(&Globals.szLockDir) ?
+                      *(char **)(&Globals.szLockDir) : "");
 }
-FN_GLOBAL_STRING(lp_piddir, &Globals.szPidDir)
+FN_GLOBAL_CONST_STRING(lp_piddir, &Globals.szPidDir)
 FN_GLOBAL_STRING(lp_mangling_method, &Globals.szManglingMethod)
 FN_GLOBAL_INTEGER(lp_mangle_prefix, &Globals.mangle_prefix)
-FN_GLOBAL_STRING(lp_utmpdir, &Globals.szUtmpDir)
-FN_GLOBAL_STRING(lp_wtmpdir, &Globals.szWtmpDir)
+FN_GLOBAL_CONST_STRING(lp_utmpdir, &Globals.szUtmpDir)
+FN_GLOBAL_CONST_STRING(lp_wtmpdir, &Globals.szWtmpDir)
 FN_GLOBAL_BOOL(lp_utmp, &Globals.bUtmp)
 FN_GLOBAL_STRING(lp_rootdir, &Globals.szRootdir)
 FN_GLOBAL_STRING(lp_perfcount_module, &Globals.szSMBPerfcountModule)
@@ -5509,9 +5614,13 @@ FN_GLOBAL_STRING(lp_set_quota_command, &Globals.szSetQuota)
 FN_GLOBAL_STRING(lp_auto_services, &Globals.szAutoServices)
 FN_GLOBAL_STRING(lp_passwd_program, &Globals.szPasswdProgram)
 FN_GLOBAL_STRING(lp_passwd_chat, &Globals.szPasswdChat)
-FN_GLOBAL_STRING(lp_passwordserver, &Globals.szPasswordServer)
-FN_GLOBAL_STRING(lp_name_resolve_order, &Globals.szNameResolveOrder)
-FN_GLOBAL_STRING(lp_realm, &Globals.szRealm)
+FN_GLOBAL_CONST_STRING(lp_passwordserver, &Globals.szPasswordServer)
+FN_GLOBAL_CONST_STRING(lp_name_resolve_order, &Globals.szNameResolveOrder)
+FN_GLOBAL_CONST_STRING(lp_workgroup, &Globals.szWorkgroup)
+FN_GLOBAL_CONST_STRING(lp_netbios_name, &Globals.szNetbiosName)
+FN_GLOBAL_CONST_STRING(lp_netbios_scope, &Globals.szNetbiosScope)
+FN_GLOBAL_CONST_STRING(lp_realm, &Globals.szRealmUpper)
+FN_GLOBAL_CONST_STRING(lp_dnsdomain, &Globals.szDnsDomain)
 FN_GLOBAL_CONST_STRING(lp_afs_username_map, &Globals.szAfsUsernameMap)
 FN_GLOBAL_INTEGER(lp_afs_token_lifetime, &Globals.iAfsTokenLifetime)
 FN_GLOBAL_STRING(lp_log_nt_token_command, &Globals.szLogNtTokenCommand)
@@ -5608,9 +5717,21 @@ FN_GLOBAL_BOOL(lp_winbind_offline_logon, &Globals.bWinbindOfflineLogon)
 FN_GLOBAL_BOOL(lp_winbind_normalize_names, &Globals.bWinbindNormalizeNames)
 FN_GLOBAL_BOOL(lp_winbind_rpc_only, &Globals.bWinbindRpcOnly)
 FN_GLOBAL_BOOL(lp_create_krb5_conf, &Globals.bCreateKrb5Conf)
+static FN_GLOBAL_INTEGER(lp_winbind_max_domain_connections_int,
+                 &Globals.winbindMaxDomainConnections)
+
+int lp_winbind_max_domain_connections(void)
+{
+       if (lp_winbind_offline_logon() &&
+           lp_winbind_max_domain_connections_int() > 1) {
+               DEBUG(1, ("offline logons active, restricting max domain "
+                         "connections to 1\n"));
+               return 1;
+       }
+       return MAX(1, lp_winbind_max_domain_connections_int());
+}
 
 FN_GLOBAL_CONST_STRING(lp_idmap_backend, &Globals.szIdmapBackend)
-FN_GLOBAL_BOOL(lp_idmap_read_only, &Globals.bIdmapReadOnly)
 FN_GLOBAL_INTEGER(lp_idmap_cache_time, &Globals.iIdmapCacheTime)
 FN_GLOBAL_INTEGER(lp_idmap_negative_cache_time, &Globals.iIdmapNegativeCacheTime)
 FN_GLOBAL_INTEGER(lp_keepalive, &Globals.iKeepalive)
@@ -5699,10 +5820,12 @@ FN_GLOBAL_BOOL(lp_use_mmap, &Globals.bUseMmap)
 FN_GLOBAL_BOOL(lp_unix_extensions, &Globals.bUnixExtensions)
 FN_GLOBAL_BOOL(lp_use_spnego, &Globals.bUseSpnego)
 FN_GLOBAL_BOOL(lp_client_use_spnego, &Globals.bClientUseSpnego)
+FN_GLOBAL_BOOL(lp_client_use_spnego_principal, &Globals.client_use_spnego_principal)
+FN_GLOBAL_BOOL(lp_send_spnego_principal, &Globals.send_spnego_principal)
 FN_GLOBAL_BOOL(lp_hostname_lookups, &Globals.bHostnameLookups)
 FN_LOCAL_PARM_BOOL(lp_change_notify, bChangeNotify)
 FN_LOCAL_PARM_BOOL(lp_kernel_change_notify, bKernelChangeNotify)
-FN_GLOBAL_STRING(lp_dedicated_keytab_file, &Globals.szDedicatedKeytabFile)
+FN_GLOBAL_CONST_STRING(lp_dedicated_keytab_file, &Globals.szDedicatedKeytabFile)
 FN_GLOBAL_INTEGER(lp_kerberos_method, &Globals.iKerberosMethod)
 FN_GLOBAL_BOOL(lp_defer_sharing_violations, &Globals.bDeferSharingViolations)
 FN_GLOBAL_BOOL(lp_enable_privileges, &Globals.bEnablePrivileges)
@@ -5720,7 +5843,18 @@ FN_GLOBAL_INTEGER(lp_passwordlevel, &Globals.pwordlevel)
 FN_GLOBAL_INTEGER(lp_usernamelevel, &Globals.unamelevel)
 FN_GLOBAL_INTEGER(lp_deadtime, &Globals.deadtime)
 FN_GLOBAL_BOOL(lp_getwd_cache, &Globals.getwd_cache)
-FN_GLOBAL_INTEGER(lp_maxprotocol, &Globals.maxprotocol)
+static FN_GLOBAL_INTEGER(_lp_maxprotocol, &Globals.maxprotocol)
+int lp_maxprotocol(void)
+{
+       int ret = _lp_maxprotocol();
+       if ((ret == PROTOCOL_SMB2) && (lp_security() == SEC_SHARE)) {
+               DEBUG(2,("WARNING!!: \"security = share\" is incompatible "
+                       "with the SMB2 protocol. Resetting to SMB1.\n" ));
+                       lp_do_parameter(-1, "max protocol", "NT1");
+               return PROTOCOL_NT1;
+       }
+       return ret;
+}
 FN_GLOBAL_INTEGER(lp_minprotocol, &Globals.minprotocol)
 FN_GLOBAL_INTEGER(lp_security, &Globals.security)
 FN_GLOBAL_LIST(lp_auth_methods, &Globals.AuthMethods)
@@ -5743,7 +5877,13 @@ FN_GLOBAL_INTEGER(lp_config_backend, &Globals.ConfigBackend)
 FN_GLOBAL_INTEGER(lp_smb2_max_read, &Globals.ismb2_max_read)
 FN_GLOBAL_INTEGER(lp_smb2_max_write, &Globals.ismb2_max_write)
 FN_GLOBAL_INTEGER(lp_smb2_max_trans, &Globals.ismb2_max_trans)
-
+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;
+}
 FN_LOCAL_STRING(lp_preexec, szPreExec)
 FN_LOCAL_STRING(lp_postexec, szPostExec)
 FN_LOCAL_STRING(lp_rootpreexec, szRootPreExec)
@@ -5831,6 +5971,7 @@ FN_LOCAL_BOOL(lp_guest_ok, bGuest_ok)
 FN_LOCAL_BOOL(lp_guest_only, bGuest_only)
 FN_LOCAL_BOOL(lp_administrative_share, bAdministrative_share)
 FN_LOCAL_BOOL(lp_print_ok, bPrint_ok)
+FN_LOCAL_BOOL(lp_print_notify_backchannel, bPrintNotifyBackchannel)
 FN_LOCAL_BOOL(lp_map_hidden, bMap_hidden)
 FN_LOCAL_BOOL(lp_map_archive, bMap_archive)
 FN_LOCAL_BOOL(lp_store_dos_attributes, bStoreDosAttributes)
@@ -5856,6 +5997,7 @@ FN_LOCAL_BOOL(lp_dos_filetimes, bDosFiletimes)
 FN_LOCAL_BOOL(lp_dos_filetime_resolution, bDosFiletimeResolution)
 FN_LOCAL_BOOL(lp_fake_dir_create_times, bFakeDirCreateTimes)
 FN_GLOBAL_BOOL(lp_async_smb_echo_handler, &Globals.bAsyncSMBEchoHandler)
+FN_GLOBAL_BOOL(lp_multicast_dns_register, &Globals.bMulticastDnsRegister)
 FN_LOCAL_BOOL(lp_blocking_locks, bBlockingLocks)
 FN_LOCAL_BOOL(lp_inherit_perms, bInheritPerms)
 FN_LOCAL_BOOL(lp_inherit_acls, bInheritACLS)
@@ -5908,7 +6050,7 @@ FN_GLOBAL_INTEGER(lp_client_signing, &Globals.client_signing)
 FN_GLOBAL_INTEGER(lp_server_signing, &Globals.server_signing)
 FN_GLOBAL_INTEGER(lp_client_ldap_sasl_wrapping, &Globals.client_ldap_sasl_wrapping)
 
-FN_GLOBAL_STRING(lp_ncalrpc_dir, &Globals.ncalrpc_dir)
+FN_GLOBAL_CONST_STRING(lp_ncalrpc_dir, &Globals.ncalrpc_dir)
 
 /* local prototypes */
 
@@ -7069,14 +7211,14 @@ bool service_ok(int iService)
 
 static struct smbconf_ctx *lp_smbconf_ctx(void)
 {
-       WERROR werr;
+       sbcErr err;
        static struct smbconf_ctx *conf_ctx = NULL;
 
        if (conf_ctx == NULL) {
-               werr = smbconf_init(NULL, &conf_ctx, "registry:");
-               if (!W_ERROR_IS_OK(werr)) {
+               err = smbconf_init(NULL, &conf_ctx, "registry:");
+               if (!SBC_ERROR_IS_OK(err)) {
                        DEBUG(1, ("error initializing registry configuration: "
-                                 "%s\n", win_errstr(werr)));
+                                 "%s\n", sbcErrorString(err)));
                        conf_ctx = NULL;
                }
        }
@@ -7116,7 +7258,7 @@ static bool process_smbconf_service(struct smbconf_service *service)
  */
 bool process_registry_service(const char *service_name)
 {
-       WERROR werr;
+       sbcErr err;
        struct smbconf_service *service = NULL;
        TALLOC_CTX *mem_ctx = talloc_stackframe();
        struct smbconf_ctx *conf_ctx = lp_smbconf_ctx();
@@ -7137,8 +7279,8 @@ bool process_registry_service(const char *service_name)
                goto done;
        }
 
-       werr = smbconf_get_share(conf_ctx, mem_ctx, service_name, &service);
-       if (!W_ERROR_IS_OK(werr)) {
+       err = smbconf_get_share(conf_ctx, mem_ctx, service_name, &service);
+       if (!SBC_ERROR_IS_OK(err)) {
                goto done;
        }
 
@@ -7174,7 +7316,7 @@ static bool process_registry_globals(void)
 
 bool process_registry_shares(void)
 {
-       WERROR werr;
+       sbcErr err;
        uint32_t count;
        struct smbconf_service **service = NULL;
        uint32_t num_shares = 0;
@@ -7186,8 +7328,8 @@ bool process_registry_shares(void)
                goto done;
        }
 
-       werr = smbconf_get_config(conf_ctx, mem_ctx, &num_shares, &service);
-       if (!W_ERROR_IS_OK(werr)) {
+       err = smbconf_get_config(conf_ctx, mem_ctx, &num_shares, &service);
+       if (!SBC_ERROR_IS_OK(err)) {
                goto done;
        }
 
@@ -7360,27 +7502,18 @@ bool lp_file_list_changed(void)
 }
 
 
-/***************************************************************************
- Run standard_sub_basic on netbios name... needed because global_myname
- is not accessed through any lp_ macro.
- Note: We must *NOT* use string_set() here as ptr points to global_myname.
-***************************************************************************/
-
-static bool handle_netbios_name(int snum, const char *pszParmValue, char **ptr)
+/**
+ * Initialize iconv conversion descriptors.
+ *
+ * This is called the first time it is needed, and also called again
+ * every time the configuration is reloaded, because the charset or
+ * codepage might have changed.
+ **/
+static void init_iconv(void)
 {
-       bool ret;
-       char *netbios_name = talloc_sub_basic(
-               talloc_tos(), get_current_username(), current_user_info.domain,
-               pszParmValue);
-
-       ret = set_global_myname(netbios_name);
-       TALLOC_FREE(netbios_name);
-       string_set(&Globals.szNetbiosName,global_myname());
-
-       DEBUG(4, ("handle_netbios_name: set global_myname to: %s\n",
-              global_myname()));
-
-       return ret;
+       global_iconv_handle = smb_iconv_handle_reinit(NULL, lp_dos_charset(),
+                                                     lp_unix_charset(), lp_display_charset(),
+                                                     true, global_iconv_handle);
 }
 
 static bool handle_charset(int snum, const char *pszParmValue, char **ptr)
@@ -7392,24 +7525,54 @@ static bool handle_charset(int snum, const char *pszParmValue, char **ptr)
        return True;
 }
 
-
-
-static bool handle_workgroup(int snum, const char *pszParmValue, char **ptr)
+static bool handle_dos_charset(int snum, const char *pszParmValue, char **ptr)
 {
-       bool ret;
+       bool is_utf8 = false;
+       size_t len = strlen(pszParmValue);
 
-       ret = set_global_myworkgroup(pszParmValue);
-       string_set(&Globals.szWorkgroup,lp_workgroup());
+       if (len == 4 || len == 5) {
+               /* Don't use StrCaseCmp here as we don't want to
+                  initialize iconv. */
+               if ((toupper_ascii(pszParmValue[0]) == 'U') &&
+                   (toupper_ascii(pszParmValue[1]) == 'T') &&
+                   (toupper_ascii(pszParmValue[2]) == 'F')) {
+                       if (len == 4) {
+                               if (pszParmValue[3] == '8') {
+                                       is_utf8 = true;
+                               }
+                       } else {
+                               if (pszParmValue[3] == '-' &&
+                                   pszParmValue[4] == '8') {
+                                       is_utf8 = true;
+                               }
+                       }
+               }
+       }
 
-       return ret;
+       if (strcmp(*ptr, pszParmValue) != 0) {
+               if (is_utf8) {
+                       DEBUG(0,("ERROR: invalid DOS charset: 'dos charset' must not "
+                               "be UTF8, using (default value) %s instead.\n",
+                               DEFAULT_DOS_CHARSET));
+                       pszParmValue = DEFAULT_DOS_CHARSET;
+               }
+               string_set(ptr, pszParmValue);
+               init_iconv();
+       }
+       return true;
 }
 
-static bool handle_netbios_scope(int snum, const char *pszParmValue, char **ptr)
+static bool handle_realm(int snum, const char *pszParmValue, char **ptr)
 {
-       bool ret;
+       bool ret = true;
+       char *realm = strupper_talloc(talloc_tos(), pszParmValue);
+       char *dnsdomain = strlower_talloc(talloc_tos(), pszParmValue);
 
-       ret = set_global_scope(pszParmValue);
-       string_set(&Globals.szNetbiosScope,global_scope());
+       ret &= string_set(&Globals.szRealm, pszParmValue);
+       ret &= string_set(&Globals.szRealmUpper, realm);
+       ret &= string_set(&Globals.szDnsDomain, dnsdomain);
+       TALLOC_FREE(realm);
+       TALLOC_FREE(dnsdomain);
 
        return ret;
 }
@@ -7565,38 +7728,25 @@ bool lp_idmap_gid(gid_t *low, gid_t *high)
         return True;
 }
 
-/* Do some simple checks on "idmap [ug]id" parameter values */
-
-static bool handle_idmap_uid(int snum, const char *pszParmValue, char **ptr)
+static bool handle_idmap_backend(int snum, const char *pszParmValue, char **ptr)
 {
-       uint32 low, high;
-
-       if (sscanf(pszParmValue, "%u - %u", &low, &high) != 2 || high < low)
-               return False;
+       lp_do_parameter(snum, "idmap config * : backend", pszParmValue);
 
-       /* Parse OK */
+       return true;
+}
 
-       string_set(ptr, pszParmValue);
+/* Do some simple checks on "idmap [ug]id" parameter values */
 
-        idmap_uid_low = low;
-        idmap_uid_high = high;
+static bool handle_idmap_uid(int snum, const char *pszParmValue, char **ptr)
+{
+       lp_do_parameter(snum, "idmap config * : range", pszParmValue);
 
        return True;
 }
 
 static bool handle_idmap_gid(int snum, const char *pszParmValue, char **ptr)
 {
-       uint32 low, high;
-
-       if (sscanf(pszParmValue, "%u - %u", &low, &high) != 2 || high < low)
-               return False;
-
-       /* Parse OK */
-
-       string_set(ptr, pszParmValue);
-
-        idmap_gid_low = low;
-        idmap_gid_high = high;
+       lp_do_parameter(snum, "idmap config * : range", pszParmValue);
 
        return True;
 }
@@ -7878,7 +8028,7 @@ FLAG_CMDLINE won't be overridden by loads from smb.conf.
 
 static bool lp_set_cmdline_helper(const char *pszParmName, const char *pszParmValue, bool store_values)
 {
-       int parmnum;
+       int parmnum, i;
        parmnum = map_parameter(pszParmName);
        if (parmnum >= 0) {
                parm_table[parmnum].flags &= ~FLAG_CMDLINE;
@@ -7887,14 +8037,28 @@ static bool lp_set_cmdline_helper(const char *pszParmName, const char *pszParmVa
                }
                parm_table[parmnum].flags |= FLAG_CMDLINE;
 
-               store_lp_set_cmdline(pszParmName, pszParmValue);
+               /* we have to also set FLAG_CMDLINE on aliases.  Aliases must
+                * be grouped in the table, so we don't have to search the
+                * whole table */
+               for (i=parmnum-1;i>=0 && parm_table[i].ptr == parm_table[parmnum].ptr;i--) {
+                       parm_table[i].flags |= FLAG_CMDLINE;
+               }
+               for (i=parmnum+1;i<NUMPARAMETERS && parm_table[i].ptr == parm_table[parmnum].ptr;i++) {
+                       parm_table[i].flags |= FLAG_CMDLINE;
+               }
+
+               if (store_values) {
+                       store_lp_set_cmdline(pszParmName, pszParmValue);
+               }
                return true;
        }
 
        /* it might be parametric */
        if (strchr(pszParmName, ':') != NULL) {
                set_param_opt(&Globals.param_opt, pszParmName, pszParmValue, FLAG_CMDLINE);
-               store_lp_set_cmdline(pszParmName, pszParmValue);
+               if (store_values) {
+                       store_lp_set_cmdline(pszParmName, pszParmValue);
+               }
                return true;
        }
 
@@ -7944,7 +8108,12 @@ bool lp_set_option(const char *option)
 
        *p = 0;
 
-       ret = lp_set_cmdline(s, p+1);
+       /* skip white spaces after the = sign */
+       do {
+               p++;
+       } while (*p == ' ');
+
+       ret = lp_set_cmdline(s, p);
        talloc_free(s);
        return ret;
 }
@@ -8465,7 +8634,8 @@ static void lp_add_auto_services(char *str)
  Auto-load one printer.
 ***************************************************************************/
 
-void lp_add_one_printer(const char *name, const char *comment, void *pdata)
+void lp_add_one_printer(const char *name, const char *comment,
+                       const char *location, void *pdata)
 {
        int printers = lp_servicenumber(PRINTERS_NAME);
        int i;
@@ -8492,7 +8662,8 @@ bool lp_loaded(void)
  Unload unused services.
 ***************************************************************************/
 
-void lp_killunused(bool (*snumused) (int))
+void lp_killunused(struct smbd_server_connection *sconn,
+                  bool (*snumused) (struct smbd_server_connection *, int))
 {
        int i;
        for (i = 0; i < iNumServices; i++) {
@@ -8505,7 +8676,7 @@ void lp_killunused(bool (*snumused) (int))
                        continue;
                }
 
-               if (!snumused || !snumused(i)) {
+               if (!snumused || !snumused(sconn, i)) {
                        free_service_byindex(i);
                }
        }
@@ -8516,7 +8687,7 @@ void lp_killunused(bool (*snumused) (int))
  */
 void lp_kill_all_services(void)
 {
-       lp_killunused(NULL);
+       lp_killunused(NULL, NULL);
 }
 
 /***************************************************************************
@@ -9130,7 +9301,7 @@ int load_usershare_service(const char *servicename)
  been removed.
 ***************************************************************************/
 
-int load_usershare_shares(void)
+int load_usershare_shares(struct smbd_server_connection *sconn)
 {
        SMB_STRUCT_DIR *dp;
        SMB_STRUCT_STAT sbuf;
@@ -9268,7 +9439,7 @@ int load_usershare_shares(void)
           not currently in use. */
        for (iService = iNumServices - 1; iService >= 0; iService--) {
                if (VALID(iService) && (ServicePtrs[iService]->usershare == USERSHARE_PENDING_DELETE)) {
-                       if (conn_snum_used(iService)) {
+                       if (conn_snum_used(sconn, iService)) {
                                continue;
                        }
                        /* Remove from the share ACL db. */
@@ -9352,7 +9523,6 @@ static bool lp_load_ex(const char *pszFname,
        bAllowIncludeRegistry = allow_include_registry;
 
        init_globals(initialize_globals);
-       debug_init();
 
        free_file_list();
 
@@ -9363,6 +9533,8 @@ static bool lp_load_ex(const char *pszFname,
 
        free_param_opts(&Globals.param_opt);
 
+       lp_do_parameter(-1, "idmap config * : backend", Globals.szIdmapBackend);
+
        /* We get sections first, so have to start 'behind' to make up */
        iServiceIndex = -1;
 
@@ -9433,6 +9605,17 @@ static bool lp_load_ex(const char *pszFname,
        set_default_server_announce_type();
        set_allowed_client_auth();
 
+       if (lp_security() == SEC_SHARE) {
+               DEBUG(1, ("WARNING: The security=share option is deprecated\n"));
+       } else if (lp_security() == SEC_SERVER) {
+               DEBUG(1, ("WARNING: The security=server option is deprecated\n"));
+       }
+
+       if (lp_security() == SEC_ADS && strchr(lp_passwordserver(), ':')) {
+               DEBUG(1, ("WARNING: The optional ':port' in password server = %s is deprecated\n",
+                         lp_passwordserver()));
+       }
+
        bLoaded = True;
 
        /* Now we check bWINSsupport and set szWINSserver to 127.0.0.1 */
@@ -9443,6 +9626,8 @@ static bool lp_load_ex(const char *pszFname,
 
        init_iconv();
 
+       fault_configure(smb_panic_s3);
+
        bAllowIncludeRegistry = true;
 
        return (bRetval);
@@ -9599,93 +9784,6 @@ bool share_defined(const char *service_name)
        return (lp_servicenumber(service_name) != -1);
 }
 
-struct share_params *get_share_params(TALLOC_CTX *mem_ctx,
-                                     const char *sharename)
-{
-       struct share_params *result;
-       char *sname;
-       int snum;
-
-       if (!(sname = SMB_STRDUP(sharename))) {
-               return NULL;
-       }
-
-       snum = find_service(sname);
-       SAFE_FREE(sname);
-
-       if (snum < 0) {
-               return NULL;
-       }
-
-       if (!(result = TALLOC_P(mem_ctx, struct share_params))) {
-               DEBUG(0, ("talloc failed\n"));
-               return NULL;
-       }
-
-       result->service = snum;
-       return result;
-}
-
-struct share_iterator *share_list_all(TALLOC_CTX *mem_ctx)
-{
-       struct share_iterator *result;
-
-       if (!(result = TALLOC_P(mem_ctx, struct share_iterator))) {
-               DEBUG(0, ("talloc failed\n"));
-               return NULL;
-       }
-
-       result->next_id = 0;
-       return result;
-}
-
-struct share_params *next_share(struct share_iterator *list)
-{
-       struct share_params *result;
-
-       while (!lp_snum_ok(list->next_id) &&
-              (list->next_id < lp_numservices())) {
-               list->next_id += 1;
-       }
-
-       if (list->next_id >= lp_numservices()) {
-               return NULL;
-       }
-
-       if (!(result = TALLOC_P(list, struct share_params))) {
-               DEBUG(0, ("talloc failed\n"));
-               return NULL;
-       }
-
-       result->service = list->next_id;
-       list->next_id += 1;
-       return result;
-}
-
-struct share_params *next_printer(struct share_iterator *list)
-{
-       struct share_params *result;
-
-       while ((result = next_share(list)) != NULL) {
-               if (lp_print_ok(result->service)) {
-                       break;
-               }
-       }
-       return result;
-}
-
-/*
- * This is a hack for a transition period until we transformed all code from
- * service numbers to struct share_params.
- */
-
-struct share_params *snum2params_static(int snum)
-{
-       static struct share_params result;
-       result.service = snum;
-       return &result;
-}
-
 /*******************************************************************
  A useful volume label function. 
 ********************************************************************/