如何获取所有LDAP条目?

时间:2011-10-27 14:26:00

标签: php ldap

我知道LDAP绑定用于使用搜索的身份验证,但如果我想要全名的所有条目,我该怎么办...那么如何才能获得所有人的全名或电子邮件?

下面我使用LDAP绑定进行身份验证,我可以搜索一个人但是如果我想要它们怎么办?

<?php

// using ldap bind
$ldaprdn  = 'uname';     // ldap rdn or dn
$ldappass = 'password';  // associated password

// connect to ldap server
$ldapconn = ldap_connect("ldap.example.com")
    or die("Could not connect to LDAP server.");

if ($ldapconn) {

    // binding to ldap server
    $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);

    // verify binding
    if ($ldapbind) {
        echo "LDAP bind successful...";
    } else {
        echo "LDAP bind failed...";
    }

}

?>

这是我的一些MySQL代码,它填充了一个HTML列表:

<ol>     

<?php
mysql_connect("kool", "ohjoa", "sampa") or die(mysql_error());
mysql_select_db("DBtest") or die(mysql_error());

$query = "SELECT * FROM EditOnCall"; 

$result = mysql_query($query) or die(mysql_error());


while($row = mysql_fetch_array($result)){
    echo "<li>".$row['Email']."</li>";
    echo "<br />";
}


?>

</ol>

现在显示电子邮件的html列表。除了在目录中显示所有ldap用户的全名外,我想做的事情与LDAP相同...我的LDAP只有200个人,所以它不是太大。

任何想法?

2 个答案:

答案 0 :(得分:8)

绑定是一种类型的LDAP请求,搜索是另一种类型的请求。绑定建立连接的身份验证状态,搜索使用基础对象,范围,过滤器和其他可选参数来构建筛选并返回到LDAP客户端的条目候选列表。连接的身份验证状态还将建立某些访问功能,例如可以检索哪些条目,可以在搜索中检索多少条目,在搜索上花费了多少时间,在完成过程中应检查多少条目搜索请求和其他功能。如果不使用根DN,则可能无法检索目录中的所有条目,并且LDAP管理员可能会禁止非根DN身份验证状态检索多个条目。有关搜索的详细信息,请参阅“LDAP: Using ldapsearch”。有关使用LDAP编程的更多常规信息,请参阅"LDAP: Programming Practices"。有关更多详细信息,请参阅LDAP Search Best Practices

关于过滤器,星号不是描述为(cn=*)的意义上的通配符。这称为状态过滤器,用于指示在过滤候选列表时,断言中使用的属性(在本例中为cn)是否存在于条目中。星号可用作子字符串过滤器的一部分,例如(cn=abc*)(mail=user@example*)

在任何情况下,应尽可能避免在大型目录中使用子字符串过滤器,无论如何都可能被禁止,就像“拖网”目录一样。

答案 1 :(得分:4)

这不是关于你如何绑定,而是关于你如何搜索。您需要了解LDAP filters(此链接与AD相关,但其中的所有信息都可以应用于任何LDAP节点)。

您可以在LDAP过滤器中使用*作为通配符。假设您希望从名为objectClass=User的根容器中获取由属性cn标识的cn=Users的所有对象 - 您将执行此操作:

$searchResult = ldap_search($ldapconn,'cn=Users','(&(objectClass=User)(cn=*))',array('cn','guid'));

绑定方式的唯一方法是影响此原则,如果用于绑定的用户没有权限访问您在目录中查找的对象。

如果您显示更多正是您要执行的操作的代码,我将更详细地编辑此答案。