We wrote a script to do just that.
The idea is that you could supply a txt file with all your indexes and use ndsindex to add|delete|suspend|resume|list them.
Here is the script.
NOTE:Use at your own risk and you will need to modify for your environment.
#!/bin/bash
#
# Reads from $2 to manage indexes
# $1 = Index Operation to perform add|delete|suspend|resume|list
#
# $2 = list of indexes or a full path to file containing indexes
#
# 8/11/2005 --Fixed problem with NDS attribute names that contain a space
# Changed loop to run ndsindex for each index (this is so that
# a single error will not cause all changes to fail)
# Added a search for a .der matching the name of the tree
# Changed how server DN is read
# 8/18/2005 --Fixed problem seen when multiple matching .der files found
#
# 7/15/2007 2:41:58 PM - Minor syntax changes and added documentation
#
# Assumes there is a ndsuser on this local host and that certificates for each tree are present in the
# home directory for the ndsuser.
#
# infile File format follows:
# indexDefinition each index defintion should look like
# "<indexName>;<attributeName>;<indextype>"
# where:
# indexName Name you choose to name your index
# attributeName Name of attribute to be indexed
# indextype Can be one of VALUE, SUBSTRING or PRESENCE
#
# w1costCenter;costCenter;value
# w1FullName;fullName;value
# w1InternetEMailAddress;mail;value
# w1L;l;value
# w1Lob;b1Lob;value
# w1ObjectClass;objectClass;value
# NOTE: Please no spaces in Index Names We think this is fixed, but why use spaces ?
##########################################################################
indexOP=$1
infile=$2
# Validate parameters
case $indexOP in
add|delete|suspend|resume|list)
printf "\nYou have specified index operation: $indexOP.\n\n"
;;
*)
printf "\nUnrecognized index operation: $indexOP.\n"
printf "Valid paramters are: add|delete|suspend|resume|list\n"
exit 1
;;esac
if [ "$indexOP" != "list" -a ! -f "$infile" ]
then
printf "\nIndex definition file not found: $infile.\n"
printf "Usage: ./indexMan.sh [add|delete|suspend|resume] [index definition input file]\n"
exit 1
fi
# Initialize variables
#unset indexdefs
ndsUserHome=`cat /etc/passwd | grep ndsuser | cut -d: -f6`
treename=`ndsconfig get n4u.base.tree-name | cut -d= -f2`
LDAP1=localhost
CERT1=`find $ndsUserHome -name $treename.der | tail -1`
BaseDN1=dc=willeke,dc=com
ADMIN1=cn=admin,ou=Administration,$BaseDN1
SVR1="cn=`ndsconfig get n4u.nds.server-name | cut -d= -f2`,`ndsconfig get n4u.nds.server-context | cut -d= -f2- | tr . ,`"
NDSINDEX=/usr/ldaptools/bin/ndsindex
printf "\nLDAP1 = IP or DNS server of LDAP to write changes to.\n"
printf "CERT1 = Path to SSL certificate file (der format).\n"
printf "ADMIN1 = LDAP FQDN format of ID with rights to make changes (e.g. cn=admin,o=novell).\n"
printf "SVR1 = LDAP FQDN format of server indexes to change (e.g. cn=SERVER,ou=SVR,O=novell).\n\n"
for var in LDAP1 CERT1 ADMIN1 SVR1
do
printf "$var [${!var}]: "
read input
if [ -n "$input" ]
then
eval $var=\"$input\"
fi
done
printf "\nThese parameters will be used:\n"
for var in LDAP1 CERT1 ADMIN1 SVR1
do
printf "$var = ${!var}\n"
done
if [ -z "$password" ]
then
# Get the admin password
printf "\nEnter the password for $ADMIN1: "
stty -echo
read password
stty echo
printf "\n\n"
fi
if [ "$indexOP" != "list" ]
then
# Read index names/definitions into a variable
while read line
do
if [ "$indexOP" != "add" ]
then
# Get only the index name
line=`echo $line | cut -d";" -f1`
fi
if [ -z "$CERT1" ]
then
$NDSINDEX $indexOP -h $LDAP1 -Z -D"$ADMIN1" -w$password -s"$SVR1" "$line"
echo "^--- -$indexOP- $line."
else [ -n "$CERT1" ]
$NDSINDEX $indexOP -h $LDAP1 -e"$CERT1" -D"$ADMIN1" -w$password -s"$SVR1" "$line"
echo "^--- -$indexOP- $line."
fi
done < <(grep -v "^#" $infile)
else
if [ -z "$CERT1" ]
then
$NDSINDEX $indexOP -h $LDAP1 -Z -D"$ADMIN1" -w$password -s"$SVR1"
else [ -n "$CERT1" ]
$NDSINDEX $indexOP -h $LDAP1 -e"$CERT1" -D"$ADMIN1" -w$password -s"$SVR1"
fi
fi
#### END OF SCRIPT #############