svn commit: samba r9808 - in branches/SAMBA_4_0/source/lib/samba3: .

jelmer at samba.org jelmer at samba.org
Tue Aug 30 17:23:07 GMT 2005


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



More information about the samba-cvs mailing list