CascadiaPHP 2024

ldap_compare

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

ldap_compareCompara valor de atributo encontrado em entrada especificada com DN

Descrição

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

Compara o valor informado em value do atributo informado em attribute com o valor do mesmo atributo na entrada do diretório LDAP.

Parâmetros

ldap

Uma instância de LDAP\Connection, retornada por ldap_connect().

dn

O nome distinto de uma entidade LDAP.

attribute

O nome do atributo.

value

O valor para comparação.

controls

Array de Controles LDAP a ser enviado com a requisição.

Valor Retornado

Retorna true se value tem correspondência, caso contrário retorna false. Retorna -1 em caso de erro.

Registro de Alterações

Versão Descrição
8.1.0 O parâmetro ldap agora espera uma instância de LDAP\Connection; anteriormente, um resource ldap link válido era esperado.
8.0.0 O parâmetro controls agora pode ser nulo; anteriormente, o padrão era [].
7.3.0 Suporte para controls foi adicionado

Exemplos

O exemplo a seguir demonstra como verificar se a senha informada corresponde ou não à senha definida na entrada especificada pelo DN.

Exemplo #1 Exemplo completo de verificação de senha

<?php

$ds
=ldap_connect("localhost"); // assumindo que o servidor LDAP está no servidor local

if ($ds) {

// ligação
if (ldap_bind($ds)) {

// prepara dados
$dn = "cn=Matti Meikku, ou=My Unit, o=My Company, c=FI";
$value = "secretpassword";
$attr = "password";

// compara o valor
$r=ldap_compare($ds, $dn, $attr, $value);

if (
$r === -1) {
echo
"Erro: " . ldap_error($ds);
} elseif (
$r === true) {
echo
"Senha correta.";
} elseif (
$r === false) {
echo
"Tentativa inválida! Senha incorreta.";
}

} else {
echo
"Não foi possível fazer ligação com o servidor LDAP.";
}

ldap_close($ds);

} else {
echo
"Não foi possível conexão ao servidor LDAP.";
}
?>

Notas

Aviso

ldap_compare() NÃO pode ser usada para comparar valores BINÁRIOS!

add a note

User Contributed Notes 4 notes

up
19
chuck+ldap at 2006 dot snew dot com
19 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
23 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