diff options
| -rw-r--r-- | CHANGELOG | 1 | ||||
| -rw-r--r-- | config/main.inc.php.dist | 7 | ||||
| -rw-r--r-- | program/include/rcmail.php | 21 | 
3 files changed, 17 insertions, 12 deletions
| @@ -1,6 +1,7 @@  CHANGELOG Roundcube Webmail  =========================== +- Fix bug where domain name was converted to lower-case even with login_lc=false (#1488593)  - Rewritten test scripts for PHPUnit  - Fix lower-casing email address on replies (#1488598)  - Fix line separator in exported messages (#1488603) diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist index 58f9ca865..1e9c1fdcd 100644 --- a/config/main.inc.php.dist +++ b/config/main.inc.php.dist @@ -224,11 +224,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 a6b0bcd57..d866919d6 100644 --- a/program/include/rcmail.php +++ b/program/include/rcmail.php @@ -453,7 +453,14 @@ class rcmail extends rcube      // 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 @@ -463,17 +470,13 @@ class rcmail extends rcube      // Here we need IDNA ASCII      // Only rcube_contacts class is using domain names in Unicode -    $host = rcube_utils::idn_to_ascii($host); -    if (strpos($username, '@')) { -      // lowercase domain name -      list($local, $domain) = explode('@', $username); -      $username = $local . '@' . mb_strtolower($domain); -      $username = rcube_utils::idn_to_ascii($username); -    } +    $host     = rcube_utils::idn_to_ascii($host); +    $username = rcube_utils::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']; +    }      $storage = $this->get_storage(); | 
