From c76a8a1ba5fcf8df898f68839679444cd0e95362 Mon Sep 17 00:00:00 2001 From: Garming Sam Date: Wed, 26 Feb 2014 17:11:24 +1300 Subject: [PATCH] param: mark non default options using flags in s3 This change allows lib/param code to see which s3 parameters are currently set to defaults. Change-Id: Ic25b3f8e792a6d72705a7e5d7159ac8f87e18512 Signed-off-by: Garming Sam Reviewed-by: Andrew Bartlett Reviewed-by: Nadezhda Ivanova --- source3/param/loadparm.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 8bfeb2fdda8..045c42d8df5 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -2575,6 +2575,7 @@ bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue struct parmlist_entry **opt_list; TALLOC_CTX *mem_ctx; TALLOC_CTX *frame = talloc_stackframe(); + bool ok; parmnum = lpcfg_map_parameter(pszParmName); @@ -2645,7 +2646,6 @@ bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue /* if it is a special case then go ahead */ if (parm_table[parmnum].special) { - bool ok; struct loadparm_context *lp_ctx = loadparm_init_s3(frame, loadparm_s3_helpers()); lp_ctx->sDefault = &sDefault; @@ -2654,11 +2654,33 @@ bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue ok = parm_table[parmnum].special(lp_ctx, snum, pszParmValue, (char **)parm_ptr); TALLOC_FREE(frame); - return ok; + + if (!ok) { + return false; + } + goto mark_non_default; } TALLOC_FREE(frame); - return set_variable_helper(mem_ctx, parmnum, parm_ptr, pszParmName, pszParmValue); + + ok = set_variable_helper(mem_ctx, parmnum, parm_ptr, pszParmName, pszParmValue); + + if (!ok) { + return false; + } + +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