Programmer en PHP pour communiquer avec LDAP

PHP LDAP

  • Présentation de l'API PHP pour LDAP, exemples de consultation, ajout et modification.
  • Ecrire un mot de passe MD5
$userPassword = '{MD5}' . base64_encode(pack('H*',md5("motDePassEnClair")));

Erreurs rencontrés

Erreurs LDAP PHP

  • Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Protocol error in

En PHP lors de l'utilisation de ldap_bind, il faut préciser le protocole LDAP utilisé tel que l'expilque Unable to bind to server

ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
  • Warning: ldap_add() [function.ldap-add]: Add: Invalid syntax in

Vous essayer d'écrire des données qui ne sont pas converties en UTF-8

   $l[cn] = 'Sébastien Loeb';

devient

   $l[cn] = utf8_encode('Sébastien Loeb');
  • Warning: ldap_add() [function.ldap-add]: Add: Object class violation in

Vérifiez que l'attribut de que vous renseignez correspond à l'objectClass que vous avez définit et inversement. Par exemple vous ne pouvez pas renseigner l'attribut "uid" dans un objectClass "person", pour cela vous devez rajouter l'objetClass "inetOrgPerson"

  • Warning: ldap_add() [function.ldap-add]: Add: Naming violation in
ldap_add ( resource $link_identifier, string $dn, array $entry )

Un peu identique au précédent, vous essayer de définir un DN dans spécifier l'attribut, par exemple $dn="uid=Christophe, ou=people, dc=nodomain" et vous avez oubliez de définir $entry['uid']="Christophe";

  • Warning: ldap_add() [function.ldap-add]: Add: Already exists in

Vous essayer d'ajouter un DN déjà existant, utilisez ldap_modify pour remplacer votre objet ou ldap_mod_replace pour remplacer ses attributs.

  • Warning: ldap_mod_replace() [function.ldap-mod-replace]: Modify: No such object in

Vous essayer de remplacer des attributs d'un DN qui n'existe pas, utilisez ldap_add pour l'ajouter.

Pour palier à l'attente infinie de la connexion/bind de php sur votre serveur LDAP, il fallait rajouter une option :

$ld = ldap_connect("ldap.placeoweb.com");
ldap_set_option($ld, LDAP_OPT_NETWORK_TIMEOUT, 10); /* 10 second timeout */
ldap_bind($ld);

Script de migration d'une base de donnée vers un annuaire LDAP

Abstraction de la couche LDAP

En abstracteur de base de données LDAP vous disposez de :

Pour rechercher un connecteur permettant d'autres drivers que LDAP, consultez l'article sur ADOdb PDO PEAR MDB2 Zend_Db

Ressources

  • Lightweight Directory Access Protocol par php.net
  • PHP - Connexion à un annuaire LDAP par commentcamarche.net
    • Connexion au serveur LDAP
    • Ajouter une entrée avec ldap_add()
    • Comparer une entrée avec ldap_compare()
    • Supprimer une entrée avec ldap_delete()
    • Modifier une entrée avec ldap_modify()
    • Rechercher une entrée avec ldap_search()
    • Traitement des résultats
    • Récupérer le nombre d'entrées retournées par une recherche avec ldap_search()
    • Récupérer les entrées retournées