/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2004 The OpenLDAP Foundation.
+ * Copyright 1998-2011 The OpenLDAP Foundation.
* Portions Copyright 1998-2003 Kurt D. Zeilenga.
* All rights reserved.
*
ID id;
int rc = EXIT_SUCCESS;
const char *progname = "slapindex";
+ AttributeDescription *ad, **adv = NULL;
slap_tool_init( progname, SLAPINDEX, argc, 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 )
{
exit( EXIT_FAILURE );
}
+ argc -= optind;
+ if ( argc > 0 ) {
+ const char *text;
+ int i;
+
+ argv = &argv[optind];
+ adv = (AttributeDescription **)argv;
+
+ for (i = 0; i < argc; i++ ) {
+ ad = NULL;
+ rc = slap_str2ad( argv[i], &ad, &text );
+ if ( rc != LDAP_SUCCESS ) {
+ fprintf( stderr, "slap_str2ad(%s) failed %d (%s)\n",
+ argv[i], rc, ldap_err2string( rc ));
+ exit( EXIT_FAILURE );
+ }
+ adv[i] = ad;
+ }
+ }
+
if( be->be_entry_open( be, 0 ) != 0 ) {
fprintf( stderr, "%s: could not open database.\n",
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 );
}
- rtn = be->be_entry_reindex( be, id );
+ rtn = be->be_entry_reindex( be, id, adv );
if( rtn != LDAP_SUCCESS ) {
rc = EXIT_FAILURE;
(void) be->be_entry_close( be );
- slap_tool_destroy();
+ if ( slap_tool_destroy())
+ rc = EXIT_FAILURE;
return( rc );
}