summaryrefslogtreecommitdiffstats
path: root/source3/param
diff options
context:
space:
mode:
authorGarming Sam <garming@catalyst.net.nz>2014-02-26 17:11:24 +1300
committerAndrew Bartlett <abartlet@samba.org>2014-07-07 23:32:36 +0200
commitc76a8a1ba5fcf8df898f68839679444cd0e95362 (patch)
treec8570fbeab7366076d4083e40d37c8ecc6ea5482 /source3/param
parentedc321df7f8bc8887f34e318f794a4a1690032f3 (diff)
downloadsamba-c76a8a1ba5fcf8df898f68839679444cd0e95362.tar.gz
samba-c76a8a1ba5fcf8df898f68839679444cd0e95362.tar.xz
samba-c76a8a1ba5fcf8df898f68839679444cd0e95362.zip
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 <garming@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Nadezhda Ivanova <nivanova@samba.org>
Diffstat (limited to 'source3/param')
-rw-r--r--source3/param/loadparm.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 8bfeb2fdda..045c42d8df 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<num_parameters() && parm_table[i].offset == parm_table[parmnum].offset;i++) {
+ flags_list[i] &= ~FLAG_DEFAULT;
+ }
+ }
+ return true;
}
/***************************************************************************