Don't restart winbind if a corrupted tdb is found during initialization.
authorAndreas Schneider <anschneider@suse.de>
Fri, 23 Nov 2007 09:54:48 +0000 (10:54 +0100)
committerMichael Adam <obnox@samba.org>
Wed, 12 Dec 2007 12:51:13 +0000 (13:51 +0100)
The tdb is validated before it gets initialized. Since then sighandlers changed
a restart isn't needed anymore.

source/winbindd/winbindd.c
source/winbindd/winbindd_cache.c

index b695c2e95ee984924e98c647351b9174f74de045..07cf22618e4a37b678876857363e176c103a4cb3 100644 (file)
@@ -1157,20 +1157,6 @@ int main(int argc, char **argv, char **envp)
 
        pidfile_create("winbindd");
 
-       /* Ensure all cache and idmap caches are consistent
-          before we startup. */
-
-       if (winbindd_validate_cache()) {
-               /* We have a bad cache, but luckily we
-                  just deleted it. Restart ourselves */
-               int i;
-               /* Ensure we have no open low fd's. */
-               for (i = 3; i < 100; i++) {
-                       close(i);
-               }
-               return execve(argv[0], argv, envp);
-       }
-
 #if HAVE_SETPGID
        /*
         * If we're interactive we want to set our own process group for
@@ -1188,7 +1174,15 @@ int main(int argc, char **argv, char **envp)
                DEBUG(0, ("unable to initialize messaging system\n"));
                exit(1);
        }
-       
+
+       /*
+        * Ensure all cache and idmap caches are consistent
+        * before we startup.
+        */
+       if (winbindd_validate_cache() < 0) {
+               DEBUG(0, ("corrupted tdb found, trying to restore backup\n"));
+       }
+
        /* Initialize cache (ensure version is correct). */
        if (!initialize_winbindd_cache()) {
                exit(1);
index f3aa0fce42c6842fb25cc669f1ae76c9c2833e47..7ec8208f4b30d884538c695a03f52d2a94938347 100644 (file)
@@ -3338,8 +3338,7 @@ static void validate_panic(const char *const why)
 
 /***********************************************************************
  Try and validate every entry in the winbindd cache. If we fail here,
- delete the cache tdb and return non-zero - the caller (main winbindd
- function) will restart us as we don't know if we crashed or not.
+ delete the cache tdb and return non-zero.
 ***********************************************************************/
 
 int winbindd_validate_cache(void)