From dcd27d550fcc6fc8ddbec2f4a310a862f3fbbffc Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 25 Aug 2005 01:12:43 +0000 Subject: r9602: Add support for reading share_info.tdb and smb.conf. Add userdata argument to function pointers for pm_process() (This used to be commit 84b2fb34675fa557173621433838c5a7ec0f1283) --- source4/lib/samba3/samba3.c | 69 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) (limited to 'source4/lib/samba3/samba3.c') diff --git a/source4/lib/samba3/samba3.c b/source4/lib/samba3/samba3.c index bfd41d6554..4eda3bd154 100644 --- a/source4/lib/samba3/samba3.c +++ b/source4/lib/samba3/samba3.c @@ -20,6 +20,71 @@ #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_share_info *samba3_find_share(struct samba3 *db, TALLOC_CTX* ctx, const char *name) +{ + int i; + for (i = 0; i < db->share_count; i++) { + if (!StrCaseCmp(db->shares[i].name, name)) + return &db->shares[i]; + } + + db->shares = talloc_realloc(ctx, db->shares, struct samba3_share_info, db->share_count+1); + ZERO_STRUCT(db->shares[i]); + db->shares[i].name = talloc_strdup(ctx, name); + db->share_count++; + + return &db->shares[i]; +} + +static BOOL samba3_sfunc (const char *name, void *_db) +{ + struct smbconf_data *privdat = _db; + + privdat->current_share = samba3_find_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_share(db, ctx, "global"); + + if (!pm_process( fn, samba3_sfunc, samba3_pfunc, &privdat )) { + return NT_STATUS_UNSUCCESSFUL; + } + + return NT_STATUS_OK; +} + struct samba3 *samba3_read(const char *libdir, TALLOC_CTX *ctx) { struct samba3 *ret; @@ -55,5 +120,9 @@ struct samba3 *samba3_read(const char *libdir, TALLOC_CTX *ctx) samba3_read_secrets(dbfile, ctx, &ret->secrets); SAFE_FREE(dbfile); + asprintf(&dbfile, "%s/share_info.tdb", libdir); + samba3_read_share_info(dbfile, ctx, ret); + SAFE_FREE(dbfile); + return ret; } -- cgit