plugins/password/config.inc.php.dist | ●●●●● patch | view | raw | blame | history | |
plugins/password/drivers/sql.php | ●●●●● patch | view | raw | blame | history |
plugins/password/config.inc.php.dist
@@ -36,7 +36,8 @@ // The query can contain the following macros that will be expanded as follows: // %p is replaced with the plaintext new password // %c is replaced with the crypt version of the new password, MD5 if available // otherwise DES. // otherwise DES. More hash function can be enabled using the password_crypt_hash // configuration parameter. // %D is replaced with the dovecotpw-crypted version of the new password // %o is replaced with the password before the change // %n is replaced with the hashed version of the new password @@ -51,6 +52,13 @@ // Default: "SELECT update_passwd(%c, %u)" $rcmail_config['password_query'] = 'SELECT update_passwd(%c, %u)'; // By default the crypt() function which is used to create the '%c' // parameter uses the md5 algorithm. To use different algorithms // you can choose between: des, md5, blowfish, sha256, sha512. // Before using other hash functions than des or md5 please make sure // your operating system supports the other hash functions. $rcmail_config['password_crypt_hash'] = 'md5'; // By default domains in variables are using unicode. // Enable this option to use punycoded names $rcmail_config['password_idn_ascii'] = false; plugins/password/drivers/sql.php
@@ -40,12 +40,37 @@ // crypted password if (strpos($sql, '%c') !== FALSE) { $salt = ''; if (CRYPT_MD5) { // Always use eight salt characters for MD5 (#1488136) if (!($crypt_hash = $rcmail->config->get('password_crypt_hash'))) { if (CRYPT_MD5) $crypt_hash = 'md5'; else if (CRYPT_STD_DES) $crypt_hash = 'des'; } switch ($crypt_hash) { case 'md5': $len = 8; } else if (CRYPT_STD_DES) { $salt_hashindicator = '$1$'; break; case 'des': $len = 2; } else { break; case 'blowfish': $len = 22; $salt_hashindicator = '$2a$'; break; case 'sha256': $len = 16; $salt_hashindicator = '$5$'; break; case 'sha512': $len = 16; $salt_hashindicator = '$6$'; break; default: return PASSWORD_CRYPT_ERROR; } @@ -55,7 +80,7 @@ $salt .= $seedchars[rand(0, 63)]; } $sql = str_replace('%c', $db->quote(crypt($passwd, CRYPT_MD5 ? '$1$'.$salt.'$' : $salt)), $sql); $sql = str_replace('%c', $db->quote(crypt($passwd, $salt_hashindicator ? $salt_hashindicator .$salt.'$' : $salt)), $sql); } // dovecotpw