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.
This commit is contained in:
Markus Mäkelä
2017-08-24 15:17:20 +03:00
parent 0e89e445f2
commit c2a9c4bfc1

View File

@ -47,8 +47,15 @@ static const char INET_USERS_FILE_NAME[] = "passwd";
*/ */
void admin_users_init() void admin_users_init()
{ {
linux_users = load_linux_users(); if ((linux_users = load_linux_users()) == NULL)
inet_users = load_inet_users(); {
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) 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; bool rv = false;
if (!linux_users && strcmp(uname, DEFAULT_ADMIN_USER) == 0) if (linux_users)
{
rv = true;
}
else if (linux_users)
{ {
rv = users_find(linux_users, uname); 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); mxs_crypt(password, ADMIN_SALT, cpassword);
rv = users_auth(inet_users, username, 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; return rv;
} }
@ -479,10 +474,6 @@ bool admin_user_is_inet_admin(const char* username)
{ {
rval = users_is_admin(inet_users, username); rval = users_is_admin(inet_users, username);
} }
else if (strcmp(INET_DEFAULT_USERNAME, username) == 0)
{
rval = true;
}
return rval; return rval;
} }
@ -495,25 +486,19 @@ bool admin_user_is_unix_admin(const char* username)
{ {
rval = users_is_admin(linux_users, username); rval = users_is_admin(linux_users, username);
} }
else if (strcmp(DEFAULT_ADMIN_USER, username) == 0)
{
rval = true;
}
return rval; return rval;
} }
bool admin_have_admin() bool admin_have_admin()
{ {
return (inet_users && users_admin_count(inet_users) > 0) || return users_admin_count(inet_users) > 0 || users_admin_count(linux_users) > 0;
(linux_users && users_admin_count(linux_users) > 0);
} }
bool admin_is_last_admin(const char* user) bool admin_is_last_admin(const char* user)
{ {
return (admin_user_is_inet_admin(user) || admin_user_is_unix_admin(user)) && return (admin_user_is_inet_admin(user) || admin_user_is_unix_admin(user)) &&
((inet_users ? users_admin_count(inet_users) : 1) + (users_admin_count(inet_users) + users_admin_count(linux_users)) == 1;
(linux_users ? users_admin_count(linux_users) : 1)) == 1;
} }
/** /**