我正在使用以下代码成功查询用户的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
等
我在做错什么,以及获得经理记录的正确方法是什么?
dn
不是属性。过滤器中只能使用属性类型,OID和名称。
[获得manager
属性时,要获取作为管理者的DN的属性,请使用manager
属性的值作为搜索请求中的基础对象。将搜索范围设置为BASE
,将过滤器设置为(&)
或(objectClass=*)
,并请求所需的属性。然后将搜索请求发送到服务器并解释响应。
在Active Directory中,有一个“ distinguishedName”属性。