用于distinguishedName的ldap过滤器

问题描述 投票:7回答:2

我正在使用以下代码成功查询用户的Active Directory:

$filter = (&(objectCategory=person)(samaccountname=someusername));
$fields = array("samaccountname","mail","manager","department","displayname","objectGUID");

$user = ldap_search($ldapconnection, $baseDn, $filter, $fields);

结果数组为manager属性提供此值:

CN=McBossy\, Boss,OU=Users,OU=CentralOffice,DC=ds,DC=example,DC=com

对我来说,这看起来像一个专有名称。但是,当我尝试查询经理的记录时,

$filter = (&(objectCategory=person)(dn='CN=McBossy\, Boss,OU=Users,OU=CentralOffice,DC=ds,DC=example,DC=com'));

$manager = ldap_search($ldapconnection, $baseDn, $filter, $fields);

查询失败,并显示PHP Warning: ldap_search(): Search: Bad search filter

我已经尝试了许多可能性,包括不同的引号,更多的括号,使用distinguishedName而不是dn

我在做错什么,以及获得经理记录的正确方法是什么?

php ldap ldap-query
2个回答
10
投票

dn不是属性。过滤器中只能使用属性类型,OID和名称。

[获得manager属性时,要获取作为管理者的DN的属性,请使用manager属性的值作为搜索请求中的基础对象。将搜索范围设置为BASE,将过滤器设置为(&)(objectClass=*),并请求所需的属性。然后将搜索请求发送到服务器并解释响应。


0
投票

在Active Directory中,有一个“ distinguishedName”属性。

参见:https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-ada1/56da5a9b-485d-4d7c-a226-1a54a43d9013

© www.soinside.com 2019 - 2024. All rights reserved.