2

我需要使用 PHP 列出某个组内的所有组。这是我到目前为止所拥有的:

<?php
$ldap_dn = "ou=People,dc=something,dc=something,dc=something,dc=au";
$ldap_svr = "ldap.server.somewhere";
$ldap_domain = "domain.somewhere";
$conn=ldap_connect($ldap_svr) or die("Cannot connect to LDAP server!");

ldap_set_option ($conn, LDAP_OPT_REFERRALS, 0);
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);

ldap_bind($conn,"user@domain.somewhere","password");


$filter ="(ou=*)";
$justthese = array("ou");

$result=ldap_list($conn, $ldap_dn, $filter, $justthese) or die("No search data found."); 

$info = ldap_get_entries($conn, $result);

for ($i=0; $i < $info["count"]; $i++) {
    echo $info[$i]["ou"][0] . '<br />';
}
?>

这将返回一个组列表,其中一个是“学生”,但我想列出“学生”中的所有组。我怎样才能做到这一点?

编辑

感谢 Fluffeh,Microsoft LDAP 插件允许我搜索活动目录,因此我可以相应地定制我的 PHP 脚本,e.g. $ldap_dn = "ou=Units,ou=Groups,dc=somewhere,dc=somewher,dc=somewhere,dc=au";

所以我的主要工作代码是:

<?php
$ldap_dn = "ou=Units,ou=Groups,dc=somewhere,dc=somewher,dc=somewhere,dc=au";
$ldap_svr = "ldap.server.somewhere";
$ldap_domain = "domain.somewhere";
$conn=ldap_connect($ldap_svr) or die("Cannot connect to LDAP server!");

ldap_set_option ($conn, LDAP_OPT_REFERRALS, 0);
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);

ldap_bind($conn,"user@domain.somewhere","password");


$filter ="(cn=*)";
$justthese = array('cn');

$result=ldap_list($conn, $ldap_dn, $filter, $justthese) or die("No search data found."); 

$info = ldap_get_entries($conn, $result);

for ($i=0; $i < $info["count"]; $i++) {
    echo $info[$i]["cn"][0] . '<br />';
}
?>
4

1 回答 1

3

您实际上需要将搜索传递给它。目前您正在使用:

$filter ="(ou=*)";

这将需要更改以包含“学生”。虽然我不是 LDAP 专家,但我猜测如下:

$filter ="(cn=Students)";

我所做的大多数 LDAP 工作都是纯粹的反复试验,而不是知道我在做什么,但这可能会让您走上正确的道路。

还有一个Microsoft 插件 - Active Directory Explorer,您至少可以使用它来浏览 LDAP,这样您就知道要搜索什么以及在哪个分支下搜索。

于 2013-10-29T04:47:38.950 回答