diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2005-08-30 13:58:48 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:35:02 -0500 |
commit | a3a7881d39d0c294d0cd2ce13203478fb889b07c (patch) | |
tree | 4f2a78f93e9a369cd6658f2f6ef180b8f27ebe70 /source4/lib/samba3 | |
parent | f3c121eb748b37a8b60d353d371bed9b79d0e37c (diff) | |
download | samba-a3a7881d39d0c294d0cd2ce13203478fb889b07c.tar.gz samba-a3a7881d39d0c294d0cd2ce13203478fb889b07c.tar.bz2 samba-a3a7881d39d0c294d0cd2ce13203478fb889b07c.zip |
r9798: Add generic functions for handling smb.conf files (the parameters don't to be pre-declared). Also doesn't use any globals, so multiple files can be loaded at once.
Currently uses the prefix "param" for all functions and structures; suggestions for better ones are welcome...
Remove old smb.conf-parsing code from libsamba3.
(This used to be commit 414e5f7f6dc38a8fde3b61d524a664f56f9ea592)
Diffstat (limited to 'source4/lib/samba3')
-rw-r--r-- | source4/lib/samba3/samba3.c | 95 | ||||
-rw-r--r-- | source4/lib/samba3/samba3.h | 11 | ||||
-rw-r--r-- | source4/lib/samba3/share_info.c | 6 |
3 files changed, 9 insertions, 103 deletions
diff --git a/source4/lib/samba3/samba3.c b/source4/lib/samba3/samba3.c index 56a7738693..d90d5edbfe 100644 --- a/source4/lib/samba3/samba3.c +++ b/source4/lib/samba3/samba3.c @@ -20,12 +20,6 @@ #include "includes.h" #include "lib/samba3/samba3.h" -struct smbconf_data { - TALLOC_CTX *ctx; - struct samba3 *db; - struct samba3_share_info *current_share; -}; - struct samba3_domainsecrets *samba3_find_domainsecrets(struct samba3 *db, const char *name) { int i; @@ -38,93 +32,6 @@ struct samba3_domainsecrets *samba3_find_domainsecrets(struct samba3 *db, const return NULL; } -struct samba3_share_info *samba3_find_share(struct samba3 *db, const char *name) -{ - int i; - for (i = 0; i < db->share_count; i++) { - if (!strcasecmp_m(db->shares[i].name, name)) - return &db->shares[i]; - } - - return NULL; -} - - -struct samba3_share_info *samba3_find_add_share(struct samba3 *db, TALLOC_CTX* ctx, const char *name) -{ - struct samba3_share_info *share = samba3_find_share(db, name); - - if (share) - return share; - - db->shares = talloc_realloc(ctx, db->shares, struct samba3_share_info, db->share_count+1); - ZERO_STRUCT(db->shares[db->share_count]); - db->shares[db->share_count].name = talloc_strdup(ctx, name); - db->share_count++; - - return &db->shares[db->share_count-1]; -} - -const char *samba3_get_param(struct samba3 *samba3, const char *section, const char *param) -{ - int i; - struct samba3_share_info *share = samba3_find_share(samba3, section); - - if (share == NULL) - return NULL; - - for (i = 0; i < share->parameter_count; i++) { - if (!strcasecmp_m(share->parameters[i].name, param)) - return share->parameters[i].value; - } - - return NULL; -} - - -static BOOL samba3_sfunc (const char *name, void *_db) -{ - struct smbconf_data *privdat = _db; - - privdat->current_share = samba3_find_add_share(privdat->db, privdat->ctx, name); - - return True; -} - -static BOOL samba3_pfunc (const char *name, const char *value, void *_db) -{ - struct smbconf_data *privdat = _db; - struct samba3_parameter *p; - - privdat->current_share->parameters = - talloc_realloc(privdat->ctx, privdat->current_share->parameters, - struct samba3_parameter, - privdat->current_share->parameter_count+1); - - p = &privdat->current_share->parameters[privdat->current_share->parameter_count]; - p->name = talloc_strdup(privdat->ctx, name); - p->value = talloc_strdup(privdat->ctx, value); - - privdat->current_share->parameter_count++; - - return True; -} - -NTSTATUS samba3_read_smbconf(const char *fn, TALLOC_CTX *ctx, struct samba3 *db) -{ - struct smbconf_data privdat; - - privdat.ctx = ctx; - privdat.db = db; - privdat.current_share = samba3_find_add_share(db, ctx, "global"); - - if (!pm_process( fn, samba3_sfunc, samba3_pfunc, &privdat )) { - return NT_STATUS_UNSUCCESSFUL; - } - - return NT_STATUS_OK; -} - NTSTATUS samba3_read(const char *smbconf, const char *libdir, TALLOC_CTX *ctx, struct samba3 **samba3) { struct samba3 *ret; @@ -133,7 +40,7 @@ NTSTATUS samba3_read(const char *smbconf, const char *libdir, TALLOC_CTX *ctx, s ret = talloc_zero(ctx, struct samba3); if (smbconf) - samba3_read_smbconf(smbconf, ctx, ret); + ret->configuration = param_read(ret, smbconf); dbfile = talloc_asprintf(ctx, "%s/account_policy.tdb", libdir); samba3_read_account_policy(dbfile, ctx, &ret->policy); diff --git a/source4/lib/samba3/samba3.h b/source4/lib/samba3/samba3.h index b8a9c68617..f0f4c99513 100644 --- a/source4/lib/samba3/samba3.h +++ b/source4/lib/samba3/samba3.h @@ -23,6 +23,7 @@ #include "librpc/gen_ndr/security.h" #include "librpc/gen_ndr/samr.h" +#include "param/generic.h" struct samba3_samaccount { uint32_t logon_time, @@ -185,21 +186,15 @@ struct samba3_secrets } *afs_keyfiles; }; -struct samba3_parameter { - char *name; - char *value; -}; - struct samba3_share_info { char *name; struct security_descriptor secdesc; - - uint32_t parameter_count; - struct samba3_parameter *parameters; }; struct samba3 { + struct param_context *configuration; + uint32_t winsdb_count; struct samba3_winsdb_entry *winsdb_entries; diff --git a/source4/lib/samba3/share_info.c b/source4/lib/samba3/share_info.c index 3479a7063c..e96adfc175 100644 --- a/source4/lib/samba3/share_info.c +++ b/source4/lib/samba3/share_info.c @@ -66,7 +66,11 @@ NTSTATUS samba3_read_share_info(const char *fn, TALLOC_CTX *ctx, struct samba3 * name = talloc_strndup(ctx, kbuf.dptr+strlen("SECDESC/"), kbuf.dsize-strlen("SECDESC/")); - share = samba3_find_add_share(db, ctx, name); + db->shares = talloc_realloc(db, db->shares, struct samba3_share_info, db->share_count+1); + share = &db->shares[db->share_count]; + db->share_count++; + + share->name = talloc_strdup(db, name); vbuf = tdb_fetch(tdb, kbuf); blob.data = (uint8_t *)vbuf.dptr; |