Paginação usando ldapsearch

13

Estou pesquisando um diretório LDAP que tem um número muito maior de resultados do que o sizelimit atualmente definido, 500, pelo slapd.conf, que, para todos os efeitos, não pode ser alterado

Minha idéia era continuar executando o ldapsearch, mas a partir de um deslocamento diferente a cada vez (501, 1001, etc.) até que todos os resultados fossem obtidos.

Eu vi as páginas man do ldapsearch e parece que isso é tratado por você usando as opções -E:

-E [!]<ext>[=<extparam>] search extensions (! indicates criticality)
         [!]domainScope              (domain scope)
         [!]mv=<filter>              (matched values filter)
         [!]pr=<size>[/prompt|noprompt]   (paged results/prompt)
         [!]subentries[=true|false]  (subentries)
         [!]sync=ro[/<cookie>]            (LDAP Sync refreshOnly)
                 rp[/<cookie>][/<slimit>] (LDAP Sync refreshAndPersist)

Então eu tentei: ldapsearch -h $HOST -p $PORT -x -L -b "$BASE" '*' '+' -E pr=$SIZE

No entanto, quando os resultados (mesmo resultados paginados com tamanho = 50, por exemplo) atingem 500, recebo o mesmo erro como se os resultados não fossem paginados:

Size limit exceeded (4)

Eu vi nas man pages que há outra opção para o virtuallistview, mas não consegui encontrar exemplos para ele, e também não acho que minha versão do ldapsearch tenha essa opção.

O objetivo aqui é criar um backup usando ldapsearch e a opção -L para criar um arquivo ldif adequado para restaurar o banco de dados.

Algumas pesquisas no google aparecem com o mesmo problema que eu estou tendo, mas nenhuma delas tem uma solução aplicável.

    
por steve-gregory 07.11.2011 / 23:33

3 respostas

5

O administrador do servidor de diretórios está livre para impor um limite no número de entradas que podem ser retornadas na resposta a uma solicitação de pesquisa. O cliente LDAP pode solicitar um limite de tamanho, mas esse limite solicitado pelo cliente não pode substituir o limite imposto pelo servidor. A paginação está funcionando corretamente: a paginação simplesmente envia várias respostas de pesquisa, cada uma do tamanho solicitado pelo cliente, mas ainda não pode exceder o limite de tamanho imposto pelo servidor. A visualização de lista virtual é semelhante à paginação simples, exceto que o cliente LDAP pode iniciar e continuar em qualquer lugar, enquanto em resultados paginados simples, o cliente LDAP deve ler os resultados sequencialmente.

    
por 08.11.2011 / 20:55
9
ldapsearch -LLL  -x -h $LDAPHOST -b"dc=whatever" -D${LDAPUSER} -w"${LDAPPASW}" objectclass=* -E pr=2147483647/noprompt

A parte importante está no final: -E pr=2147483647/noprompt . Implementei isso hoje, então sei que funciona, pelo menos com o backend LDAP do Active Directory. Para mim, isso foi capaz de ignorar os limites do servidor.

No seu exemplo, parece que você está sem um / noprompt ou / prompt. A diferença é que, com / prompt, ele pára entre cada página.

Não sei por que o número 2147483647 funciona, mas funciona.

Minha fonte: link

    
por 16.04.2012 / 15:37
0

O ApacheDS pode fazer as pesquisas paginadas que você está procurando. Pelo menos contra o Active Directory.

    
por 08.11.2011 / 23:59

Tags