2011-10-27 10 views
4

検索を使用する認証用のLDAPバインド方法は分かっていますが、フルネームのすべてのエントリが必要な場合はどうすればよいですか...だから、どのように全員のフルネームや電子メールを受け取ることができますか?どのようにすべてのLDAPエントリを取得できますか?

以下では、認証にLDAPバインドを使用していますが、1人のユーザーを検索することはできますが、全員が必要な場合はどうすればよいですか。

<?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のコードです:

<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人しかいないので、あまりにも大きくありません。

すべてのアイデア?

答えて

7

バインドはLDAP要求の1つのタイプであり、検索は別のタイプの要求です。バインドによって接続の認証状態が確立され、検索ではベースオブジェクト、スコープ、フィルタ、およびその他のオプションのパラメータを使用してフィルタリングされ、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)あなたが望むオブジェクトを識別するために使用できるものと、あなたが望む属性の名前 – 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

関連する問題