]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slapindex.c
Merge remote-tracking branch 'origin/mdb.master' into OPENLDAP_REL_ENG_2_4
[openldap] / servers / slapd / slapindex.c
index e7c2d9e8e9b97c89b4ef76f01e1fc03f133513d4..639859f3ad51fb60e723aa76ee247aabf79490dc 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2007 The OpenLDAP Foundation.
+ * Copyright 1998-2014 The OpenLDAP Foundation.
  * Portions Copyright 1998-2003 Kurt D. Zeilenga.
  * All rights reserved.
  *
@@ -43,7 +43,7 @@ slapindex( int argc, char **argv )
 
        if( !be->be_entry_open ||
                !be->be_entry_close ||
-               !be->be_entry_first ||
+               !( be->be_entry_first || be->be_entry_first_x ) ||
                !be->be_entry_next  ||
                !be->be_entry_reindex )
        {
@@ -77,22 +77,23 @@ slapindex( int argc, char **argv )
                        progname );
                exit( EXIT_FAILURE );
        }
-       
-       for ( id = be->be_entry_first( be );
-               id != NOID;
-               id = be->be_entry_next( be ) )
-       {
+
+       if ( be->be_entry_first ) {
+               id = be->be_entry_first( be );
+
+       } else {
+               assert( be->be_entry_first_x != NULL );
+               id = be->be_entry_first_x( be, NULL, LDAP_SCOPE_DEFAULT, NULL );
+       }
+
+       for ( ; id != NOID; id = be->be_entry_next( be ) ) {
                int rtn;
 
                if( verbose ) {
                        printf("indexing id=%08lx\n", (long) id );
                }
 
-               /* Backend will set its attr list on first call. Clear
-                * the list on all subsequent calls.
-                */
                rtn =  be->be_entry_reindex( be, id, adv );
-               adv = NULL;
 
                if( rtn != LDAP_SUCCESS ) {
                        rc = EXIT_FAILURE;
@@ -103,6 +104,7 @@ slapindex( int argc, char **argv )
 
        (void) be->be_entry_close( be );
 
-       slap_tool_destroy();
+       if ( slap_tool_destroy())
+               rc = EXIT_FAILURE;
        return( rc );
 }