【问题标题】:Increase limit from 1000?从 1000 增加限制?
【发布时间】:2011-04-29 20:31:12
【问题描述】:

当我这样搜索时

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

我只收到 1000 个条目,我预计会有 ~20000 个条目。

是否可以在我的 Perl 脚本中增加此限制,还是必须在服务器上进行更改?

【问题讨论】:

  • 有关哪些模块正在运行的信息将使这个问题更有用。

标签: perl active-directory ldap


【解决方案1】:

解决方法是像这样使用分页搜索

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]);
}

【讨论】:

  • 很高兴问自己问题 ;o) 。就一件事。小心在一个目录中搜索这么多项目是不“正常的”。目录不是数据库。性能可能会变差。保留这种编程方式用于配置目的。
【解决方案2】:

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

这主要是在客户端不支持分页,无法修改客户端的情况下完成。

【讨论】:

    【解决方案3】:

    您没有指定用于 ldap 搜索的模块。顺便说一句,可以使用“sizelimit”键,但默认情况下不受限制。这可以是服务器端限制配置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多