1

使用 ldap_bind() 后,OpenDJ 中描述的属性的输出格式会发生变化。

没有 ldap_bind 的示例:

$ldap_port = 389;
$ldap_host = "ldap-host";
$ldap_bdn  = "ou=People,dc=example,dc=com";
$ldap_attr = array("dn","groupname");
$ldap_filter = "(cn=example-cn)";

$ldap_group = "ou=Groups,dc=example,dc=com";

if(!($ldap_conn = ldap_connect($ldap_host,$ldap_port))) {
    die("could not connect to ldap");
}

if(!$ldap_res = ldap_search($ldap_conn,$ldap_group,$ldap_filter,$ldap_attr)) {
    die("ldap_search");
}

$res = ldap_search($ldap_conn, $ldap_group, "(cn=example-cn)", array("groupname"));
$entry = ldap_first_entry($ldap_conn, $res);
while($entry)
{
    $info = ldap_get_attributes($ldap_conn, $entry);
    var_dump($info);
    $entry = ldap_next_entry($ldap_conn, $entry);
}

结果:

array (size=5)
  'groupname;lang-en' => 
    array (size=2)
      'count' => int 1
      0 => string 'Computing and Data Centre' (length=25)
  0 => string 'groupname;lang-en' (length=20)
  'groupname;lang-de' => 
    array (size=2)
      'count' => int 1
      0 => string 'Rechenzentrum und Datenbanken' (length=29)
  1 => string 'groupname;lang-de' (length=20)
  'count' => int 2

如果我使用 PHP 的 ldap_bind() 函数

if(!ldap_bind($ldap_conn, "uid=exampleuser,ou=Special Users,dc=com", "password")) {
    die("could not bind to ldap");
}

所描述属性的输出格式更改为:

array (size=3)
  'GroupName' => 
    array (size=3)
      'count' => int 2
      0 => string 'Computing and Data Centre' (length=25)
      1 => string 'Rechenzentrum und Datenbanken' (length=29)
  0 => string 'GroupName' (length=12)
  'count' => int 1

为什么我会为相同的请求获得不同的格式?是 OpenDJ 配置错误,还是我使用了错误的功能?

4

1 回答 1

0

OpenDJ 中没有任何配置可以产生这样的结果差异。

我唯一能想到的是你没有进行类似的调用,或者没有以相同的方式迭代结果。

于 2015-01-30T22:12:54.127 回答