slapd[209]: do_syncrep2: rid=001 LDAP_RES_SEARCH_RESULT (4) Size limit exceeded slapd[209]: do_syncrep2: rid=001 (4) Size limit exceeded
Taka sytuacja może wystąpić, jeśli serwer Open Directory był wyłączony przez dłuższy czas, lub jeśli podczas tworzenia repliki istnieje więcej niż 11 000 obiektów w magazynie danych LDAP. 11 000 to domyślna maksymalna liczba obiektów, które mogą zostać zwrócone w wyniku wyszukiwania.
Należy pozwolić użytkownikowi _ldap_replicator na zmianę limitu wyszukiwania. W tym celu należy zmienić konfigurację serwera LDAP na każdym serwerze Open Directory. Wiąże się to z uwierzytelnianiem jako administrator katalogów i uruchamianiem poleceń modyfikacji serwera LDAP w programie Terminal. Musi być również znana baza wyszukiwania (określana też jako kontekst nazw) dla serwera LDAP.
Poniżej przedstawiono czynności umożliwiające wykonanie tego zadania.
Po pierwsze: znaleźć bazę wyszukiwania dla serwera LDAP
Znajdź bazę wyszukiwania dla serwera LDAP. Zazwyczaj jest to w pełni kwalifikowana nazwa domeny serwera z ciągiem dc= dołączonym na początku każdej etykiety i kropkami zmienionymi na przecinki.
Na przykład serwer o nazwie hosta server.example.com będzie miał domyślną bazę wyszukiwania „dc=server,dc=example,dc=com”. Bazę wyszukiwania można sprawdzić przez odpytywanie samego serwera LDAP za pomocą następującego polecenia w programie Terminal:
ldapsearch -x -LLL -b “” -s base namingContexts
Wyszukaj wiersz zawierający element namingContexts. Baza wyszukiwania będzie podana po dwukropku, jak w przykładzie poniżej.
dn: namingContexts: dc=server,dc=example,dc=com
Po drugie: uzyskać poświadczenia protokołu Kerberos dla administratora katalogu
Domyślną nazwą użytkownika jest diradmin, ale nazwa mogła zostać zmieniona podczas tworzenia głównego serwera Open Directory. Odbywa się to za pomocą polecenia kinit w programie Terminal. Uruchom następujące polecenie, zastępując nazwę diradmin poprawną nazwą administratora katalogów (jeśli jest to konieczne), i wprowadź hasło, gdy pojawi się monit o to. Nie ma żadnych danych wyjściowych.
kinit diradmin
Następnie użyj polecenia ldapmodify w trybie interaktywnym w programie Terminal, aby dokonać zmian. Wystarczy wykonać następujące polecenie w programie Terminal=:
ldapmodify
Uwaga: danymi wyjściowymi będzie kilka komunikatów SASL i oczekiwanie na wprowadzenie danych. W razie powodzenia dane wyjściowe SASL powinny wyglądać mniej więcej tak:
SASL/GSSAPI authentication started SASL username: diradmin@REALM SASL SSF: 56 SASL data security layer installed.
Zmodyfikować konfigurację
Na koniec należy zmodyfikować konfigurację. Wymaga to wprowadzenia całego poniższego tekstu jako danych wejściowych do polecenia ldapmodify w oknie programu Terminal. Bazą wyszukiwania należy zastąpić element [baza wyszukiwania] poniżej. Nawiasy kwadratowe także muszą zostać usunięte.
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
Teraz naciśnij klawisze Control-D.
Jeśli wszystko zakończy się pomyślnie, zostaną wyświetlone komunikaty takie jak poniżej:
modifying entry "olcDatabase={1}bdb,cn=config" modifying entry "olcDatabase={2}bdb,cn=config"
Więcej informacji
Alternatywny skrypt powłoki
Poniżej znajduje się tekst skryptu powłoki, którego można użyć w celu zautomatyzowania tego procesu. Wystarczy użyć polecenia kinit dla administratora katalogu w sposób przedstawiony powyżej i uruchomić ten skrypt. Sugestie dotyczące edytora tekstów można znaleźć w tym artykule.
#!/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