From ced34cb15e095836767971aa4d27b141fb1d7ec9 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Sat, 18 Oct 2014 08:47:54 -0400
Subject: [PATCH] Merge pull request #230 from bytesatwork-xx/master

---
 plugins/password/drivers/ldap.php |   23 +++++++++++++++++++++--
 1 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/plugins/password/drivers/ldap.php b/plugins/password/drivers/ldap.php
index 340dd29..2d29a55 100644
--- a/plugins/password/drivers/ldap.php
+++ b/plugins/password/drivers/ldap.php
@@ -78,7 +78,20 @@
             return PASSWORD_CONNECT_ERROR;
         }
 
-        $crypted_pass = self::hash_password($passwd, $rcmail->config->get('password_ldap_encodage'));
+        $encodage = $rcmail->config->get('password_ldap_encodage');
+
+        // Support multiple userPassword values where desired.
+        // multiple encodings can be specified separated by '+' (e.g. "cram-md5+ssha")
+        $encodages = explode('+',$encodage);
+        $crypted_pass = array();
+
+        foreach($encodages as $enc) {
+            $cpw = self::hash_password($passwd, $enc);
+            if(!empty($cpw)) {
+                $crypted_pass[] = $cpw;
+            }
+        }
+
         $force        = $rcmail->config->get('password_ldap_force_replace');
         $pwattr       = $rcmail->config->get('password_ldap_pwattr');
         $lchattr      = $rcmail->config->get('password_ldap_lchattr');
@@ -93,7 +106,7 @@
         }
 
         // Crypt new password
-        if (!$crypted_pass) {
+        if (empty($crypted_pass)) {
             return PASSWORD_CRYPT_ERROR;
         }
 
@@ -297,6 +310,7 @@
             }
             break;
 
+
         case 'smd5':
             mt_srand((double) microtime() * 1000000);
             $salt = substr(pack('h*', md5(mt_rand())), 0, 8);
@@ -332,6 +346,11 @@
             $crypted_password = rcube_charset::convert('"' . $password_clear . '"', RCUBE_CHARSET, 'UTF-16LE');
             break;
 
+        case 'cram-md5':
+            require_once(dirname(__FILE__).'/../helpers/dovecot_hmacmd5.php');
+            return dovecot_hmacmd5($password_clear);
+            break;
+
         case 'clear':
         default:
             $crypted_password = $password_clear;

--
Gitblit v1.9.1