我一直在检查jxplorer,我只是意识到该软件仅使用您的服务器信息(IP,端口)加载所有ldap树,我想知道如何使用php。
任何线索将不胜感激。
谢谢!
答案 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的更多信息: