Пейджинг с использованием ldapsearch

14

Я ищу каталог LDAP, который имеет намного большее количество результатов, чем установленный в настоящее время sizelimit, 500, по slapd.conf, который для всех намерений и целей не может быть изменен)

Моя идея состояла в том, чтобы продолжать работать с ldapsearch, но каждый раз с разным смещением (501, 1001 и т. Д.), Пока не будут получены все результаты.

Я видел справочные страницы для ldapsearch , и кажется, что это обрабатывается для вас с помощью параметров -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)

Итак, я попробовал: ldapsearch -h $HOST -p $PORT -x -L -b "$BASE" '*' '+' -E pr=$SIZE

Однако, когда результаты (даже результаты с размером страницы, например, размером 50) достигают 500, я получаю ту же ошибку, как если бы результаты не были разбиты на страницы:

Size limit exceeded (4)

Я видел на страницах руководства, что есть еще один вариант для virtuallistview, но я не смог найти примеры для него, и я также не думаю, что моя версия ldapsearch имеет такую ​​возможность.

Цель здесь - создать резервную копию, используя ldapsearch и опцию -L, чтобы создать файл ldif, подходящий для восстановления базы данных.

Несколько поисков в Google отображаются с той же проблемой, что и у меня, но ни у одного нет подходящего решения ..

стив-Gregory
источник
Я бы посоветовал вам установить loglevel256, чтобы увидеть, что он говорит.
кванты
У меня нет прямого доступа к файлу slapd.conf, и я знаю, в чем проблема, поэтому более подробный журнал не принесет особой пользы.
Стив-Грегори
В ответ на Итана 2147483647 равен 2 ^ 32 или 0b1111111111111111111111111111111. Это максима для 32-битного со знаком int. Это максимально допустимый размер.
Срочно
2147483647 = 2 ^ 31-1
Шон

Ответы:

8

Администратор сервера каталогов может наложить ограничение на количество записей, которые могут быть возвращены в ответ на запрос поиска. Клиент LDAP может запросить ограничение размера, но это запрошенное клиентом ограничение не может переопределить ограничение, наложенное сервером. Пейджинг работает правильно: пейджинг просто отправляет несколько поисковых запросов, каждый из которых соответствует размеру, запрошенному клиентом, но все же не может превышать ограничение размера, установленное сервером. Представление виртуального списка аналогично простому разбиению по страницам, за исключением того, что клиент LDAP может запускаться и возобновляться где угодно, тогда как в простых постраничных результатах клиент LDAP должен последовательно просматривать результаты.

Терри Гарднер
источник
10
ldapsearch -LLL  -x -h $LDAPHOST -b"dc=whatever" -D${LDAPUSER} -w"${LDAPPASW}" objectclass=* -E pr=2147483647/noprompt

Важная часть в конце: -E pr=2147483647/noprompt. Я реализовал это сегодня, так что я знаю, что это работает, по крайней мере, с бэкэндом LDAP Active Directory. Для меня это было в состоянии обойти ограничения сервера.

Из вашего примера похоже, что вы можете пропустить / noprompt или / prompt. Разница в том, что с / prompt, он останавливается между каждой страницей.

Я не уверен, почему номер 2147483647 работает, но это работает.

Мой источник: http://www.commandlinefu.com/commands/view/2779/bypass-1000-entry-limit-of-active-directory-with-ldapsearch

Итан
источник
3
Число 2147483647- это размер страницы. Если вы измените -Eпараметр на pr=100/promptвас, вы увидите, что ldapsearchвам нужно нажимать клавишу каждые 100 результатов.
rpet
Это работает !!!!
Сахеб
По моему опыту, Active Directory необычна тем, что позволяет поисковым запросам превышать установленный размер сервера. Это, однако, принудительно установит ограничение размера в поиске. Поскольку вы сказали, что ldapsearch не запрашивает вас, вы не видите, что размер страницы, который он фактически использует для этого поиска, намного меньше. Это не будет работать против Sun LDAP по состоянию на 10 лет назад, OpenLDAP по состоянию на 8 лет назад или 389 дней по состоянию на 10 минут назад (это то, что я бегу дома в эти дни.)
Эд Гримм
0

ApacheDS может выполнять поиск по страницам, который вы ищете. По крайней мере, против Active Directory.

geoffc
источник