Le démon nscd chargé de gérer le cache de résultats des services de noms a la fâcheuse tendance de crasher toutes les 10 minutes +/- sur un système Linux 64 bits. Ceci est très problématique dans le cas d’un serveur LDAP, car il permet justement d’optimiser les requêtes LDAP courantes. Son crash interrompt de plus le fonctionnement du serveur (et des clients LDAP).

L’unique solution est de privilégier un équivalent – mieux codé – dénommé unscd.

Voici le script de démarrage  que j’utilise pour Gentoo/amd64 et qui manque dans le port :

#!/sbin/runscript
#
# Boris HUISGEN, <bhuisgen@hbis.fr>
depend() {
   use dns ldap net slapd
}
checkconfig() {
   if [ ! -d /var/run/nscd ] ; then
      mkdir -p /var/run/nscd
      chmod 755 /var/run/nscd
   fi
}
start() {
   checkconfig
   ebegin "Starting Micro Name Service Cache Daemon"
   start-stop-daemon --start --quiet --exec /sbin/unscd
   eend $?
}
stop() {
   ebegin "Shutting down Micro Name Service Cache Daemon"
   start-stop-daemon --stop --quiet --exec /sbin/unscd
   eend $?
}

# vim:ts=4

Un joli commentaire de la part de son auteur :

It is well known that nscd provided with glibc is buggy.

This leads people to invent babysitters which restart crashed/hung nscd. This is ugly.

After looking at nscd source in glibc I arrived to the conclusion that it’s flawed by design and cannot be fixed. Even if nscd’s own code is 100.00% perfect and bug-free, it can still suffer from bugs in libraries it calls.