summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorPaweł Słowik <pawel.slowik@iq.pl>2012-09-13 14:24:01 +0200
committerPaweł Słowik <pawel.slowik@iq.pl>2012-09-13 14:24:01 +0200
commit2cdaa79dce689b2dc9ef5c7bf3dcbd9446d86c21 (patch)
tree7482d3bd9a71a9913f4e28392b09e11c519987de /plugins
parent92a030d928246cfc5f3c0b1f2538dc1bfb4777e3 (diff)
parentd7439260770eb1f70cdc5abf5df13e6c62ff3991 (diff)
Merge branch 'master' of https://github.com/roundcube/roundcubemail
Diffstat (limited to 'plugins')
-rw-r--r--plugins/managesieve/tests/Parser.php2
-rw-r--r--plugins/managesieve/tests/src/parser_kep14.out3
-rw-r--r--plugins/password/config.inc.php.dist10
-rw-r--r--plugins/password/drivers/sql.php41
-rw-r--r--plugins/password/drivers/virtualmin.php4
5 files changed, 50 insertions, 10 deletions
diff --git a/plugins/managesieve/tests/Parser.php b/plugins/managesieve/tests/Parser.php
index 06b644b34..00915cc20 100644
--- a/plugins/managesieve/tests/Parser.php
+++ b/plugins/managesieve/tests/Parser.php
@@ -31,7 +31,7 @@ class Parser extends PHPUnit_Framework_TestCase
$result = array();
while ($file = readdir($dir)) {
- if (preg_match('/^[a-z_]+$/', $file)) {
+ if (preg_match('/^[a-z0-9_]+$/', $file)) {
$input = file_get_contents($dir_path . '/' . $file);
if (file_exists($dir_path . '/' . $file . '.out')) {
diff --git a/plugins/managesieve/tests/src/parser_kep14.out b/plugins/managesieve/tests/src/parser_kep14.out
new file mode 100644
index 000000000..cb7faa7f8
--- /dev/null
+++ b/plugins/managesieve/tests/src/parser_kep14.out
@@ -0,0 +1,3 @@
+require ["variables"];
+set "EDITOR" "Roundcube";
+set "EDITOR_VERSION" "123";
diff --git a/plugins/password/config.inc.php.dist b/plugins/password/config.inc.php.dist
index 37c79315d..8d7b433af 100644
--- a/plugins/password/config.inc.php.dist
+++ b/plugins/password/config.inc.php.dist
@@ -36,7 +36,8 @@ $rcmail_config['password_db_dsn'] = '';
// 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 @@ $rcmail_config['password_db_dsn'] = '';
// 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;
diff --git a/plugins/password/drivers/sql.php b/plugins/password/drivers/sql.php
index 449e2df5b..8bdcabf83 100644
--- a/plugins/password/drivers/sql.php
+++ b/plugins/password/drivers/sql.php
@@ -40,13 +40,38 @@ class rcube_sql_password
// crypted password
if (strpos($sql, '%c') !== FALSE) {
$salt = '';
- if (CRYPT_MD5) {
- // Always use eight salt characters for MD5 (#1488136)
- $len = 8;
- } else if (CRYPT_STD_DES) {
- $len = 2;
- } else {
- return PASSWORD_CRYPT_ERROR;
+
+ 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;
+ $salt_hashindicator = '$1$';
+ break;
+ case 'des':
+ $len = 2;
+ 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;
}
//Restrict the character set used as salt (#1488136)
@@ -55,7 +80,7 @@ class rcube_sql_password
$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
diff --git a/plugins/password/drivers/virtualmin.php b/plugins/password/drivers/virtualmin.php
index b2547e07f..f9eca9633 100644
--- a/plugins/password/drivers/virtualmin.php
+++ b/plugins/password/drivers/virtualmin.php
@@ -48,6 +48,10 @@ class rcube_virtualmin_password
$pieces = explode("_", $username);
$domain = $pieces[0];
break;
+ case 8: // domain taken from alias, username left as it was
+ $email = $rcmail->user->data['alias'];
+ $domain = substr(strrchr($email, "@"), 1);
+ break;
default: // username@domain
$domain = substr(strrchr($username, "@"), 1);
}