From fb9b3a7cffc8fb8c88e30f0a832fa8f426ab8f8e Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sun, 1 Oct 2023 10:04:33 +0200 Subject: [PATCH] kolab_2fa: Support username_domain and username_domain_forced settings Ref: https://github.com/roundcube/roundcubemail/issues/9069 --- plugins/kolab_2fa/kolab_2fa.php | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/plugins/kolab_2fa/kolab_2fa.php b/plugins/kolab_2fa/kolab_2fa.php index b09d6b3c..9cd07d50 100644 --- a/plugins/kolab_2fa/kolab_2fa.php +++ b/plugins/kolab_2fa/kolab_2fa.php @@ -90,8 +90,35 @@ class kolab_2fa extends rcube_plugin $hostname = $_SESSION['hostname'] = $a_host['host'] ?: $args['host']; $username = !empty($_SESSION['kolab_auth_admin']) ? $_SESSION['kolab_auth_admin'] : $args['user']; + // Check if we need to add/force domain to username + $username_domain = $this->config->get('username_domain'); + if (!empty($username_domain)) { + $domain = ''; + if (is_array($username_domain)) { + if (!empty($username_domain[$hostname])) { + $domain = $username_domain[$hostname]; + } + } + else { + $domain = $username_domain; + } + + if ($domain = rcube_utils::parse_host((string) $domain, $hostname)) { + $pos = strpos($username, '@'); + + // force configured domains + if ($pos !== false && $rcmail->config->get('username_domain_forced')) { + $username = substr($username, 0, $pos) . '@' . $domain; + } + // just add domain if not specified + else if ($pos === false) { + $username .= '@' . $domain; + } + } + } + // Convert username to lowercase. Copied from rcmail::login() - $login_lc = $rcmail->config->get('login_lc', 2); + $login_lc = $this->config->get('login_lc', 2); if ($login_lc) { if ($login_lc == 2 || $login_lc === true) { $username = mb_strtolower($username); @@ -128,7 +155,7 @@ class kolab_2fa extends rcube_plugin $_SESSION['kolab_2fa_nonce'] = bin2hex(openssl_random_pseudo_bytes(32)); $_SESSION['kolab_2fa_factors'] = $factors; - $_SESSION['username'] = $args['user']; + $_SESSION['username'] = $username; $_SESSION['host'] = $args['host']; $_SESSION['password'] = $rcmail->encrypt($args['pass']);