Paginação usando ldapsearch

14

Estou procurando um diretório LDAP que tenha 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 de um deslocamento diferente a cada vez (501, 1001 etc.) até que todos os resultados fossem obtidos.

Eu vi as páginas de manual 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 páginas do manual 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 estou tendo, mas nenhuma tem uma solução aplicável.

Steve Gregory
fonte
Eu sugiro que você defina loglevel256 para ver o que diz.
Quanta
Não tenho acesso direto ao arquivo slapd.conf e sei qual é o problema, portanto, um log mais detalhado não será muito útil.
steve-Gregory
Em resposta a Ethan, 2147483647 é 2 ^ 32 ou 0b1111111111111111111111111111111. Essa é a máxima para um int assinado de 32 bits. Este é o limite de tamanho máximo permitido.
exigent
2147483647 = 2 ^ 31-1
Sean

Respostas:

8

O administrador do servidor de diretórios pode impor um limite ao 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 com o 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 retomar em qualquer lugar, enquanto que em resultados paginados simples, o cliente LDAP deve ler os resultados sequencialmente.

Terry Gardner
fonte
10
ldapsearch -LLL  -x -h $LDAPHOST -b"dc=whatever" -D${LDAPUSER} -w"${LDAPPASW}" objectclass=* -E pr=2147483647/noprompt

A parte importante é no final: -E pr=2147483647/noprompt. Eu implementei isso hoje, por isso sei que funciona, pelo menos com o back-end LDAP do Active Directory. Para mim, isso foi capaz de ignorar os limites do servidor.

No seu exemplo, parece que você está perdendo 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: http://www.commandlinefu.com/commands/view/2779/bypass-1000-entry-limit-of-active-directory-with-ldapsearch

Ethan
fonte
3
O número 2147483647é o tamanho da página. Se você alterar o -Eparâmetro para pr=100/prompt, verá que ldapsearchvocê deve pressionar uma tecla a cada 100 resultados.
rPET
Isso funciona !!!!
26415 Saheb
O Active Directory é incomum em minha experiência, pois permite que as pesquisas paginadas excedam o limite de tamanho configurado pelo servidor. No entanto, aplicará o limite de tamanho paginado nas pesquisas. Como você disse ao ldapsearch para não solicitá-lo, você não vê que o tamanho da página realmente usado para essa pesquisa é muito menor. Isso não funcionará contra o Sun LDAP de 10 anos atrás, o OpenLDAP de 8 anos atrás, ou 389-ds de 10 minutos atrás (é o que eu corro em casa hoje em dia).
Ed Grimm
0

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

geoffc
fonte