Changer son mot de passe dans roundcubemail+postfix+utilisateurs virtuels

Dans la lignée des articles suivant :

Voici maintenant comment « configurer et activer le plugin de changement de mot de passe dans roundcubemail (actuellement v0.4) sur des utilisateurs virtuels (SQL)« . Depuis la 0.4, le plugin est intégré et propre. Pas la peine d’ajouter du code PHP un peu partout.
Notez que le plugin est modulaire et gère des « drivers » pour l’authentification : sql, ldap, poppassd, cyrus/SASL etc.
Allez, let’s go!

Vu que j’avais eu quelques déboires avec les vieilles versions de roundcube, je suis parti sur la dernière release stable du site officiel, pas d’une version packagée Debian.

Toute la doc tient dans un README simpliste, dans vos sources roundcubemail, fichier /plugins/password/README. Mon article applique ceci en expliquant un peu plus…

Je considère que vous partez d’une configuration d’utilisateurs virtuels comme décrite dans mes docs mentionnés en haut de l’article. Sinon il faut adapter et je ne peux pas prédire ce que vous devez écrire :) .
Dans vos sources roundcube, renommez/copiez le fichier /plugins/password/config.inc.php.dist en /plugins/password/config.inc.php et modifiez uniquement ce qui suit :

$rcmail_config['password_db_dsn'] = 'mysql://admin:son_pass@localhost/ma_base';
$rcmail_config['password_query'] = 'UPDATE ma_base.users SET password=ENCRYPT(%p) WHERE email=%u LIMIT 1';

Dans password_db_dsn, on indique la base de données des utilisateurs virtuels. Puisque l’outil roundcube bosse sur SA base de données, il faudra bien qu’il aille voir autre part. A vous de voir si vous lui donnez l’accès admin à votre base ou un compte sur mesure capable de faire des UPDATE uniquement sur la table des utilisateurs. Ca ou tous les droits, c’est pas foncièrement différent me direz-vous.
Dans password_query, on indique la requête d’UPDATE. Remarques :

  • Non, pas la peine d’ajouter un « WHERE… AND password = ENCRYPT(%o) » pour soit disant contrôler que l’ancien pass est le bon. D’une part c’est contrôlé au niveau de la session PHP via une fonction « decrypt » (cherchez dans le code) et d’autre part, ENCRYPT ne produit pas nécessairement le même résultat pour un pass donné, l’histoire du ‘salt’, aléatoire lorsqu’on ne le précise pas (amha).
  • On limite à 1 par sécurité et aussi car le plugin gueule s’il n’a pas modifié qu’une ligne. En même temps, il a raison :)
  • Je préfère forcer le nom complet « ma_base.users » pour éviter une erreur, si 2 tables avaient le même nom dans les 2 bases, je pense

J’ai passé sous silence ces 2 paramètres déjà OK de base :

$rcmail_config['password_driver'] = 'sql';
$rcmail_config['password_confirm_current'] = true;

Enfin, on active le plugin dans la conf principale, fichier config/main.inc.php :

$rcmail_config['plugins'] = array('password');

Voilà, c’est tout. Rechargez la page des préférences sur roundcube. Tout ceci étant en PHP, c’est dynamique et vous verrez l’onglet de changement de mot de passe, et il devrait fonctionner :)

Vus : 2400
Publié par Michauko : 64