diff options
-rw-r--r-- | lib/param/loadparm.c | 29 | ||||
-rw-r--r-- | lib/param/loadparm.h | 1 | ||||
-rw-r--r-- | lib/param/s3_param.h | 2 | ||||
-rw-r--r-- | source3/param/loadparm.c | 12 | ||||
-rw-r--r-- | source3/param/loadparm_ctx.c | 2 |
5 files changed, 32 insertions, 14 deletions
diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c index cd58245148..12e402d080 100644 --- a/lib/param/loadparm.c +++ b/lib/param/loadparm.c @@ -1701,16 +1701,19 @@ 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, - pszParmValue, FLAG_CMDLINE); + bool ok; + ok = lp_do_parameter_parametric(lp_ctx, NULL, pszParmName, + pszParmValue, FLAG_CMDLINE); + if (lp_ctx->s3_fns != NULL) { + if (ok) { + lp_ctx->s3_fns->store_cmdline(pszParmName, pszParmValue); + } + } + return ok; } if (parmnum < 0) { @@ -1721,8 +1724,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 +1751,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) { + lp_ctx->s3_fns->store_cmdline(pszParmName, pszParmValue); + } + return true; } diff --git a/lib/param/loadparm.h b/lib/param/loadparm.h index 1c59e36b8e..0b6eed50d1 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 04dd56564a..ac64d29af3 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 f4ec225626..70085d3404 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 9f9ccd44c5..a3a7284920 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, |