Author: jelmer Date: 2005-08-30 17:23:07 +0000 (Tue, 30 Aug 2005) New Revision: 9808
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9808 Log: Improve code that selects what "passdb backend" to import from. Modified: branches/SAMBA_4_0/source/lib/samba3/PLAN branches/SAMBA_4_0/source/lib/samba3/samba3.c branches/SAMBA_4_0/source/lib/samba3/smbpasswd.c Changeset: Modified: branches/SAMBA_4_0/source/lib/samba3/PLAN =================================================================== --- branches/SAMBA_4_0/source/lib/samba3/PLAN 2005-08-30 17:21:41 UTC (rev 9807) +++ branches/SAMBA_4_0/source/lib/samba3/PLAN 2005-08-30 17:23:07 UTC (rev 9808) @@ -1,5 +1,3 @@ TODO (SoC project): - - move ini parsing stuff to seperate file param/ini.c - - parse "passdb backend" setting and parse tdbsam/passdb based on it - test ldb_map backend (testsuite?) - testsuite for the static upgrade Modified: branches/SAMBA_4_0/source/lib/samba3/samba3.c =================================================================== --- branches/SAMBA_4_0/source/lib/samba3/samba3.c 2005-08-30 17:21:41 UTC (rev 9807) +++ branches/SAMBA_4_0/source/lib/samba3/samba3.c 2005-08-30 17:23:07 UTC (rev 9808) @@ -32,6 +32,55 @@ return NULL; } +NTSTATUS samba3_read_passdb_backends(TALLOC_CTX *ctx, const char *libdir, struct samba3 *samba3) +{ + char *dbfile; + NTSTATUS status = NT_STATUS_OK; + int i; + const char **backends = param_get_string_list(samba3->configuration, NULL, "passdb backends", NULL); + + /* Default to smbpasswd */ + if (backends == NULL) + backends = str_list_make(ctx, "smbpasswd", LIST_SEP); + else + backends = str_list_copy(ctx, backends); + + for (i = 0; backends[i]; i++) { + if (!strncmp(backends[i], "tdbsam", strlen("tdbsam"))) { + const char *p = strchr(backends[i], ':'); + if (p && p[1]) { + dbfile = talloc_strdup(ctx, p+1); + } else { + dbfile = talloc_asprintf(ctx, "%s/passdb.tdb", libdir); + } + samba3_read_tdbsam(dbfile, ctx, &samba3->samaccounts, &samba3->samaccount_count); + talloc_free(dbfile); + } else if (!strncmp(backends[i], "smbpasswd", strlen("smbpasswd"))) { + const char *p = strchr(backends[i], ':'); + if (p && p[1]) { + dbfile = talloc_strdup(ctx, p+1); + } else if ((p = param_get_string(samba3->configuration, NULL, "smb passwd file"))) { + dbfile = talloc_strdup(ctx, p); + } else { + dbfile = talloc_strdup(ctx, "/etc/samba/smbpasswd"); + } + + samba3_read_smbpasswd(dbfile, ctx, &samba3->samaccounts, &samba3->samaccount_count); + talloc_free(dbfile); + } else if (!strncmp(backends[i], "ldapsam", strlen("ldapsam"))) { + /* Will use samba3sam mapping module */ + } else { + DEBUG(0, ("Upgrade from %s database not supported", backends[i])); + status = NT_STATUS_NOT_SUPPORTED; + continue; + } + } + + talloc_free(backends); + + return status; +} + NTSTATUS samba3_read(const char *libdir, const char *smbconf, TALLOC_CTX *ctx, struct samba3 **samba3) { struct samba3 *ret; @@ -68,9 +117,7 @@ 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); + samba3_read_passdb_backends(ctx, libdir, ret); dbfile = talloc_asprintf(ctx, "%s/group_mapping.tdb", libdir); samba3_read_grouptdb(dbfile, ctx, &ret->group); Modified: branches/SAMBA_4_0/source/lib/samba3/smbpasswd.c =================================================================== --- branches/SAMBA_4_0/source/lib/samba3/smbpasswd.c 2005-08-30 17:21:41 UTC (rev 9807) +++ branches/SAMBA_4_0/source/lib/samba3/smbpasswd.c 2005-08-30 17:23:07 UTC (rev 9808) @@ -219,6 +219,11 @@ lines = file_lines_load(filename, &numlines, ctx); + if (lines == NULL) { + DEBUG(0, ("Unable to load lines from %s\n", filename)); + return NT_STATUS_UNSUCCESSFUL; + } + *accounts = talloc_array(ctx, struct samba3_samaccount, numlines); for (i = 0; i < numlines; i++) {
