X-Git-Url: http://git.samba.org/samba.git/?p=sfrench%2Fsamba-autobuild%2F.git;a=blobdiff_plain;f=source4%2Flib%2Fsamba3%2Fsamba3.c;h=b919366ce3561af0774f651da01ae6e3252d4dbe;hp=bfd41d6554827f707a68b660ed489506360b2ef2;hb=9f4b32996c1c97122b198a13216c35ad40f6ea2d;hpb=cdf218e270bb6e0e3e04419279292c80ed39fb98 diff --git a/source4/lib/samba3/samba3.c b/source4/lib/samba3/samba3.c index bfd41d65548..b919366ce35 100644 --- a/source4/lib/samba3/samba3.c +++ b/source4/lib/samba3/samba3.c @@ -20,40 +20,63 @@ #include "includes.h" #include "lib/samba3/samba3.h" -struct samba3 *samba3_read(const char *libdir, TALLOC_CTX *ctx) +struct samba3_domainsecrets *samba3_find_domainsecrets(struct samba3 *db, const char *name) { - struct samba3 *ret; - char *dbfile; - - ret = talloc(ctx, struct samba3); + int i; - asprintf(&dbfile, "%s/winsdb.dat", libdir); - samba3_read_winsdb(dbfile, ret, &ret->winsdb_entries, &ret->winsdb_count); - SAFE_FREE(dbfile); + for (i = 0; i < db->secrets.domain_count; i++) { + if (!strcasecmp_m(db->secrets.domains[i].name, name)) + return &db->secrets.domains[i]; + } - asprintf(&dbfile, "%s/passdb.tdb", libdir); - samba3_read_tdbsam(dbfile, ctx, &ret->samaccounts, &ret->samaccount_count); - SAFE_FREE(dbfile); + return NULL; +} - asprintf(&dbfile, "%s/groupdb.tdb", libdir); - samba3_read_grouptdb(dbfile, ctx, &ret->group); - SAFE_FREE(dbfile); +NTSTATUS samba3_read(const char *libdir, const char *smbconf, TALLOC_CTX *ctx, struct samba3 **samba3) +{ + struct samba3 *ret; + char *dbfile = NULL; - asprintf(&dbfile, "%s/idmap.tdb", libdir); - samba3_read_idmap(dbfile, ctx, &ret->idmap); - SAFE_FREE(dbfile); + ret = talloc_zero(ctx, struct samba3); + + if (smbconf) { + ret->configuration = param_init(ret); + param_read(ret->configuration, smbconf); + } - asprintf(&dbfile, "%s/account_policy.tdb", libdir); + dbfile = talloc_asprintf(ctx, "%s/account_policy.tdb", libdir); samba3_read_account_policy(dbfile, ctx, &ret->policy); - SAFE_FREE(dbfile); + talloc_free(dbfile); - asprintf(&dbfile, "%s/registry.tdb", libdir); + dbfile = talloc_asprintf(ctx, "%s/registry.tdb", libdir); samba3_read_regdb(dbfile, ctx, &ret->registry); - SAFE_FREE(dbfile); + talloc_free(dbfile); - asprintf(&dbfile, "%s/secrets.tdb", libdir); + dbfile = talloc_asprintf(ctx, "%s/secrets.tdb", libdir); samba3_read_secrets(dbfile, ctx, &ret->secrets); - SAFE_FREE(dbfile); + talloc_free(dbfile); + + dbfile = talloc_asprintf(ctx, "%s/share_info.tdb", libdir); + samba3_read_share_info(dbfile, ctx, ret); + talloc_free(dbfile); + + dbfile = talloc_asprintf(ctx, "%s/winbindd_idmap.tdb", libdir); + samba3_read_idmap(dbfile, ctx, &ret->idmap); + talloc_free(dbfile); + + dbfile = talloc_asprintf(ctx, "%s/wins.dat", libdir); + samba3_read_winsdb(dbfile, ret, &ret->winsdb_entries, &ret->winsdb_count); + talloc_free(dbfile); + + dbfile = talloc_asprintf(ctx, "%s/passdb.tdb", libdir); + samba3_read_tdbsam(dbfile, ctx, &ret->samaccounts, &ret->samaccount_count); + talloc_free(dbfile); + + dbfile = talloc_asprintf(ctx, "%s/group_mapping.tdb", libdir); + samba3_read_grouptdb(dbfile, ctx, &ret->group); + talloc_free(dbfile); + + *samba3 = ret; - return ret; + return NT_STATUS_OK; }