【问题标题】:Retrieve a list of all users ldap检索所有用户的列表 ldap
【发布时间】:2013-11-07 14:11:15
【问题描述】:

我正在尝试检索 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);

【问题讨论】:

  • 感谢编辑,不知道如何缩进

标签: php ldap symfony-1.4 ldap-client


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

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

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

【讨论】:

  • 嘿@Terry Gardner,我无法使用 (objectClass=*) 获取所有用户,我使用 ("dc=example,dc=com") 获取数据,但我想要所有用户数据,你能建议我任何解决方案吗?
猜你喜欢
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多