ldap_compare
(PHP 4 >= 4.0.2, PHP 5, PHP 7)
ldap_compare — Сравнить значение атрибута, найденного в записи определённой DN
Описание
Сравнивает значение (value
) атрибута (attribute
)
со значением того же атрибута в записи LDAP директории.
Список параметров
-
link_identifier
-
Идентификатор ссылки LDAP, возвращенный ldap_connect().
-
dn
-
Отличительное имя LDAP объекта.
-
attribute
-
Имя атрибута.
-
value
-
Сравниваемое значение.
Возвращаемые значения
Возвращает TRUE
если value
совпадают в противном случае FALSE
.
Возвращает -1 в случае ошибки.
Примеры
Следующий пример демонстрирует, как проверить, совпадает ли данный пароль с тем, который определен в указанной записи DN.
Пример #1 Полный пример проверки пароля
<?php
$ds=ldap_connect("localhost"); // Предположим, что LDAP сервер находится по этому адресу
if ($ds) {
// bind
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() не может быть использована для сравнения бинарных (BINARY) значений!
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Другие службы
- Облегчённый протокол доступа к каталогам (LDAP)
- ldap_8859_to_t61
- ldap_add
- ldap_bind
- ldap_close
- ldap_compare
- ldap_connect
- ldap_control_paged_result_response
- ldap_control_paged_result
- ldap_count_entries
- ldap_delete
- ldap_dn2ufn
- ldap_err2str
- ldap_errno
- ldap_error
- ldap_escape
- ldap_explode_dn
- ldap_first_attribute
- ldap_first_entry
- ldap_first_reference
- ldap_free_result
- ldap_get_attributes
- ldap_get_dn
- ldap_get_entries
- ldap_get_option
- ldap_get_values_len
- ldap_get_values
- ldap_list
- ldap_mod_add
- ldap_mod_del
- ldap_mod_replace
- ldap_modify_batch
- ldap_modify
- ldap_next_attribute
- ldap_next_entry
- ldap_next_reference
- ldap_parse_reference
- ldap_parse_result
- ldap_read
- ldap_rename
- ldap_sasl_bind
- ldap_search
- ldap_set_option
- ldap_set_rebind_proc
- ldap_sort
- ldap_start_tls
- ldap_t61_to_8859
- ldap_unbind
Коментарии
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.
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!
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.
With PHP 4.3.* is Password no longer a valid attribute.. try to use userPassword