From 168c9c55e99b271b8a036401af03fdd47938d1f1 Mon Sep 17 00:00:00 2001 From: Andrey Zvonov <32552679+zvonand@users.noreply.github.com> Date: Wed, 28 Jan 2026 15:41:45 +0100 Subject: [PATCH] Merge pull request #1342 from Altinity/backports/25.8.15/86633 25.8.15 Stable Backport of #86633 - Add support for user names in config containing a dot --- src/Access/UsersConfigAccessStorage.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Access/UsersConfigAccessStorage.cpp b/src/Access/UsersConfigAccessStorage.cpp index e0cab5b337e8..f3aed9f17403 100644 --- a/src/Access/UsersConfigAccessStorage.cpp +++ b/src/Access/UsersConfigAccessStorage.cpp @@ -115,7 +115,7 @@ namespace UserPtr parseUser( const Poco::Util::AbstractConfiguration & config, - const String & user_name, + String user_name, const std::unordered_set & allowed_profile_ids, const std::unordered_set & allowed_role_ids, bool allow_no_password, @@ -123,8 +123,12 @@ namespace { const bool validate = true; auto user = std::make_shared(); - user->setName(user_name); String user_config = "users." + user_name; + + /// If the user name contains a dot, it is escaped with a backslash when parsed from the config file. + /// We need to remove the backslash to get the correct user name. + Poco::replaceInPlace(user_name, "\\.", "."); + user->setName(user_name); bool has_no_password = config.has(user_config + ".no_password"); bool has_password_plaintext = config.has(user_config + ".password"); bool has_password_sha256_hex = config.has(user_config + ".password_sha256_hex");