diff options
-rw-r--r-- | source4/param/generic.c | 35 | ||||
-rw-r--r-- | source4/param/loadparm.c | 27 | ||||
-rw-r--r-- | source4/param/param.h | 1 |
3 files changed, 41 insertions, 22 deletions
diff --git a/source4/param/generic.c b/source4/param/generic.c index d65502c02d..f706dd6407 100644 --- a/source4/param/generic.c +++ b/source4/param/generic.c @@ -64,6 +64,9 @@ static struct param_opt *param_get_add(struct param_context *ctx, const char *se struct param_section *section; struct param_opt *p; + SMB_ASSERT(section_name != NULL); + SMB_ASSERT(name != NULL); + section = param_get_section(ctx, section_name); if (section == NULL) { @@ -72,7 +75,7 @@ static struct param_opt *param_get_add(struct param_context *ctx, const char *se return NULL; section->name = talloc_strdup(section, section_name); - DLIST_ADD(ctx->sections, section); + DLIST_ADD_END(ctx->sections, section, struct param_section *); } p = param_section_get(section, name); @@ -82,7 +85,7 @@ static struct param_opt *param_get_add(struct param_context *ctx, const char *se return NULL; p->key = talloc_strdup(p, name); - DLIST_ADD(section->parameters, p); + DLIST_ADD_END(section->parameters, p, struct param_opt *); } return p; @@ -185,7 +188,7 @@ static bool param_sfunc (const char *name, void *_ctx) section->name = talloc_strdup(section, name); - DLIST_ADD(ctx->sections, section); + DLIST_ADD_END(ctx->sections, section, struct param_section *); } /* Make sure this section is on top of the list for param_pfunc */ @@ -235,6 +238,32 @@ int param_read(struct param_context *ctx, const char *fn) return 0; } +int param_use(struct loadparm_context *lp_ctx, struct param_context *ctx) +{ + struct param_section *section; + + for (section = ctx->sections; section; section = section->next) { + struct param_opt *param; + bool isglobal = strcmp(section->name, "global") == 0; + for (param = section->parameters; param; param = param->next) { + if (isglobal) + lp_do_global_parameter(lp_ctx, param->key, + param->value); + else { + struct loadparm_service *service = + lp_service(lp_ctx, section->name); + if (service == NULL) + service = lp_add_service(lp_ctx, &sDefault, section->name); + lp_do_service_parameter(lp_ctx, + service, + param->key, + param->value); + } + } + } + return 0; +} + int param_write(struct param_context *ctx, const char *fn) { int file; diff --git a/source4/param/loadparm.c b/source4/param/loadparm.c index c54932aa47..8e2b8b555c 100644 --- a/source4/param/loadparm.c +++ b/source4/param/loadparm.c @@ -222,7 +222,7 @@ struct loadparm_service /* This is a default service used to prime a services structure */ -static struct loadparm_service sDefault = { +struct loadparm_service sDefault = { .szService = NULL, .szPath = NULL, .szCopy = NULL, @@ -1031,7 +1031,7 @@ static bool string_set(TALLOC_CTX *mem_ctx, char **dest, const char *src) service. ***************************************************************************/ -static struct loadparm_service *add_a_service(struct loadparm_context *lp_ctx, +struct loadparm_service *lp_add_service(struct loadparm_context *lp_ctx, const struct loadparm_service *pservice, const char *name) { @@ -1073,7 +1073,7 @@ static struct loadparm_service *add_a_service(struct loadparm_context *lp_ctx, num_to_alloc); if (!tsp) { - DEBUG(0,("add_a_service: failed to enlarge ServicePtrs!\n")); + DEBUG(0,("lp_add_service: failed to enlarge ServicePtrs!\n")); return NULL; } else { @@ -1086,7 +1086,7 @@ static struct loadparm_service *add_a_service(struct loadparm_context *lp_ctx, lp_ctx->ServicePtrs[i] = init_service(talloc_autofree_context()); if (lp_ctx->ServicePtrs[i] == NULL) { - DEBUG(0,("add_a_service: out of memory!\n")); + DEBUG(0,("lp_add_service: out of memory!\n")); return NULL; } copy_service(lp_ctx->ServicePtrs[i], &tservice, NULL); @@ -1107,7 +1107,7 @@ bool lp_add_home(struct loadparm_context *lp_ctx, { struct loadparm_service *service; - service = add_a_service(lp_ctx, default_service, pszHomename); + service = lp_add_service(lp_ctx, default_service, pszHomename); if (service == NULL) return false; @@ -1132,24 +1132,13 @@ bool lp_add_home(struct loadparm_context *lp_ctx, } /*************************************************************************** - Add a new service, based on an old one. -***************************************************************************/ - -struct loadparm_service *lp_add_service(struct loadparm_context *lp_ctx, - const char *pszService, - struct loadparm_service *default_service) -{ - return add_a_service(lp_ctx, default_service, pszService); -} - -/*************************************************************************** Add the IPC service. ***************************************************************************/ static bool lp_add_hidden(struct loadparm_context *lp_ctx, const char *name, const char *fstype) { - struct loadparm_service *service = add_a_service(lp_ctx, &sDefault, name); + struct loadparm_service *service = lp_add_service(lp_ctx, &sDefault, name); if (service == NULL) return false; @@ -1185,7 +1174,7 @@ bool lp_add_printer(struct loadparm_context *lp_ctx, { const char *comment = "From Printcap"; struct loadparm_service *service; - service = add_a_service(lp_ctx, default_service, pszPrintername); + service = lp_add_service(lp_ctx, default_service, pszPrintername); if (service == NULL) return false; @@ -2024,7 +2013,7 @@ static bool do_section(const char *pszSectionName, void *userdata) /* issued by the post-processing of a previous section. */ DEBUG(2, ("Processing section \"[%s]\"\n", pszSectionName)); - if ((lp_ctx->currentService = add_a_service(lp_ctx, &sDefault, + if ((lp_ctx->currentService = lp_add_service(lp_ctx, &sDefault, pszSectionName)) == NULL) { DEBUG(0, ("Failed to add a new service\n")); diff --git a/source4/param/param.h b/source4/param/param.h index 1dd5950e31..210b21d9a0 100644 --- a/source4/param/param.h +++ b/source4/param/param.h @@ -63,5 +63,6 @@ struct loadparm_service; #include "param/proto.h" extern struct loadparm_context *global_loadparm; +extern struct loadparm_service sDefault; #endif /* _PARAM_H */ |