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