【问题标题】:ldap search filter is not workingldap 搜索过滤器不起作用
【发布时间】:2013-09-24 14:47:39
【问题描述】:

我想获取一个组的所有成员。

$filter = "member=*";
$result = ldap_search($ldap_connection, GROUP_USER_ADMINS.",".BASE_DS, $filter);

base_dn 是组的完整 dn。

有了这个过滤器,我得到了一个包含更多信息的数组,这是我没有计划的。

我可以使用

$entries = ldap_get_entries($ldap_connection, $result);
print_r($entries[0][members]);

只打印所有成员的结果。但是为什么过滤器不起作用?我只想要成员而不是关于组的所有信息,例如创建时间或组的 samaccounttype。

为什么过滤器不起作用?

【问题讨论】:

    标签: php search filter ldap


    【解决方案1】:

    将请求的属性指定为搜索请求的一部分。您的 API 的默认值可能是“所有用户属性”。

    另见

    【讨论】:

    • 谢谢,它有效。我使用属性: $attr = array("member");但结果有两个名为“member”的数组 .... [member] => Array [count] => 2 [0] => some user [1] => some user [0] => member [count ] => 1 [dn] => 组的竞争 dn 有没有办法只获得真正的成员而不是 dn 成员路径?
    • 什么是“真正的成员”而不是 DN?
    • 知道了。请注意,无论请求哪种属性类型,总是返回“dn”。
    【解决方案2】:

    我添加了一个属性: $attr = array('member'); 但是名称中有两个带有“成员”的属性。只有真正的关键“成员”才能找到属性?

    Array
    (
       [count] => 1
       [0] => Array
       (
          [member] => Array
          (
             [count] => 2
             [0] => CN=User2,OU....,OU=...,DC=...,DC=...
             [1] => CN=User1,OU....,OU=...,DC=...,DC=...
          )
    
          [0] => member
          [count] => 1
          [dn] => CN=...,OU=....,OU=...,DC=...,DC=...(dn of the group)
       )  
    )
    

    【讨论】:

    • member 是一个多值属性。多值属性有多个值,唯一的限制是所有值必须不同(其中不同的意思是根据属性的匹配规则)