Увеличить лимит с 1000? - PullRequest
2 голосов
/ 29 апреля 2011

Когда я делаю поиск вот так

my $mesg = $ldap->search(
  base   => "OU=test,DC=example,DC=com",
  scope  => 'one',
  filter => '(objectClass=organizationalPerson)',
  attrs  => ['distinguishedName', 'displayName', 'sAMAccountName', 'employeeID'],
);

Я получаю только 1000 записей, где я ожидаю ~ 20000.

Можно ли увеличить этот лимит в моем скрипте Perl, или его нужно изменить на сервере?

Ответы [ 3 ]

10 голосов
/ 29 апреля 2011

Решение состоит в том, чтобы использовать постраничный поиск следующим образом:

use Net::LDAP;
use Net::LDAP::Control::Paged;
use Net::LDAP::Constant qw( LDAP_CONTROL_PAGED );

my $page = Net::LDAP::Control::Paged->new(size => 999);
my $cookie;

while (1) {
    $mesg = $ldap->search(
    base    => "OU=test,DC=example,DC=com",
    scope   => 'one',
    filter  => '(objectClass=organizationalPerson)',
    attrs   => ['distinguishedName', 'displayName', 'sAMAccountName', 'employeeID'],
    control => [$page]
    );

    $mesg->code && die "Error on search: $@ : " . $mesg->error;
    while (my $adentry = $mesg->pop_entry()) {

    # process $adentry
    }

    my ($resp) = $mesg->control(LDAP_CONTROL_PAGED) or last;
    $cookie    = $resp->cookie or last;
    # Paging Control
    $page->cookie($cookie);
}

if ($cookie) {
    print "abnormal exit\n";
    # Abnormal exit, so let the server know we do not want any more
    $page->cookie($cookie);
    $page->size(0);
    $ldap->search(control => [$page]);
}
3 голосов
/ 29 апреля 2011

AD по умолчанию устанавливает максимальный размер страницы 1000. Клиент получит первый результат 1000, а также получит ошибку «Превышен предел размера».

Чтобы избежать этого, клиент должен использовать постраничный элемент управления. Если постраничный элемент управления используется, сервер не вернет ошибку, а вместо этого отправит cookie (байт), чтобы указать, что есть еще какой-то результат. Если нет доступных файлов cookie, это означает, что больше нет результата. Таким образом, вы можете продолжать цикл для результата, пока cookie не станет нулевым.

Вы также можете изменить MaxPageSize на сервере, если хотите, запустите ntdsutil и введите следующее,

ldap policies 
connections 
connect to server servername.domain.name 
q 
set maxpagesize to 5000 
commit 
changes 
q 
q

В основном это делается, если клиент не поддерживает подкачку страниц и клиент не может быть изменен.

0 голосов
/ 29 апреля 2011

Вы не указываете модуль, который вы используете для поиска ldap. Кстати, ключ sizelimit может быть использован для него, но по умолчанию он не ограничен. Это может быть конфигурация ограничения на стороне сервера.

...