lib/util/charset rename iconv_convenience to iconv_handle
[metze/samba/wip.git] / source4 / param / loadparm.c
index 07759c3e79b57daedda35221e59d880521a92754..f69dfd18c502d6f9da45a00e1c83d77cfbef1016 100644 (file)
@@ -133,6 +133,7 @@ struct loadparm_global
        char *tls_crlfile;
        char *tls_dhpfile;
        char *logfile;
+       char *loglevel;
        char *panic_action;
        int max_mux;
        int debuglevel;
@@ -396,8 +397,8 @@ static struct parm_struct parm_table[] = {
        {"hosts allow", P_LIST, P_LOCAL, LOCAL_VAR(szHostsallow), NULL, NULL},
        {"hosts deny", P_LIST, P_LOCAL, LOCAL_VAR(szHostsdeny), NULL, NULL},
 
-       {"log level", P_INTEGER, P_GLOBAL, GLOBAL_VAR(debuglevel), handle_debuglevel, NULL},
-       {"debuglevel", P_INTEGER, P_GLOBAL, GLOBAL_VAR(debuglevel), handle_debuglevel, NULL},
+       {"log level", P_STRING, P_GLOBAL, GLOBAL_VAR(loglevel), handle_debuglevel, NULL},
+       {"debuglevel", P_STRING, P_GLOBAL, GLOBAL_VAR(loglevel), handle_debuglevel, NULL},
        {"log file", P_STRING, P_GLOBAL, GLOBAL_VAR(logfile), handle_logfile, NULL},
 
        {"smb ports", P_LIST, P_GLOBAL, GLOBAL_VAR(smb_ports), NULL, NULL},
@@ -518,7 +519,7 @@ struct loadparm_context {
        struct loadparm_global *globals;
        struct loadparm_service **services;
        struct loadparm_service *sDefault;
-       struct smb_iconv_convenience *iconv_convenience;
+       struct smb_iconv_handle *iconv_handle;
        int iNumServices;
        struct loadparm_service *currentService;
        bool bInGlobalSection;
@@ -1524,22 +1525,15 @@ static bool handle_copy(struct loadparm_context *lp_ctx,
 static bool handle_debuglevel(struct loadparm_context *lp_ctx,
                        const char *pszParmValue, char **ptr)
 {
-       DEBUGLEVEL = atoi(pszParmValue);
 
-       /* also set in the loadparm table, so querying debug level
-          works */
-       *(int *)ptr = DEBUGLEVEL;
-
-       return true;
+       string_set(lp_ctx, ptr, pszParmValue);
+       return debug_parse_levels(pszParmValue);
 }
 
 static bool handle_logfile(struct loadparm_context *lp_ctx,
                        const char *pszParmValue, char **ptr)
 {
-       if (logfile != NULL) {
-               free(discard_const_p(char, logfile));
-       }
-       logfile = strdup(pszParmValue);
+       debug_set_logfile(pszParmValue);
        string_set(lp_ctx, ptr, pszParmValue);
        return true;
 }
@@ -2371,6 +2365,11 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
                }
        }
 
+
+       lpcfg_do_global_parameter(lp_ctx, "log level", "0");
+
+       lpcfg_do_global_parameter(lp_ctx, "share backend", "classic");
+
        lpcfg_do_global_parameter(lp_ctx, "share backend", "classic");
 
        lpcfg_do_global_parameter(lp_ctx, "server role", "standalone");
@@ -2391,7 +2390,7 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
        lpcfg_do_global_parameter(lp_ctx, "ntvfs handler", "unixuid default");
        lpcfg_do_global_parameter(lp_ctx, "max connections", "-1");
 
-       lpcfg_do_global_parameter(lp_ctx, "dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg dssetup unixinfo browser eventlog6");
+       lpcfg_do_global_parameter(lp_ctx, "dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg dssetup unixinfo browser eventlog6 backupkey");
        lpcfg_do_global_parameter(lp_ctx, "server services", "smb rpc nbt wrepl ldap cldap kdc drepl winbind ntp_signd kcc dnsupdate web");
        lpcfg_do_global_parameter(lp_ctx, "ntptr providor", "simple_ldb");
        /* the winbind method for domain controllers is for both RODC
@@ -2534,6 +2533,9 @@ struct loadparm_context *loadparm_init_global(bool load_default)
        if (global_loadparm_context == NULL) {
                global_loadparm_context = loadparm_init(NULL);
        }
+       if (global_loadparm_context == NULL) {
+               return NULL;
+       }
        if (load_default && !global_loadparm_context->loaded) {
                lpcfg_load_default(global_loadparm_context);
        }
@@ -2560,6 +2562,7 @@ const char *lp_default_path(void)
  */
 static bool lpcfg_update(struct loadparm_context *lp_ctx)
 {
+       struct debug_settings settings;
        lpcfg_add_auto_services(lp_ctx, lpcfg_auto_services(lp_ctx));
 
        if (!lp_ctx->globals->szWINSservers && lp_ctx->globals->bWINSsupport) {
@@ -2570,6 +2573,12 @@ static bool lpcfg_update(struct loadparm_context *lp_ctx)
 
        reload_charcnv(lp_ctx);
 
+       ZERO_STRUCT(settings);
+       /* Add any more debug-related smb.conf parameters created in
+        * future here */
+       settings.timestamp_logs = true;
+       debug_set_settings(&settings);
+
        /* FIXME: ntstatus_check_dos_mapping = lpcfg_nt_status_support(lp_ctx); */
 
        /* FIXME: This is a bit of a hack, but we can't use a global, since 
@@ -2773,26 +2782,22 @@ int lpcfg_maxprintjobs(struct loadparm_service *service, struct loadparm_service
        return maxjobs;
 }
 
-struct smb_iconv_convenience *lpcfg_iconv_convenience(struct loadparm_context *lp_ctx)
+struct smb_iconv_handle *lpcfg_iconv_handle(struct loadparm_context *lp_ctx)
 {
        if (lp_ctx == NULL) {
-               static struct smb_iconv_convenience *fallback_ic = NULL;
-               if (fallback_ic == NULL)
-                       fallback_ic = smb_iconv_convenience_reinit(talloc_autofree_context(),
-                                                                  "CP850", "UTF8", true, NULL);
-               return fallback_ic;
+               return get_iconv_handle();
        }
-       return lp_ctx->iconv_convenience;
+       return lp_ctx->iconv_handle;
 }
 
 _PUBLIC_ void reload_charcnv(struct loadparm_context *lp_ctx)
 {
-       struct smb_iconv_convenience *old_ic = lp_ctx->iconv_convenience;
+       struct smb_iconv_handle *old_ic = lp_ctx->iconv_handle;
        if (old_ic == NULL) {
-               old_ic = global_iconv_convenience;
+               old_ic = global_iconv_handle;
        }
-       lp_ctx->iconv_convenience = smb_iconv_convenience_reinit_lp(lp_ctx, lp_ctx, old_ic);
-       global_iconv_convenience = lp_ctx->iconv_convenience;
+       lp_ctx->iconv_handle = smb_iconv_handle_reinit_lp(lp_ctx, lp_ctx, old_ic);
+       global_iconv_handle = lp_ctx->iconv_handle;
 }
 
 void lpcfg_smbcli_options(struct loadparm_context *lp_ctx,