From 48a04205c8513fdc4f923fef556e3db8cc17d9f9 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 17 Aug 2012 15:00:12 +0200 Subject: Fix bug where domain name was converted to lower-case even with login_lc=false (#1488593) Conflicts: CHANGELOG program/include/rcmail.php --- CHANGELOG | 1 + config/main.inc.php.dist | 7 ++++--- program/include/rcmail.php | 21 ++++++++++++--------- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 776fbbc3a..5a5c3cdd8 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Fix bug where domain name was converted to lower-case even with login_lc=false (#1488593) - Fix lower-casing email address on replies (#1488598) - Fix line separator in exported messages (#1488603) - Fix XSS issue where plain signatures wasn't secured in HTML mode (#1488613) diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist index 7f3fd1318..15da00d66 100644 --- a/config/main.inc.php.dist +++ b/config/main.inc.php.dist @@ -219,11 +219,12 @@ $rcmail_config['use_https'] = false; // 0 - disabled, 1 - username and host only, 2 - username, host, password $rcmail_config['login_autocomplete'] = 0; -// If users authentication is not case sensitive this must be enabled. -// You can also use it to force conversion of logins to lower case. +// Forces conversion of logins to lower case. +// 0 - disabled, 1 - only domain part, 2 - domain and local part. +// If users authentication is not case-sensitive this must be enabled. // After enabling it all user records need to be updated, e.g. with query: // UPDATE users SET username = LOWER(username); -$rcmail_config['login_lc'] = false; +$rcmail_config['login_lc'] = 0; // Includes should be interpreted as PHP files $rcmail_config['skin_include_php'] = false; diff --git a/program/include/rcmail.php b/program/include/rcmail.php index 9fdd33bf3..44a601635 100644 --- a/program/include/rcmail.php +++ b/program/include/rcmail.php @@ -899,7 +899,14 @@ class rcmail // Convert username to lowercase. If storage backend // is case-insensitive we need to store always the same username (#1487113) if ($config['login_lc']) { - $username = mb_strtolower($username); + if ($config['login_lc'] == 2 || $config['login_lc'] === true) { + $username = mb_strtolower($username); + } + else if (strpos($username, '@')) { + // lowercase domain name + list($local, $domain) = explode('@', $username); + $username = $local . '@' . mb_strtolower($domain); + } } // try to resolve email address from virtuser table @@ -909,17 +916,13 @@ class rcmail // Here we need IDNA ASCII // Only rcube_contacts class is using domain names in Unicode - $host = rcube_idn_to_ascii($host); - if (strpos($username, '@')) { - // lowercase domain name - list($local, $domain) = explode('@', $username); - $username = $local . '@' . mb_strtolower($domain); - $username = rcube_idn_to_ascii($username); - } + $host = rcube_idn_to_ascii($host); + $username = rcube_idn_to_ascii($username); // user already registered -> overwrite username - if ($user = rcube_user::query($username, $host)) + if ($user = rcube_user::query($username, $host)) { $username = $user->data['username']; + } if (!$this->storage) $this->storage_init(); -- cgit v1.2.3