[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