[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-767-gd942d24

Jeremy Allison jra at samba.org
Fri Mar 27 19:13:42 GMT 2009


The branch, master has been updated
       via  d942d248d6207312226d597a59c4772aaae614b1 (commit)
      from  66b97d36b9a086f2ef76f2d42a07bfdbdaa0f00d (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit d942d248d6207312226d597a59c4772aaae614b1
Author: Jeremy Allison <jra at samba.org>
Date:   Fri Mar 27 12:12:30 2009 -0700

    Fix bug #6195 - Migrating from 3.0.x to 3.3.x can fail to update passdb.tdb correctly. For the clustering case.
    Clustered setups should have only ever used
    the unsigned version of TDB_DATA in the
    first place so they can't be in this mess :-).
    Just do the normal upgrade in the clustered case.
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source3/include/dbwrap.h |    2 ++
 source3/lib/dbwrap.c     |   27 +++++++++++++++++++++++++++
 source3/passdb/pdb_tdb.c |    3 ++-
 3 files changed, 31 insertions(+), 1 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/dbwrap.h b/source3/include/dbwrap.h
index 16f10cc..1803587 100644
--- a/source3/include/dbwrap.h
+++ b/source3/include/dbwrap.h
@@ -54,6 +54,8 @@ struct db_context {
 	bool persistent;
 };
 
+bool db_is_local(const char *name);
+
 struct db_context *db_open(TALLOC_CTX *mem_ctx,
 			   const char *name,
 			   int hash_size, int tdb_flags,
diff --git a/source3/lib/dbwrap.c b/source3/lib/dbwrap.c
index 5e7ce60..67c08a6 100644
--- a/source3/lib/dbwrap.c
+++ b/source3/lib/dbwrap.c
@@ -65,6 +65,33 @@ static int dbwrap_fallback_parse_record(struct db_context *db, TDB_DATA key,
 	return res;
 }
 
+bool db_is_local(const char *name)
+{
+#ifdef CLUSTER_SUPPORT
+	const char *sockname = lp_ctdbd_socket();
+
+	if(!sockname || !*sockname) {
+		sockname = CTDB_PATH;
+	}
+
+	if (lp_clustering() && socket_exist(sockname)) {
+		const char *partname;
+		/* ctdb only wants the file part of the name */
+		partname = strrchr(name, '/');
+		if (partname) {
+			partname++;
+		} else {
+			partname = name;
+		}
+		/* allow ctdb for individual databases to be disabled */
+		if (lp_parm_bool(-1, "ctdb", partname, True)) {
+			return false;
+		}
+	}
+#endif
+	return true;
+}
+
 /**
  * open a database
  */
diff --git a/source3/passdb/pdb_tdb.c b/source3/passdb/pdb_tdb.c
index 73fcfee..fb40b27 100644
--- a/source3/passdb/pdb_tdb.c
+++ b/source3/passdb/pdb_tdb.c
@@ -322,7 +322,8 @@ static bool tdbsam_convert(struct db_context **pp_db, const char *name, int32 fr
 	struct db_context *db = NULL;
 	int ret;
 
-	if (!tdbsam_convert_backup(name, pp_db)) {
+	/* We only need the update backup for local db's. */
+	if (db_is_local(name) && !tdbsam_convert_backup(name, pp_db)) {
 		DEBUG(0, ("tdbsam_convert: Could not backup %s\n", name));
 		return false;
 	}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list