Pour btenir la liste des suffixes disponibles sur un serveur LDAP :
ldapsearch -xLL -h ldap.mondomaine.com -b "" -s base "objectclass=*" "cn=SubSchema" +
qui devrait vous renvoyer un résultat similaire à :
... namingContexts: dc=local ...
Pour ne pas avoir à retaper ses credentials, on peut se connecter au serveur LDAP via le socket UNIX :
# ps aux | grep ldapi
openldap 10773 0.0 0.2 101128 5616 ? Ssl févr.13 0:36 /usr/sbin/slapd -h ldap:/// ldapi:/// -g openldap -u openldap -F /etc/ldap/slapd.d
SLAPD_SERVICES="ldap:/// ldapi:///"
service slapd restart
# netstat -nlp | grep slap
qui doit renvoyer quelque chose comme :
# netstat -nlp | grep slap tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 4319/slapd tcp6 0 0 :::389 :::* LISTEN 4319/slapd unix 2 [ ACC ] STREAM LISTENING 9727856 4319/slapd /var/run/slapd/ldapi
tadaaaa voila notre socket
ldapsearch -Y EXTERNAL -H ldapi://%2fvar%2frun%2fslapd%2fldapi -b "cn=config" "(objectclass=*)" dn
On va utiliser l’authentification par socket ci dessus pour jour avec les index de son annuaire LDAP.
On pourra ainsi se débarrasser des messages de warning type :
slapd[1482]: <= bdb_equality_candidates: (uidNumber) not indexed"
On va utilise rla commande ldapsearch en se connectant en root sur le socket qui-va-bien :
# ldapsearch -LLL -Y EXTERNAL -H ldapi://%2fvar%2frun%2fslapd%2fldapi -b "olcDatabase={1}hdb,cn=config" olcDbIndex
qiu devrait vous retourner quelque chose comme :
# ldapsearch -LLL -Y EXTERNAL -H ldapi://%2fvar%2frun%2fslapd%2fldapi -b "olcDatabase={1}hdb,cn=config" olcDbIndex SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 dn: olcDatabase={1}hdb,cn=config olcDbIndex: objectClass eq olcDbIndex: entryUUID eq olcDbIndex: entryCSN eq olcDbIndex: cn eq olcDbIndex: uid eq
Si vous estimez qu'il en manque on peut en rajouter : je vais par exemple rajouter des index d'egalité sur uidNumber et gidNumber
on va utiliser ldapmodify en root qui nous donne un shell :
# ldapmodify -Y EXTERNAL -H ldapi://%2fvar%2frun%2fslapd%2fldapi
la syntaxe ldapmodify est la suivante :
dn: olcDatabase={1}hdb,cn=config
add: olcDbIndex
olcDbIndex: uidNumber eq olcDbIndex: gidNumber eq
modifying entry "olcDatabase={1}hdb,cn=config"
Voici donc la transcription complète de cet ajout d'index :
# ldapmodify -Y EXTERNAL -H ldapi://%2fvar%2frun%2fslapd%2fldapi SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 dn: olcDatabase={1}hdb,cn=config add: olcDbIndex olcDbIndex: uidNumber eq olcDbIndex: gidNumber eq modifying entry "olcDatabase={1}hdb,cn=config" ^C
La requête de listage des index ci dessus devrait donc nous montrer cet ajout, il suffit de le vérifier
# ldapsearch -LLL -Y EXTERNAL -H ldapi://%2fvar%2frun%2fslapd%2fldapi -b "olcDatabase={1}hdb,cn=config" olcDbIndex SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 dn: olcDatabase={1}hdb,cn=config olcDbIndex: objectClass eq olcDbIndex: entryUUID eq olcDbIndex: entryCSN eq olcDbIndex: cn eq olcDbIndex: uid eq olcDbIndex: uidNumber eq olcDbIndex: gidNumber eq
Si votre serveur LDAP ne demarre pas avec une erreur “id2entry.bdb: unexpected file type or format ”, il est possible d'essayer de réparer. Bien sur avant faites des sauvegardes ;p :
Deja on s'assure que rien ne tourne a grands coups de ps aux , et au besoin :
# /etc/init.d/nslcd stop # /etc/init.d/slapd stop
L'idee est de dumper les données correctes puis de les reimporter dans un nouveau fichier
# cd /var/lib/ldap/example.com/ # db4.2_dump id2entry.bdb > /root/id2entry.bdb.dump # rm id2entry.bdb # db4.2_load id2entry.bdb < /root/id2entry.bdb.dump