From c2a9c4bfc1fd1f3cf7b0ba0c0b71b9401a23a592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Thu, 24 Aug 2017 15:17:20 +0300 Subject: [PATCH] Create admin user files if they don't exist The default users are now inserted into the admin users files if no existing files are found. This removes the hard-coded checks for admin user names and simplifies the admin user logic. --- server/core/adminusers.cc | 39 ++++++++++++--------------------------- 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/server/core/adminusers.cc b/server/core/adminusers.cc index da7cf54fa..0de140af4 100644 --- a/server/core/adminusers.cc +++ b/server/core/adminusers.cc @@ -47,8 +47,15 @@ static const char INET_USERS_FILE_NAME[] = "passwd"; */ void admin_users_init() { - linux_users = load_linux_users(); - inet_users = load_inet_users(); + if ((linux_users = load_linux_users()) == NULL) + { + admin_enable_linux_account(DEFAULT_ADMIN_USER, USER_ACCOUNT_ADMIN); + } + + if ((inet_users = load_inet_users()) == NULL) + { + admin_add_inet_user(INET_DEFAULT_USERNAME, INET_DEFAULT_PASSWORD, USER_ACCOUNT_ADMIN); + } } static bool admin_dump_users(USERS* users, const char* fname) @@ -363,11 +370,7 @@ bool admin_linux_account_enabled(const char *uname) { bool rv = false; - if (!linux_users && strcmp(uname, DEFAULT_ADMIN_USER) == 0) - { - rv = true; - } - else if (linux_users) + if (linux_users) { rv = users_find(linux_users, uname); } @@ -459,14 +462,6 @@ admin_verify_inet_user(const char *username, const char *password) mxs_crypt(password, ADMIN_SALT, cpassword); rv = users_auth(inet_users, username, cpassword); } - else - { - if (strcmp(username, INET_DEFAULT_USERNAME) == 0 - && strcmp(password, INET_DEFAULT_PASSWORD) == 0) - { - rv = true; - } - } return rv; } @@ -479,10 +474,6 @@ bool admin_user_is_inet_admin(const char* username) { rval = users_is_admin(inet_users, username); } - else if (strcmp(INET_DEFAULT_USERNAME, username) == 0) - { - rval = true; - } return rval; } @@ -495,25 +486,19 @@ bool admin_user_is_unix_admin(const char* username) { rval = users_is_admin(linux_users, username); } - else if (strcmp(DEFAULT_ADMIN_USER, username) == 0) - { - rval = true; - } return rval; } bool admin_have_admin() { - return (inet_users && users_admin_count(inet_users) > 0) || - (linux_users && users_admin_count(linux_users) > 0); + return users_admin_count(inet_users) > 0 || users_admin_count(linux_users) > 0; } bool admin_is_last_admin(const char* user) { return (admin_user_is_inet_admin(user) || admin_user_is_unix_admin(user)) && - ((inet_users ? users_admin_count(inet_users) : 1) + - (linux_users ? users_admin_count(linux_users) : 1)) == 1; + (users_admin_count(inet_users) + users_admin_count(linux_users)) == 1; } /**