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