ldap_compare
(PHP 4 >= 4.0.2, PHP 5, PHP 7, PHP 8)
ldap_compare — 指定した DN のエントリで見付かった属性の値を比較する
説明
ldap_compare(
LDAP\Connection
string
string
string
?array
): bool|int
LDAP\Connection
$ldap
,string
$dn
,string
$attribute
,string
$value
,?array
$controls
= null
): bool|int
属性 attribute
の値 value
を、指定した LDAP ディレクトリエントリの同じ属性の値と比較します。
パラメータ
ldap
-
ldap_connect() が返す LDAP\Connection クラスのインスタンス。
dn
-
LDAP エンティティの識別名。
attribute
-
属性の名前。
value
-
比較する値。
controls
-
リクエストと一緒に送信する LDAP コントロール の配列
変更履歴
バージョン | 説明 |
---|---|
8.1.0 |
引数 ldap は、LDAP\Connection
クラスのインスタンスを期待するようになりました。
これより前のバージョンでは、有効な ldap link リソース を期待していました。
|
8.0.0 |
controls は、nullable になりました。
これより前のバージョンでは、デフォルト値が [] でした。
|
7.3.0 |
controls のサポートが追加されました。
|
例
次の例は、指定したパスワードが DN の指定したエントリで定義された ものと一致するかどうかをチェックする方法を示しています。
例1 パスワード確認の例
<?php
$ds=ldap_connect("localhost"); // LDAP サーバーが同一ホストであると仮定
if ($ds) {
// バインド
if (ldap_bind($ds)) {
// データを準備
$dn = "cn=Matti Meikku, ou=My Unit, o=My Company, c=FI";
$value = "secretpassword";
$attr = "password";
// 値を比較
$r=ldap_compare($ds, $dn, $attr, $value);
if ($r === -1) {
echo "Error: " . ldap_error($ds);
} elseif ($r === true) {
echo "Password correct.";
} elseif ($r === false) {
echo "Wrong guess! Password incorrect.";
}
} else {
echo "Unable to bind to LDAP server.";
}
ldap_close($ds);
} else {
echo "Unable to connect to LDAP server.";
}
?>
注意
警告
ldap_compare() では BINARY 値を比較することはできません!
+add a note
User Contributed Notes 4 notes
chuck+ldap at 2006 dot snew dot com ¶
20 years ago
Just a side note that this is not how you'd ever AUTHENTICATE someone, just an example code.
The common way to authenticate is to get the users name, use search and perhaps selection to the user to get her DN (single value) then attempt to BIND to the ldapserver using that dn and the offered password. If it works, then it's the right password.
Note that the password offered MUST NOT BE EMPTY or many LDAPs will presume you meant to authenticate anonymously and it will succeed, leaving you thinking it's the right password.
oudejans at zeelandnet dot nl ¶
19 years ago
With PHP 4.3.* is Password no longer a valid attribute.. try to use userPassword
Brian Kerhin <kerhin at bigfoot dot com> ¶
23 years ago
Not probably, will. With PHP 4.0.4 and openldap 1.2.9 this little script, even with the correct attributes for the password does not do the job. Would superb if it did!
334647 at swin dot edu dot au ¶
24 years ago
Interesting example. Apart from the fact that very few people would allow comaprisions of the password attribute for security reasons. The attribute name of "password" does not match the usual schemas.
The usual method of user id + password verification is to attempt to bind using the supplied credentials.
Ldap compare on password values will probably fail with ns directroy server and openldap v2+ becuase of server support for password hashing.