Comment faire de l'authentification par mot de passe pour un utilisateur à l'aide de LDAP?

Je suis en train d'écrire une application cliente (à l'aide de OpenLDAP bibliothèques) pour lesquels les utilisateurs obtient authentifié par le serveur LDAP.

Voici l'échantillon, codé en dur, programme qui ne parvient pas à comparer userPassword pour un utilisateur.

#include <stdio.h>
#include <ldap.h>
#define LDAP_SERVER "ldap://192.168.1.95:389"
int main( int argc, char **argv ){
LDAP        *ld;
int         rc;
char        bind_dn[100];
LDAPMessage *result, *e;
char *dn;
int has_value;
sprintf( bind_dn, "cn=%s,dc=ashwin,dc=com", "manager" );
printf( "Connecting as %s...\n", bind_dn );
if( ldap_initialize( &ld, LDAP_SERVER ) )
{
perror( "ldap_initialize" );
return( 1 );
}
rc = ldap_simple_bind_s( ld, bind_dn, "ashwin" );
if( rc != LDAP_SUCCESS )
{
fprintf(stderr, "ldap_simple_bind_s: %s\n", ldap_err2string(rc) );
return( 1 );
}
printf( "Successful authentication\n" );
rc = ldap_search_ext_s(ld, "dc=ashwin,dc=com", LDAP_SCOPE_SUBTREE, "sn=ashwin kumar", NULL, 0, NULL, NULL, NULL, 0, &result);
if ( rc != LDAP_SUCCESS ) {
fprintf(stderr, "ldap_search_ext_s: %s\n", ldap_err2string(rc));
}
for ( e = ldap_first_entry( ld, result ); e != NULL; e = ldap_next_entry( ld, e ) ) {
if ( (dn = ldap_get_dn( ld, e )) != NULL ) {
printf( "dn: %s\n", dn );
has_value = ldap_compare_s( ld, dn, "userPassword", "secret" ); 
switch ( has_value ) { 
case LDAP_COMPARE_TRUE: 
printf( "Works.\n"); 
break; 
case LDAP_COMPARE_FALSE: 
printf( "Failed.\n"); 
break; 
default: 
ldap_perror( ld, "ldap_compare_s" ); 
return( 1 ); 
} 
ldap_memfree( dn );
}
}
ldap_msgfree( result );
ldap_unbind( ld );
return( 0 );
}

userPassword si c'est clair dans le serveur LDAP, il fonctionne.
le mot de passe même si c'est crypté MD5, ldap_compare_s échoue. Et c'est parce que je suis de passage le mot de passe en texte clair à comparer.

Comment puis-je obtenir cet exemple de programme de travail?

Je fais ce droit? Est-il correct d'utiliser ldap_compare_s pour authentifier les utilisateurs via LDAP?

P. S: C'est la première fois que je suis en train de travailler sur le protocole LDAP.

OriginalL'auteur Ashwin kumar | 2013-04-23