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++) {

Reply via email to