[PATCH 29/37] param: mark non default options using flags in s3

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


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

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 at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
---
 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 ad10943..3ed8b01 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;
 }
 
 /***************************************************************************
-- 
1.9.3



More information about the samba-technical mailing list