slapd[209]: do_syncrep2: rid=001 LDAP_RES_SEARCH_RESULT (4) Size limit exceeded slapd[209]: do_syncrep2: rid=001 (4) Size limit exceeded
Dies kann auftreten, wenn ein Open Directory-Server für einen längeren Zeitraum inaktiv war oder wenn ein Replikat erstellt wurde, während sich mehr als 11.000 Objekte im LDAP-Datenspeicher befanden. 11.000 ist die standardmäßige Höchstzahl von Objekten, die bei einer Suche zurückgegeben werden können.
Legen Sie fest, dass der Benutzer "_ldap_replicator" die Größenbeschränkung für Suchvorgänge überschreiben kann. Hierfür muss die LDAP-Serverkonfiguration auf jedem Open Directory-Server geändert werden. Dabei müssen Sie sich als Verzeichnisadministrator authentifizieren und einige LDAP-Bearbeitungsbefehle in Terminal ausführen. Außerdem muss die Suchbasis (auch als Namenskontext bezeichnet) für den LDAP-Server bekannt sein.
Dies können Sie durch Ausführen der folgenden Schritte erreichen.
Erstens: Suchbasis für den LDAP-Server ermitteln
Ermitteln Sie die Suchbasis für den LDAP-Server. Hierbei handelt es sich normalerweise um den vollqualifizierten Domänennamen des Servers, wobei jedem Namensbestandteil dc= vorangestellt ist und die Punkte in Kommas geändert wurden.
Ein Server mit dem Hostnamen server.example.com verfügt beispielsweise über die Standardsuchbasis "dc=server,dc=example,dc=com". Die Suchbasis kann durch Abfragen des LDAP-Servers mit dem folgenden Terminal-Befehl bestätigt werden:
ldapsearch -x -LLL -b “” -s base namingContexts
Suchen Sie nach der Zeile, die "namingContexts" enthält. Die Suchbasis ist wie im nachfolgenden Beispiel nach dem Doppelpunkt angegeben.
dn: namingContexts: dc=server,dc=example,dc=com
Zweitens: Kerberos-Anmeldedaten für den Verzeichnisadministrator abrufen
Der Standardname dieses Benutzers lautet diradmin. Dieser Name wurde jedoch u. U. beim Erstellen des Open Directory-Masters geändert. Dies erfolgt mit dem Befehl kinit in Terminal. Führen Sie den folgenden Befehl aus. Ersetzen Sie dabei diradmin durch den richtigen Namen des Verzeichnisadministrators (falls erforderlich), und geben Sie bei einer entsprechenden Aufforderung das Passwort ein. Es gibt keine Ausgabe.
kinit diradmin
Verwenden Sie anschließend ldapmodify im interaktiven Modus in Terminal, um die Änderungen vorzunehmen. Führen Sie in Terminal einfach Folgendes aus:
ldapmodify
Hinweis: Hierbei werden einige SASL-Meldungen ausgegeben, und es wird auf eine entsprechende Eingabe gewartet. Bei erfolgreicher Ausführung sieht die SASL-Ausgabe in etwa wie folgt aus:
SASL/GSSAPI authentication started SASL username: diradmin@REALM SASL SSF: 56 SASL data security layer installed.
Konfiguration ändern
Nehmen Sie abschließend die Änderungen an der Konfiguration vor. Hierfür muss der gesamte nachfolgende Text im Fenster von Terminal als Eingabe für den Befehl "ldapmodify" eingegeben werden. Die Zeichenfolge [search base] unten muss durch die Suchbasis ersetzt werden. Darüber hinaus müssen die eckigen Klammern entfernt werden.
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
Drücken Sie nun Ctrl-D.
Bei komplett erfolgreicher Ausführung werden Meldungen wie die folgenden angezeigt.
modifying entry "olcDatabase={1}bdb,cn=config" modifying entry "olcDatabase={2}bdb,cn=config"
Weitere Informationen
Alternative Vorgehensweise mit einem Shell-Skript
Im Folgenden finden Sie den Text eines Shell-Skripts, mit dem Sie diesen Vorgang automatisieren können. Führen Sie einfach wie oben den Befehl "kinit" für den Verzeichnisadministrator aus, und führen Sie dieses Skript aus. Vorschläge für Texteditoren erhalten Sie in diesem Artikel.
#!/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