仅使用服务器信息加载ldap树

时间:2018-08-20 09:17:44

标签: php ldap

我一直在检查jxplorer,我只是意识到该软件仅使用您的服务器信息(IP,端口)加载所有ldap树,我想知道如何使用php。

任何线索将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:2)

Jxplorer最有可能通过从LDAP服务器的namingContexts请求RootDSE来做到这一点。 namingContexts是服务器为其服务数据库的根DN,例如o =部门,ou =公司,c =我们。接下来,应用程序可以使用此信息进行常规LDAP搜索,以获取整个ldap树。

一台LDAP服务器可以承载一个以上的LDAP数据库,每个LDAP数据库都在不同的DN下提供服务,因此在搜索结果中,namingContexts属性可能包含多个值。

要从LDAP服务器请求RootDSE,只需使用空的搜索库进行搜索,并使用搜索过滤器:(objectClass=*)。但是,服务器可能无法回答此类请求:对服务器的访问控制列表进行简单更改就无法提供此信息。

PHP中一个基本而完整的示例,用于请求所服务的所有LDAP数据库的根DN:

<?php

$ldapconn = ldap_connect('ldaps://example.com');
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);

$result = ldap_read($ldapconn, '', '(objectclass=*)', array('namingContexts'));
$data = ldap_get_entries($ldapconn, $result);  # ldap_read returns max 1 entry

echo "Naming Contexts: <br/>";
$count = $data[0]['namingcontexts']['count'];
for ($i = 0; $i < $count; $i++) {
    echo $data[0]['namingcontexts'][$i], "<br/>";
}

ldap_close($ldapconn);

?>

有关RootDSE的更多信息: