Importer un mot de passe MD5 dans un champ userPassword d'OpenLDAP

2008-11-06
Thomas Martin


J'ai eu récemment l'occasion de migrer des comptes stockés dans une base de données PostgreSQL vers OpenLDAP. Les mots de passe étaient stockés sous forme de hash MD5 au format hexadécimal. f71dbe52628a3f83a77ab494817525c6 par exemple.

Ma première approche a été d'importer directement cette valeur dans le champ userPassword en les préfixant de {MD5}. En effet OpenLDAP gère de manière transparente de nombreux formats de mot de passe.

Malheureusement ceci ne marche pas. Les MD5 doivent être stockés sous forme hexadécimal dans OpenLDAP. Voici le bout de code Perl permettant la conversion, que j'ai mis un certain temps à écrire :

use MIME::Base64;
my $md5_hexa = "f71dbe52628a3f83a77ab494817525c6";
my $md5_base64 = "{MD5}".encode_base64(pack("H*", $md5_hexa), "");