From adba581a4dfc850d09cabf45d8b1ef9eef404351 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Thu, 4 Apr 2019 23:01:40 +0300 Subject: [PATCH] Fix addition of admin users The user passwords were stored in plaintext format. --- server/core/adminusers.cc | 3 +-- server/core/test/test_users.cc | 3 +++ server/core/users.cc | 14 +++++++++----- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/server/core/adminusers.cc b/server/core/adminusers.cc index 56ea8fc6a..51c9d1b81 100644 --- a/server/core/adminusers.cc +++ b/server/core/adminusers.cc @@ -432,8 +432,7 @@ bool admin_linux_account_enabled(const char* uname) */ const char* admin_add_inet_user(const char* uname, const char* password, enum user_account_type type) { - auto cpassword = mxs::crypt(password, ADMIN_SALT); - return admin_add_user(&inet_users, INET_USERS_FILE_NAME, uname, cpassword.c_str(), type); + return admin_add_user(&inet_users, INET_USERS_FILE_NAME, uname, password, type); } /** diff --git a/server/core/test/test_users.cc b/server/core/test/test_users.cc index d1389318e..db9f61c0a 100644 --- a/server/core/test/test_users.cc +++ b/server/core/test/test_users.cc @@ -35,6 +35,8 @@ #include +#include "test_utils.hh" + static int test1() { USERS* users; @@ -81,6 +83,7 @@ int main(int argc, char** argv) { int result = 0; + init_test_env(nullptr); result += test1(); exit(result); diff --git a/server/core/users.cc b/server/core/users.cc index 26b5e27a3..bffe52c37 100644 --- a/server/core/users.cc +++ b/server/core/users.cc @@ -67,8 +67,7 @@ public: bool add(std::string user, std::string password, user_account_type perm) { - std::lock_guard guard(m_lock); - return m_data.insert(std::make_pair(user, UserInfo(password, perm))).second; + return add_hashed(user, mxs::crypt(password, ADMIN_SALT), perm); } bool remove(std::string user) @@ -209,6 +208,11 @@ public: } private: + bool add_hashed(std::string user, std::string password, user_account_type perm) + { + std::lock_guard guard(m_lock); + return m_data.insert(std::make_pair(user, UserInfo(password, perm))).second; + } static bool is_admin(const UserMap::value_type& value) { @@ -232,9 +236,9 @@ private: && password && json_is_string(password) && json_to_account_type(type) != USER_ACCOUNT_UNKNOWN) { - add(json_string_value(name), - json_string_value(password), - json_to_account_type(type)); + add_hashed(json_string_value(name), + json_string_value(password), + json_to_account_type(type)); } else {