r18868: just in case there is a disaster (with our code? never ...) use a
authorAndrew Tridgell <tridge@samba.org>
Sun, 24 Sep 2006 02:58:58 +0000 (02:58 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:14:39 +0000 (12:14 -0500)
rename to group_mapping.tdb.upgraded rather than an unlink when
upgrading. So if we absolutely have to go back to the tdb, we can
change mapping_ldb.o to mapping_tdb.o in Makefile.in and recover
peoples group mappings.

We could go one step futher and make the backend configurable. Any
opinions on that?

source/groupdb/mapping_ldb.c

index c8824674e1a63e720b6ee56d89b70b99de6b760b..6368e41a060f63d4b2ccacbddd85a61f5d1c0d46 100644 (file)
@@ -643,6 +643,8 @@ static BOOL mapping_upgrade(const char *tdb_path)
 {
        static TDB_CONTEXT *tdb;
        int ret, status=0;
+       pstring old_path;
+       pstring new_path;
 
        tdb = tdb_open_log(tdb_path, 0, TDB_DEFAULT, O_RDWR, 0600);
        if (tdb == NULL) goto failed;
@@ -657,8 +659,11 @@ static BOOL mapping_upgrade(const char *tdb_path)
 
        if (tdb) tdb_close(tdb);
 
-       if (unlink(tdb_path) != 0) {
-               DEBUG(0,("Failed to delete old group mapping database\n"));
+       pstrcpy(old_path, tdb_path);
+       pstrcpy(new_path, lock_path("group_mapping.tdb.upgraded"));
+
+       if (rename(old_path, new_path) != 0) {
+               DEBUG(0,("Failed to rename old group mapping database\n"));
                goto failed;
        }
        return True;