Replikacja w usłudze Open Directory może nie działać; w pliku slapd.log pojawia się wpis „Size Limit exceeded” (Przekroczony limit rozmiaru)

Replikacja w usłudze Open Directory może nie działać. W takim przypadku w pliku /var/log/slapd.log pojawiają się wpisy podobne do poniższych.

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
Data publikacji: