diff options
author | Jeremy Allison <jra@samba.org> | 2009-03-27 12:09:51 -0700 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2009-03-30 12:02:44 +0200 |
commit | 8a5d0e0989ea0ba40b0d08752248c3d2e4fb061b (patch) | |
tree | d06b082cdc03d7e28222e686c2f606847eec5d5d | |
parent | f64d676dd13cf2c84d8e12dd07cad5fd77cc5891 (diff) | |
download | samba-8a5d0e0989ea0ba40b0d08752248c3d2e4fb061b.tar.gz |
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.
(cherry picked from commit 52fe104996439db24a7e6b17baa7fec47ba230bb)
-rw-r--r-- | source/include/dbwrap.h | 2 | ||||
-rw-r--r-- | source/lib/dbwrap.c | 27 | ||||
-rw-r--r-- | source/passdb/pdb_tdb.c | 3 |
3 files changed, 31 insertions, 1 deletions
diff --git a/source/include/dbwrap.h b/source/include/dbwrap.h index 1f388165dba..329c191af57 100644 --- a/source/include/dbwrap.h +++ b/source/include/dbwrap.h @@ -49,6 +49,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/source/lib/dbwrap.c b/source/lib/dbwrap.c index 7fe1631bff0..00182aa15e3 100644 --- a/source/lib/dbwrap.c +++ b/source/lib/dbwrap.c @@ -42,6 +42,33 @@ static int dbwrap_fallback_fetch(struct db_context *db, TALLOC_CTX *mem_ctx, return 0; } +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; +} + /** * If you need transaction support use db_open_trans() */ diff --git a/source/passdb/pdb_tdb.c b/source/passdb/pdb_tdb.c index 9928768a219..f60517f7c1e 100644 --- a/source/passdb/pdb_tdb.c +++ b/source/passdb/pdb_tdb.c @@ -921,7 +921,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; } |