[PATCH 32/37] param: extend usage of the temporary s3 context in lp_do_parameter

abartlet at samba.org abartlet at samba.org
Fri Jun 20 05:47:54 MDT 2014


From: Garming Sam <garming at catalyst.net.nz>

At least temporarily, this will be necessary for sorting out the
differences between the do_parameter code.

Change-Id: Iac380d11a927e466ab1a56d34cebe343c3608707
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
---
 lib/param/loadparm.c     | 10 ++++-----
 source3/param/loadparm.c | 53 +++++++++++++-----------------------------------
 2 files changed, 19 insertions(+), 44 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index b5d525e..da85f1d 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -1406,7 +1406,7 @@ static bool lp_do_parameter_parametric(struct loadparm_context *lp_ctx,
 	return true;
 }
 
-bool set_variable_helper(TALLOC_CTX *mem_ctx, int parmnum, void *parm_ptr,
+static bool set_variable_helper(TALLOC_CTX *mem_ctx, int parmnum, void *parm_ptr,
 			 const char *pszParmName, const char *pszParmValue)
 {
 	int i;
@@ -1533,7 +1533,7 @@ bool set_variable_helper(TALLOC_CTX *mem_ctx, int parmnum, void *parm_ptr,
 
 }
 
-static bool set_variable(TALLOC_CTX *mem_ctx, int parmnum, void *parm_ptr,
+bool set_variable(TALLOC_CTX *mem_ctx, int snum, int parmnum, void *parm_ptr,
 			 const char *pszParmName, const char *pszParmValue,
 			 struct loadparm_context *lp_ctx, bool on_globals)
 {
@@ -1542,7 +1542,7 @@ static bool set_variable(TALLOC_CTX *mem_ctx, int parmnum, void *parm_ptr,
 
 	/* if it is a special case then go ahead */
 	if (parm_table[parmnum].special) {
-		ok = parm_table[parmnum].special(lp_ctx, -1, pszParmValue,
+		ok = parm_table[parmnum].special(lp_ctx, snum, pszParmValue,
 						  (char **)parm_ptr);
 		if (!ok) {
 			return false;
@@ -1598,7 +1598,7 @@ bool lpcfg_do_global_parameter(struct loadparm_context *lp_ctx,
 
 	parm_ptr = lpcfg_parm_ptr(lp_ctx, NULL, &parm_table[parmnum]);
 
-	return set_variable(lp_ctx->globals->ctx, parmnum, parm_ptr,
+	return set_variable(lp_ctx->globals->ctx, -1, parmnum, parm_ptr,
 			    pszParmName, pszParmValue, lp_ctx, true);
 }
 
@@ -1647,7 +1647,7 @@ bool lpcfg_do_service_parameter(struct loadparm_context *lp_ctx,
 		    parm_table[i].p_class == parm_table[parmnum].p_class)
 			bitmap_clear(service->copymap, i);
 
-	return set_variable(service, parmnum, parm_ptr, pszParmName,
+	return set_variable(service, -1, parmnum, parm_ptr, pszParmName,
 			    pszParmValue, lp_ctx, false);
 }
 
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 946920f..3610784 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -2576,6 +2576,7 @@ bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue
 	TALLOC_CTX *mem_ctx;
 	TALLOC_CTX *frame = talloc_stackframe();
 	bool ok;
+	struct loadparm_context *lp_ctx;
 
 	parmnum = lpcfg_map_parameter(pszParmName);
 
@@ -2644,50 +2645,24 @@ bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue
 		mem_ctx = ServicePtrs[snum];
 	}
 
-	/* if it is a special case then go ahead */
-	if (parm_table[parmnum].special) {
-		struct loadparm_context *lp_ctx = loadparm_init_s3(frame,
-								   loadparm_s3_helpers());
-		if (lp_ctx == NULL) {
-			DEBUG(0, ("loadparm_init_s3 failed\n"));
-			TALLOC_FREE(frame);
-			return false;
-		}
-
-		lp_ctx->sDefault = &sDefault;
-		lp_ctx->services = ServicePtrs;
-		lp_ctx->bInGlobalSection = bInGlobalSection;
-		lp_ctx->flags = flags_list;
-		ok = parm_table[parmnum].special(lp_ctx, snum, pszParmValue,
-						  (char **)parm_ptr);
+	lp_ctx = loadparm_init_s3(frame,
+				  loadparm_s3_helpers());
+	if (lp_ctx == NULL) {
+		DEBUG(0, ("loadparm_init_s3 failed\n"));
 		TALLOC_FREE(frame);
-
-		if (!ok) {
-			return false;
-		}
-		goto mark_non_default;
+		return false;
 	}
 
-	TALLOC_FREE(frame);
-
-	ok = set_variable_helper(mem_ctx, parmnum, parm_ptr, pszParmName, pszParmValue);
+	lp_ctx->sDefault = &sDefault;
+	lp_ctx->services = ServicePtrs;
+	lp_ctx->bInGlobalSection = bInGlobalSection;
+	lp_ctx->flags = flags_list;
 
-	if (!ok) {
-		return false;
-	}
+	ok = set_variable(mem_ctx, snum, parmnum, parm_ptr, pszParmName, pszParmValue,
+			    lp_ctx, (snum < 0));
+	TALLOC_FREE(frame);
 
-mark_non_default:
-	if (snum < 0 && (flags_list[parmnum] & FLAG_DEFAULT)) {
-		flags_list[parmnum] &= ~FLAG_DEFAULT;
-		/* we have to also unset FLAG_DEFAULT on aliases */
-		for (i=parmnum-1;i>=0 && parm_table[i].offset == parm_table[parmnum].offset;i--) {
-			flags_list[i] &= ~FLAG_DEFAULT;
-		}
-		for (i=parmnum+1;i<num_parameters() && parm_table[i].offset == parm_table[parmnum].offset;i++) {
-			flags_list[i] &= ~FLAG_DEFAULT;
-		}
-	}
-	return true;
+	return ok;
 }
 
 /***************************************************************************
-- 
1.9.3



More information about the samba-technical mailing list