[PATCH 25/37] param: replace lp_set_cmdline in s3 helpers to store_cmdline

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


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

Change-Id: I9a6ac66eeb8e0dd9ba356f5201f7ac09784b476d
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
---
 lib/param/loadparm.c         | 29 ++++++++++++++++++++++-------
 lib/param/loadparm.h         |  1 +
 lib/param/s3_param.h         |  2 +-
 source3/param/loadparm.c     | 12 ++++++++----
 source3/param/loadparm_ctx.c |  2 +-
 5 files changed, 33 insertions(+), 13 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 32b4c11..b5d525e 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -1701,16 +1701,21 @@ bool lpcfg_set_cmdline(struct loadparm_context *lp_ctx, const char *pszParmName,
 
 	while (isspace((unsigned char)*pszParmValue)) pszParmValue++;
 
-	if (lp_ctx->s3_fns) {
-		return lp_ctx->s3_fns->set_cmdline(pszParmName, pszParmValue);
-	}
-
 	parmnum = lpcfg_map_parameter(pszParmName);
 
 	if (parmnum < 0 && strchr(pszParmName, ':')) {
 		/* set a parametric option */
-		return lp_do_parameter_parametric(lp_ctx, NULL, pszParmName,
+		if (lp_ctx->s3_fns != NULL) {
+			bool ok;
+			ok = lp_ctx->s3_fns->lp_do_parameter(-1, pszParmName, pszParmValue);
+			if (ok) {
+				lp_ctx->s3_fns->store_cmdline(pszParmName, pszParmValue);
+			}
+			return ok;
+		} else {
+			return lp_do_parameter_parametric(lp_ctx, NULL, pszParmName,
 						  pszParmValue, FLAG_CMDLINE);
+		}
 	}
 
 	if (parmnum < 0) {
@@ -1721,8 +1726,14 @@ bool lpcfg_set_cmdline(struct loadparm_context *lp_ctx, const char *pszParmName,
 	/* reset the CMDLINE flag in case this has been called before */
 	lp_ctx->flags[parmnum] &= ~FLAG_CMDLINE;
 
-	if (!lpcfg_do_global_parameter(lp_ctx, pszParmName, pszParmValue)) {
-		return false;
+	if (lp_ctx->s3_fns != NULL) {
+		if (!lp_ctx->s3_fns->lp_do_parameter(-1, pszParmName, pszParmValue)) {
+			return false;
+		}
+	} else {
+		if (!lpcfg_do_global_parameter(lp_ctx, pszParmName, pszParmValue)) {
+			return false;
+		}
 	}
 
 	lp_ctx->flags[parmnum] |= FLAG_CMDLINE;
@@ -1742,6 +1753,10 @@ bool lpcfg_set_cmdline(struct loadparm_context *lp_ctx, const char *pszParmName,
 		lp_ctx->flags[i] |= FLAG_CMDLINE;
 	}
 
+	if (lp_ctx->s3_fns != NULL) {
+		return lp_ctx->s3_fns->store_cmdline(pszParmName, pszParmValue);
+	}
+
 	return true;
 }
 
diff --git a/lib/param/loadparm.h b/lib/param/loadparm.h
index 1c59e36..0b6eed5 100644
--- a/lib/param/loadparm.h
+++ b/lib/param/loadparm.h
@@ -285,6 +285,7 @@ int getservicebyname(const char *, struct loadparm_service *);
 bool lp_include(struct loadparm_context *, int, const char *, char **);
 void init_printer_values(TALLOC_CTX *, struct loadparm_service *);
 bool lp_do_section(const char *pszSectionName, void *userdata);
+bool store_lp_set_cmdline(const char *pszParmName, const char *pszParmValue);
 
 int num_parameters(void);
 
diff --git a/lib/param/s3_param.h b/lib/param/s3_param.h
index 04dd565..ac64d29 100644
--- a/lib/param/s3_param.h
+++ b/lib/param/s3_param.h
@@ -11,7 +11,7 @@ struct loadparm_s3_helpers
 	int (*getservicebyname)(const char *, struct loadparm_service *);
 	int (*get_numservices)(void);
 	bool (*load)(const char *filename);
-	bool (*set_cmdline)(const char *pszParmName, const char *pszParmValue);
+	bool (*store_cmdline)(const char *pszParmName, const char *pszParmValue);
 	void (*dump)(FILE *f, bool show_defaults, int maxtoprint);
 	char * (*lp_string)(TALLOC_CTX *ctx, const char *in);
 	bool (*lp_string_set)(char **dest, const char *src);
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 7dc4e99..85be492 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -579,7 +579,7 @@ static struct lp_stored_option *stored_options;
   re-applied when we do a globals reset, so that cmdline set options
   are sticky across reloads of smb.conf
  */
-static bool store_lp_set_cmdline(const char *pszParmName, const char *pszParmValue)
+bool store_lp_set_cmdline(const char *pszParmName, const char *pszParmValue)
 {
 	struct lp_stored_option *entry, *entry_next;
 	for (entry = stored_options; entry != NULL; entry = entry_next) {
@@ -2710,12 +2710,16 @@ bool lp_set_cmdline(const char *pszParmName, const char *pszParmValue)
 {
 	bool ret;
 	TALLOC_CTX *frame = talloc_stackframe();
+	struct loadparm_context *lp_ctx;
 
-	ret = lp_set_cmdline_helper(pszParmName, pszParmValue);
-	if (ret) {
-		store_lp_set_cmdline(pszParmName, pszParmValue);
+	lp_ctx = loadparm_init_s3(talloc_tos(), loadparm_s3_helpers());
+	if (lp_ctx == NULL) {
+		DEBUG(0, ("loadparm_init_s3 failed\n"));
+		return false;
 	}
 
+	ret = lpcfg_set_cmdline(lp_ctx, pszParmName, pszParmValue);
+
 	TALLOC_FREE(frame);
 	return ret;
 }
diff --git a/source3/param/loadparm_ctx.c b/source3/param/loadparm_ctx.c
index 9f9ccd4..a3a7284 100644
--- a/source3/param/loadparm_ctx.c
+++ b/source3/param/loadparm_ctx.c
@@ -66,7 +66,7 @@ static struct loadparm_s3_helpers s3_fns =
 	.get_default_loadparm_service = lp_default_loadparm_service,
 	.get_numservices = lp_numservices,
 	.load = lp_load_for_s4_ctx,
-	.set_cmdline = lp_set_cmdline,
+	.store_cmdline = store_lp_set_cmdline,
 	.dump = lp_dump,
 	.lp_string = lp_string,
 	.lp_string_set = lp_string_set,
-- 
1.9.3



More information about the samba-technical mailing list