0

我正在尝试完成与此用户在此处所做的非常相似的事情。

我遵循了答案,但我无法让它工作。在 Active 目录中,我的 memberOf 字段如下所示:

CN=$VPN Users,CN=Users,DC=iai,DC=pri,CN=$ITAR,CN=Users,DC=iai,DC=pri,CN=allsubscribers,CN=Users,DC=iai,DC=pri

我的有效过滤器是:

(&(objectCategory=person)(sAMAccountName=$p_username))

我正在尝试使以下工作:

(&(objectCategory=person)(sAMAccountName=$p_username)(memberOf=CN=$ITAR))

我也尝试将完整的 DN(即 CN=Users,DC=iai,DC=pri)添加到我的过滤器中,但我得到:

array(1) { ["count"]=> int(0) } 

作为我的回应。

我正在使用 ldap 3

这是用php编写的部分工作身份验证代码:

  $login = ldap_bind( $url, "username@somedomain", $password ); 

  $attributes = array("displayname", "mailnickname");
  $filter = "(&(objectCategory=person)(sAMAccountName=$username))";

  $result = ldap_search($url, "CN=Users,DC=iai,DC=pri", $filter, $attributes);

  $entries = ldap_get_entries($url, $result);

我究竟做错了什么?

代码结果

来自@DaveRandom

第一个 Var 转储:

string(49) "(&(objectCategory=person)(sAMAccountName=rmoser))"
array(2) {
  ["count"] => int(1)
  [0] => array(8) {
    ["displayname"] => array(2) {
      ["count"] => int(1)
      [0] => string(10) "Ryan Moser"
    }
    [0] => string(11) "displayname"
    ["memberof"] => array(4) {
      ["count"] => int(3)
      [0] => string(36) "CN=$VPN Users,CN=Users,DC=iai,DC=pri"
      [1] => string(31) "CN=$ITAR,CN=Users,DC=iai,DC=pri"
      [2] => string(40) "CN=allsubscribers,CN=Users,DC=iai,DC=pri"
    }
    [1]=> string(8) "memberof"
    ["mailnickname"] => array(2) {
      ["count"] => int(1)
      [0] => string(6) "rmoser"
    }
    [2] => string(12) "mailnickname"
    ["count"] => int(3)
    ["dn"] => string(36) "CN=Ryan Moser,CN=Users,DC=iai,DC=pri"
  }
}
bool(false)

第二个var_dump:

string(70) "(&(objectCategory=person)(sAMAccountName=rmoser)(memberof=*CN=$ITAR*))" 
array(1) {
  ["count"] => int(0)
} 
4

1 回答 1

0

LDAP 过滤器寻找完全匹配

为了匹配CN=$ITAR值中的任何位置,您需要用过滤器通配符将其括起来*

试试这个过滤器:

(&(objectCategory=person)(sAMAccountName=$p_username)(memberOf=*CN=$ITAR*))

也不要忘记这$ITAR是 PHP 中的一个有效变量名,因此如果您将该过滤器字符串放在双引号中(您需要这样才能$p_username进行插值)PHP 也会尝试将其$ITAR作为变量进行插值,发现它(可能)不存在,最终结果将是它从字符串中剥离。

$filter = "(&(objectCategory=person)(sAMAccountName=$p_username)(memberOf=*CN=\$ITAR*))";

对于任何有关使用 PHP 构建的动态过滤器的问题,一个有用的链接是这个

于 2012-08-16T13:16:37.693 回答