我需要使用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插件允许我搜索活动的directorys,以便我可以相应地定制我的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 />';
}
?>
答案 0 :(得分:3)
您需要将搜索实际传递给它。目前您正在使用:
$filter ="(ou=*)";
这需要更改为包含“学生”。虽然我不是LDAP专家,但我猜想以下内容:
$filter ="(cn=Students)";
我所做的大部分LDAP工作都是纯粹的反复试验,而不是知道我在做什么,但这可能会让你走上正确的道路。
还可以使用Microsoft plugin - Active Directory Explorer来至少浏览LDAP,以便您知道要搜索的内容以及在哪个分支下。