ConFoo 2025

ldap_compare

(PHP 4 >= 4.0.2, PHP 5, PHP 7, PHP 8)

ldap_compareСравнивает значение атрибута, который найден в записи с DN-именем

Описание

ldap_compare(
    LDAP\Connection $ldap,
    string $dn,
    string $attribute,
    string $value,
    ?array $controls = null
): bool|int

Функция сравнивает значение value атрибута attribute со значением того же атрибута в записи LDAP-каталога.

Список параметров

ldap

Экземпляр класса LDAP\Connection, который возвращает функция ldap_connect().

dn

Отличительное имя LDAP-объекта.

attribute

Имя атрибута.

value

Сравниваемое значение.

controls

Массив управляющих объектов протокола LDAP для отправки в запросе.

Возвращаемые значения

Функция возвращает true, если значение value совпадает, иначе false. Функция возвращает значение -1 в случае ошибки.

Список изменений

Версия Описание
8.1.0 Параметр ldap теперь ожидает экземпляр класса LDAP\Connection; раньше параметр ждал ресурс (resource) ldap link .
8.0.0 Параметр controls теперь допускает значение null; раньше значение по умолчанию равнялось [].
7.3.0 Добавлена поддержка параметра controls.

Примеры

Следующий пример показывает, как проверить, совпадает ли пароль с паролем, который определили в заданной записи DN.

Пример #1 Полный пример проверки пароля

<?php

$ds
= ldap_connect("localhost"); // Предположим, что LDAP-сервер находится по этому адресу

if ($ds) {
// Привязка к LDAP-каталогу
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
"Ошибка: " . ldap_error($ds);
} elseif (
$r === true) {
echo
"Пароль верный.";
} elseif (
$r === false) {
echo
"Неправильное предположение! Пароль не верен.";
}

} else {
echo
"Невозможно привязаться к серверу LDAP.";
}

ldap_close($ds);

} else {
echo
"Невозможно соединиться с сервером LDAP.";
}

?>

Примечания

Внимание

Функцию ldap_compare() нельзя вызывать для сравнения ДВОИЧНЫХ значений!

Добавить

Примечания пользователей 4 notes

up
19
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.
up
1
oudejans at zeelandnet dot nl
19 years ago
With PHP 4.3.* is Password no longer a valid attribute.. try to use userPassword
up
-1
Brian Kerhin &lt;kerhin at bigfoot dot com&gt;
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!
up
-3
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.
To Top