summaryrefslogtreecommitdiff
path: root/source4/param/generic.c
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2007-11-21 14:49:27 +0100
committerStefan Metzmacher <metze@samba.org>2007-12-21 05:46:00 +0100
commit6357fb802a27b8160e263d32d0596f69186b81a7 (patch)
tree665445a9f83926583314614be1da1575b0d5c68c /source4/param/generic.c
parent91fe80a555e45560e77732fd20cdf5ea439eacfd (diff)
downloadsamba-6357fb802a27b8160e263d32d0596f69186b81a7.tar.gz
samba-6357fb802a27b8160e263d32d0596f69186b81a7.tar.bz2
samba-6357fb802a27b8160e263d32d0596f69186b81a7.zip
r26095: Add function for import a generic configuration file in a loadparm context.
(This used to be commit d74018d05542582515a4d3cc995820667200b301)
Diffstat (limited to 'source4/param/generic.c')
-rw-r--r--source4/param/generic.c35
1 files changed, 32 insertions, 3 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;