我需要从PHP应用程序中为特定组中的所有用户选择许多属性。我意识到我可以查询组的'member'属性来获取每个成员的dn,然后对每个成员的属性进行单独的LDAP查询。我希望,我可以执行一个单独的查询,它会立即返回所有结果,但是为了防止PHP应用程序和LDAP服务器(AD)之间来回过多。
使用LDAP browser我可以在我的完整域名上成功运行搜索:
Search DN: DC=middlebury,DC=edu
Filter: (memberOf=CN=BG_Cells,OU=General,OU=Groups,DC=middlebury,DC=edu)
Attributes: objectClass,mail,givenName,sn,sAMAccountName,telephoneNumber
并取回预期的结果。当我使用PHP的ldap_search()
方法尝试此过滤器时,我得到一个代码为Operations error
的{{1}}。
以下是我正在使用的PHP。
1
其他过滤器可以正常使用这些属性,只使用....
$baseDN = 'DC=middlebury,DC=edu';
$filter = '(memberOf=CN=BG_Cells,OU=General,OU=Groups,DC=middlebury,DC=edu)';
$attributes = array('objectClass','mail','givenName','sn','sAMAccountName','telephoneNumber');
$result = ldap_search($connection, $baseDN, $filter, $attributes);
if (ldap_errno($connection))
print "Read failed for $filter with message: ".ldap_error($connection).", #".ldap_errno($ connection));
或属性的空数组不会消除错误结果,所以我确定问题出在我的过滤器而不是连接上或属性集。
第二个选项是在组的“member”字段中对组成员dns执行一次查询,然后为每个成员dn构建一个长OR查询。但这仍然会涉及两个查询。
那么有没有更好的方法来获取每个成员的属性,理想情况是在一个查询中?
答案 0 :(得分:2)
很难说,但通常,LDAP结果代码(1)表示相关请求与另一个正在进行的操作不一致(例如,在多阶段SASL绑定中间的非绑定请求)。它并不表示客户端发送了错误消息。
在执行查询之前,您是否绑定了连接? -Jim
答案 1 :(得分:0)
我不确定问题究竟在哪里,在过滤器或属性选择中。如果是归因选择。如果它是过滤器,那么我建议你现在把属性选择放在一边作为隔离问题的方法。
您能否显示正在执行的相关ldap_search()
的代码?