]> git.sur5r.net Git - openldap/commitdiff
hack to try as hard as possible to recover a broken database (ITS#6482)
authorPierangelo Masarati <ando@openldap.org>
Thu, 9 Sep 2010 21:49:04 +0000 (21:49 +0000)
committerPierangelo Masarati <ando@openldap.org>
Thu, 9 Sep 2010 21:49:04 +0000 (21:49 +0000)
doc/man/man8/slapcat.8
servers/slapd/slapcat.c

index 4673e49118529f42f6aced4d5655b1cf1774151c..02e64c89880af5809472dd45d44cb774ceb1a42a 100644 (file)
@@ -82,6 +82,11 @@ option.
 .TP
 .B \-c
 Enable continue (ignore errors) mode.
+Multiple occorrences of
+.B \-c
+make
+.BR slapcat (8)
+try harder.
 .TP
 .BI \-d \ debug-level
 Enable debugging messages as defined by the specified
index af1cae4993e4f17c6d4703ffc382c0659ceaea56..c4e7a7d6586d5ccda5f665de5aaa5e3064b4b306 100644 (file)
@@ -109,8 +109,22 @@ slapcat( int argc, char **argv )
                if ( e == NULL ) {
                        printf("# no data for entry id=%08lx\n\n", (long) id );
                        rc = EXIT_FAILURE;
-                       if( continuemode ) continue;
-                       break;
+                       if ( continuemode == 0 ) {
+                               break;
+
+                       } else if ( continuemode == 1 ) {
+                               continue;
+                       }
+
+                       /* this is a last resort: linearly scan all ids
+                        * trying to recover as much as possible (ITS#6482) */
+                       while ( ++id != NOID ) {
+                               e = be->be_entry_get( be, id );
+                               if ( e != NULL ) break;
+                               printf("# no data for entry id=%08lx\n\n", (long) id );
+                       }
+
+                       if ( e == NULL ) break;
                }
 
                if ( doBSF ) {