La réplication Open Directory ne fonctionne pas et le message « Limite de taille dépassée » s’affiche dans le fichier slapd.log

Il arrive que la réplication Open Directory n’aboutisse pas, auquel cas les entrées suivantes s’affichent dans le fichier /var/log/slapd.log :

slapd[209]: do_syncrep2: rid=001 LDAP_RES_SEARCH_RESULT (4) Size limit exceeded
slapd[209]: do_syncrep2: rid=001 (4) Size limit exceeded

Ce problème survient si un serveur Open Directory est resté hors service pendant une période prolongée, ou si une réplique est créée alors que la base de données LDAP contient plus de 11 000 objets. Cette valeur correspond, par défaut, au nombre maximal d’objets pouvant être retournés au cours d’une recherche.

Vous devez autoriser l’utilisateur _ldap_replicator pour que cette limite soit ignorée. Pour ce faire, modifiez la configuration du serveur LDAP sur l’ensemble des serveurs Open Directory, en vous authentifiant en tant qu’administrateur du répertoire et en exécutant les commandes ci-après dans Terminal. Pour mener à bien cette procédure, vous devez également être familier de la base de recherche (ou « contexte d’appellation ») du serveur LDAP.

Procédez comme indiqué ci-dessous.

Identifiez la base de recherche du serveur LDAP

Il s’agit généralement du nom de domaine complet du serveur. La mention dc= est généralement placée avant chaque intitulé et les points sont remplacés par des virgules.

Par exemple, si le nom d’hôte du serveur est serveur.exemple.com, la base de recherche par défaut correspondante est « dc=serveur,dc=exemple,dc=com ». Vous pouvez vérifier la base de recherche en envoyant une requête au serveur LDAP, à l’aide de la commande Terminal ci-dessous :

ldapsearch -x -LLL -b “” -s base namingContexts

La base de recherche s’affiche sur la ligne commençant par « namingContexts », à la suite des deux points (voir exemple de résultat ci-dessous).

dn:
namingContexts: dc=server,dc=example,dc=com

Récupérez les identifiants Kerberos de l’administrateur du répertoire

Par défaut, l’administrateur porte le nom diradmin, mais il est possible que ce dernier ait été modifié lors de la création du maître Open Directory. Pour obtenir les identifiants Kerberos, utilisez la commande kinit dans Terminal. Exécutez la commande ci-dessous, en remplaçant diradmin par le nom réel de l’administrateur (le cas échéant), puis saisissez le mot de passe lorsque vous y êtes invité. Cette commande ne produit aucun résultat.

kinit diradmin

Utilisez ensuite la commande ldapmodify en mode interactif, afin de procéder aux modifications. Pour ce faire, saisissez simplement cette commande dans Terminal :

ldapmodify

Remarque : vous obtiendrez alors une courte liste de messages SASL. Patientez jusqu’à l’affichage d’une nouvelle ligne de saisie. Si l’opération réussit, vous obtenez des valeurs SASL similaires à celles ci-dessous :

SASL/GSSAPI authentication started
SASL username: diradmin@REALM
SASL SSF: 56
SASL data security layer installed.

Modifiez la configuration

La dernière étape consiste à modifier la configuration en saisissant, dans Terminal, l’ensemble du texte ci-dessous en tant qu’entrée de la commande ldapmodify. Vous devez remplacer la mention [search base] ci-dessous par votre base de recherche (sans crochets).

dn: olcDatabase={1}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,[search base]" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,[search base]" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

Appuyez ensuite sur les touches Contrôle + D.

Si l’opération réussit, des messages similaires à ceux ci-après s’affichent :

modifying entry "olcDatabase={1}bdb,cn=config"
modifying entry "olcDatabase={2}bdb,cn=config"

Informations supplémentaires

   

Alternative : utilisation d’un script Shell

Vous trouverez ci-dessous le texte d’un script Shell pouvant être utilisé pour automatiser ce processus. Exécutez simplement la commande kinit en association avec le nom de l’administrateur du répertoire, de la manière décrite ci-dessus, puis exécutez ce script. Consultez cet article pour en savoir plus sur les éditeurs de texte.

#!/bin/sh
nc=`ldapsearch -x -LLL -b "" -s base namingContexts | awk '/namingContexts/ {print $2}'`
ldapmodify  <<EOF
dn: olcDatabase={1}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,$nc" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,$nc" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

EOF
#end of script
Date de publication: