2011-10-27 5 views
4

검색을 사용하는 인증 용 LDAP 바인딩 방법을 알고 있지만 전체 이름의 항목을 모두 원한다면 어떻게 할 수 있습니까? 그렇다면 모든 사람들의 전체 이름이나 이메일을 어떻게 얻을 수 있습니까 ??어떻게 모든 LDAP 항목을 가져올 수 있습니까?

아래 나는 인증을 위해 LDAP 바인드를 사용하며 한 사람을 검색 할 수 있지만 모두 원하는 경우 어떻게합니까?

<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 목록을 표시

<?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..."; 
    } 

} 

?> 

내가 그 html로 목록을 채 웁니다이 일부 MySQL의 코드입니다. 내가하고 싶은 일은 LDAP에서 같은 일을하는 것입니다. 단, 디렉토리에있는 모든 LDAP 사용자의 성명을 표시하는 것 외에는 ... 내 LDAP에는 200 명 밖에 없기 때문에 너무 크지 않습니다.

어떤 아이디어?

답변

7

바인드는 LDAP 요청의 한 유형이며 검색은 다른 유형의 요청입니다. 바인드는 연결의 인증 상태를 설정하고 검색은 기본 객체, 범위, 필터 및 기타 선택적 매개 변수를 사용하여 필터링되어 LDAP 클라이언트에 반환되는 항목의 후보 목록을 작성합니다. 연결의 인증 상태는 검색 할 수있는 항목 수, 검색에서 검색 할 수있는 항목 수, 검색에 소요 된 시간, 수행하는 과정에서 검사해야하는 항목 수와 같은 특정 액세스 기능을 설정합니다 검색 요청 및 기타 기능을 제공합니다. 루트 DN을 사용하지 않으면 디렉토리의 모든 항목을 검색 할 수 없으며 LDAP 관리자가 비 루트 DN 인증 상태에서 몇 개 이상의 항목을 검색하지 못하게 할 수 있습니다. 검색에 대한 자세한 내용은 "LDAP: Using ldapsearch"을 참조하십시오. LDAP 프로그래밍에 대한보다 일반적인 정보는 "LDAP: Programming Practices"을 참조하십시오. 자세한 내용은 LDAP Search Best Practices을 참조하십시오.

필터와 관련하여 별표는 (cn=*)이라는 의미에서 와일드 카드가 아닙니다. 이것은 현재 상태 필터로 알려져 있으며 어설 션에서 사용 된 속성 (이 경우 cn)이 후보 목록을 필터링 할 때 항목에 있는지 여부를 나타냅니다. 별표는 부분 문자열 필터의 일부로 사용할 수 있습니다 (예 : (cn=abc*) 또는 ([email protected]*)).

어쨌든 큰 디렉토리에서 가능한 경우 하위 문자열 필터는 피해야하며 어쨌든 금지됩니다. 따라서 '디렉토리를 트롤링'합니다.

4

이것은 바인딩하는 방법이 아니라 탐색 방법입니다. LDAP filters에 대해 알아야합니다 (이 링크는 AD와 관련되어 있지만이 정보의 모든 정보는 모든 LDAP 노드에 적용될 수 있음).

LDAP 필터에서 *을 와일드 카드로 사용할 수 있습니다. 당신이 cn=Users라는 루트 컨테이너에서 속성 cn에 의해 식별됩니다 objectClass=User의 모든 개체를 얻고 싶었다 말 - 당신이 이런 짓을 했을까 :

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

이 원칙에 영향을 미칠 수있는 결합하는 방법은 경우입니다 유일한 방법 바인드하는 데 사용하는 사용자에게는 디렉토리에서 찾고있는 객체에 액세스 할 수있는 권한이 없습니다.

내가하려는 일에 대해 더 많은 코드를 보여 주면이 답변을 더 자세히 편집 할 것입니다.

+0

내가 뭘하려고하는지 자세히 설명해주었습니다 ... – Bulvak

+0

@Nadal 우리가 알아야 할 것은 a) 디렉토리의 모든 사람들을 포함하고있는 객체의 DN은 무엇인가 b) 원하는 객체를 식별하기 위해 사용할 수있는 것이고, 원하는 (objectClass = Person'과 같은) c) 원하는 속성의 이름 – DaveRandom

+0

a) DN은 ou = People, DC = sde, DC = kozwin, DC = com b) 정말로 이것을 모릅니다. 이다 나는이 세션 \t $ _SESSION [ '이름'] = $ 이름으로 내 LDAP 사용자의 LDAP 사용자 이름과 전체 이름을 지정 사람의 이름과 전화 번호를 싶습니다 C)를 $ _SESSION [ 'fullname'] = $ info [0] [cn] [0]; 전화 번호를 원하지만 전화 번호를 가져 오는 전화 번호를 알고 싶지 않습니다. – Bulvak

관련 문제