0

我正在尝试检索 ldap 上存在的所有用户的列表,以便在 jquery 中创建一个自动完成框。但是,我没有设法得到它。我可以连接并绑定到 ldap 服务器,然后我尝试使用ldap_list(). 我在过滤器中留一个空白,不过滤任何内容并获取整个列表。但是ldap_list()会设置一个警告 ( Search: Can't contact LDAP server) 并返回FALSE,这会使一切都出错,因为它是一个布尔值并且不是预期的 ( Warning: ldap_get_entries() expects parameter 2 to be resource, boolean given)。这是我的代码示例:

$identifier = ldap_connect(sfConfig::get('sf_ldap_host'));
if (!ldap_bind($identifier,
    sfConfig::get('sf_ldap_generic_user').sfConfig::get('sf_ldap_usr_domain'),
    sfConfig::get('sf_ldap_generic_password')))
{
    throw new sfException('could not bind to the Active Directory');
}
$list = ldap_list($identifier, sfConfig::get('sf_ldap_dn'), '', array('mail'));
$list_user = ldap_get_entries($identifier, $list);
4

1 回答 1

0
  1. 连接到服务器
  2. 通过传输具有足够访问权限以搜索 DIT 的所有部分的 DN 的 BIND 请求来更改授权状态
  3. 如果 BIND 成功,namingContexts则从根 DSE检索所有列表
  4. 对于每个namingContext,使用namingContext 的基础对象、范围sub、过滤器、(&)(objectClass=*)表达所需属性的列表来传输搜索请求。对于仅用户,请使用过滤器(objectClass=<object class in each user object>),例如,(objectClass=person)
  5. 服务器响应中的每个搜索结果都包含与搜索参数匹配的对象

BIND 设置的授权状态必须允许访问,并允许返回请求的尽可能多的对象。服务器可以限制返回给客户端的条目数,也可以限制评估 LDAP 操作(在本例中为搜索)所花费的秒数。

请注意,由于服务器上的负载(这将影响其他客户端),正确配置的服务器可能不允许对目录进行拖网。考虑通知目录服务器管理员您的客户端计划列出所有用户。

于 2013-11-07T23:18:35.540 回答