检索所有用户ldap的列表

时间:2013-11-07 14:11:16

标签: php ldap symfony-1.4 ldap-client

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

1 个答案:

答案 0 :(得分:0)

  1. 连接到服务器
  2. 通过发送具有足够访问权限的DN的BIND请求来更改授权状态以搜索DIT的所有部分
  3. 如果BIND成功,请从Root DSE
  4. 中检索所有namingContexts的列表
  5. 对于每个namingContext,使用namingContext的基础对象,范围sub(&)(objectClass=*)的过滤器传输搜索请求,清楚地表达所需属性的列表。仅针对用户,请使用过滤器(objectClass=<object class in each user object>),例如(objectClass=person)
  6. 来自服务器的响应中的每个搜索结果都包含与搜索参数匹配的对象
  7. BIND设置的授权状态必须允许访问,并允许返回所请求的任意数量的对象。允许服务器限制返回给客户端的条目数,并限制评估LDAP操作所花费的秒数,在本例中为搜索。

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