A replicação do Open Directory poderá não funcionar, com a mensagem "Size Limite exceeded" (Foi excedido o limite de tamanho) em slapd.log

A replicação do Open Directory poderá não funcionar. Quando tal acontecer, aparecerão entradas como as seguintes em /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

Tal pode ocorrer se um servidor do Open Directory estiver inativo durante um período de tempo prolongado ou se for criada uma réplica quando existirem mais de 11.000 objetos no armazenamento de dados LDAP.  11.000 é, por predefinição, o número máximo de objetos que podem ser devolvidos numa pesquisa.

Permita que o utilizador _ldap_replicator substitua o limite de pesquisas.  Para tal, é necessário alterar a configuração do servidor LDAP em todos os servidores do Open Directory. Este processo implica a autenticação como administrador do diretório e a execução de alguns comandos de modificação LDAP no Terminal. A base de pesquisa (também conhecida como contexto de nomenclatura) do servidor LDAP também precisa de ser conhecida.

Pode seguir estes passos para este efeito.

Em primeiro lugar, encontre a base de pesquisa do servidor LDAP

Encontre a base de pesquisa do servidor LDAP.  Normalmente, esta consiste no nome de domínio completamente qualificado do servidor com o prefixo dc= anexado a cada etiqueta e com os pontos finais substituídos por vírgulas.

Por exemplo, um servidor com nome de host server.example.com teria uma base de pesquisa predefinida de "dc=server,dc=example,dc=com".  Para verificar a base de pesquisa, consulte o próprio servidor LDAP com o seguinte comando do Terminal:

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

Procure a linha com namingContext e a base de pesquisa será indicada após os dois pontos, tal como no resultado de exemplo abaixo.

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

Em segundo lugar, obtenha as credenciais do kerberos para o administrador do diretório

O nome predefinido deste utilizador é diradmin, mas o nome poderá ter sido alterado aquando da criação do Open Directory principal. Para tal, utilize o comando kinit no Terminal.  Execute o seguinte comando, substituindo diradmin pelo nome correto do administrador do diretório, se necessário, e introduza a palavra-passe quando esta lhe for solicitada. Não existem resultados.

kinit diradmin

Em seguida, utilize ldapmodify em modo interativo no Terminal para efetuar estas alterações. Basta executar o seguinte comando no Terminal=:

ldapmodify

Nota: esta ação irá produzir algumas mensagens SASL e aguardar a entrada.  Se tiver sucesso, o resultado de SASL deverá ter este aspeto:

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

Modificar a configuração

Por último, faça modificações à configuração. Para tal, é necessário introduzir todo o texto abaixo na janela do Terminal como entrada no comando ldapmodify. O elemento [search base] abaixo tem de ser substituído pela base de pesquisa. Os parênteses tem igualmente de ser removidos.

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

Em seguida, prima Controlo+D.

Se todos os passos forem executados com sucesso, serão apresentadas mensagens como a seguinte.

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

Saiba mais

   

Alternativa de script da shell

Abaixo encontra-se o texto de um script da shell que pode utilizar para automatizar este processo. Coloque o administrador do diretório no comando kinit (como mostrado acima) e execute este script. Consulte este artigo para obter sugestões de editores de texto.

#!/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 de publicação: