s3:param: use lpcfg_do_*_paramter instead of lp_do_parameter in do_parameter
authorGarming Sam <garming@catalyst.net.nz>
Thu, 20 Mar 2014 01:38:37 +0000 (14:38 +1300)
committerMichael Adam <obnox@samba.org>
Thu, 31 Jul 2014 06:17:10 +0000 (08:17 +0200)
Change-Id: I08ab5d9db9323a2ef4fa2243ff0b0b7efe73a23b
Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
source3/param/loadparm.c

index 11a10d9b221bc9f2913f93e4452075c89b134e52..97e2ed1809d1510ca9fa5dfcb539b00c84d3111c 100644 (file)
@@ -2674,8 +2674,12 @@ static bool do_parameter(const char *pszParmName, const char *pszParmValue,
 
        DEBUGADD(4, ("doing parameter %s = %s\n", pszParmName, pszParmValue));
 
-       return (lp_do_parameter(bInGlobalSection ? -2 : iServiceIndex,
-                               pszParmName, pszParmValue));
+       if (bInGlobalSection) {
+               return lpcfg_do_global_parameter(userdata, pszParmName, pszParmValue);
+       } else {
+               return lpcfg_do_service_parameter(userdata, ServicePtrs[iServiceIndex],
+                                                 pszParmName, pszParmValue);
+       }
 }
 
 /***************************************************************************
@@ -2723,6 +2727,7 @@ static void init_locals(void)
 
 bool lp_do_section(const char *pszSectionName, void *userdata)
 {
+       struct loadparm_context *lp_ctx = (struct loadparm_context *)userdata;
        bool bRetval;
        bool isglobal = ((strwicmp(pszSectionName, GLOBAL_NAME) == 0) ||
                         (strwicmp(pszSectionName, GLOBAL_NAME2) == 0));
@@ -2734,6 +2739,7 @@ bool lp_do_section(const char *pszSectionName, void *userdata)
 
        /* if we've just struck a global section, note the fact. */
        bInGlobalSection = isglobal;
+       lp_ctx->bInGlobalSection = isglobal;
 
        /* check for multiple global sections */
        if (bInGlobalSection) {
@@ -3877,6 +3883,7 @@ static bool lp_load_ex(const char *pszFname,
        char *n2 = NULL;
        bool bRetval;
        TALLOC_CTX *frame = talloc_stackframe();
+       struct loadparm_context *lp_ctx;
 
        bRetval = false;
 
@@ -3886,6 +3893,12 @@ static bool lp_load_ex(const char *pszFname,
        bGlobalOnly = global_only;
        bAllowIncludeRegistry = allow_include_registry;
 
+       lp_ctx = loadparm_init_s3(talloc_tos(),
+                                 loadparm_s3_helpers());
+
+       lp_ctx->sDefault = &sDefault;
+       lp_ctx->bInGlobalSection = bInGlobalSection;
+
        init_globals(initialize_globals);
 
        free_file_list();
@@ -3915,7 +3928,7 @@ static bool lp_load_ex(const char *pszFname,
 
                add_to_file_list(NULL, &file_lists, pszFname, n2);
 
-               bRetval = pm_process(n2, lp_do_section, do_parameter, NULL);
+               bRetval = pm_process(n2, lp_do_section, do_parameter, lp_ctx);
                TALLOC_FREE(n2);
 
                /* finish up the last section */
@@ -3935,6 +3948,8 @@ static bool lp_load_ex(const char *pszFname,
                         * for config_backend. Otherwise, init_globals would
                         *  send us into an endless loop here.
                         */
+                       TALLOC_FREE(lp_ctx);
+
                        config_backend = CONFIG_BACKEND_REGISTRY;
                        /* start over */
                        DEBUG(1, ("lp_load_ex: changing to config backend "