From f6e866293314ba24778d0c25303e205981ce3620 Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Mon, 30 Nov 2015 10:38:21 +0200 Subject: [PATCH] Reindent server/core/adminusers.c --- server/core/adminusers.c | 483 +++++++++++++++++++----------------- server/include/adminusers.h | 14 +- 2 files changed, 264 insertions(+), 233 deletions(-) diff --git a/server/core/adminusers.c b/server/core/adminusers.c index 310d741b7..eae77028f 100644 --- a/server/core/adminusers.c +++ b/server/core/adminusers.c @@ -37,24 +37,24 @@ * @verbatim * Revision History * - * Date Who Description - * 18/07/13 Mark Riddoch Initial implementation - * 23/07/13 Mark Riddoch Addition of error mechanism to add user + * Date Who Description + * 18/07/13 Mark Riddoch Initial implementation + * 23/07/13 Mark Riddoch Addition of error mechanism to add user * * @endverbatim */ -static USERS *loadUsers(); -static void initialise(); +static USERS *loadUsers(); +static void initialise(); -static USERS *users = NULL; -static int admin_init = 0; +static USERS *users = NULL; +static int admin_init = 0; -static char *ADMIN_ERR_NOMEM = "Out of memory"; -static char *ADMIN_ERR_FILEOPEN = "Unable to create password file"; -static char *ADMIN_ERR_DUPLICATE = "Duplicate username specified"; +static char *ADMIN_ERR_NOMEM = "Out of memory"; +static char *ADMIN_ERR_FILEOPEN = "Unable to create password file"; +static char *ADMIN_ERR_DUPLICATE = "Duplicate username specified"; static char *ADMIN_ERR_USERNOTFOUND = "User not found"; static char *ADMIN_ERR_AUTHENTICATION = "Authentication failed"; -static char *ADMIN_ERR_FILEAPPEND = "Unable to append to password file"; +static char *ADMIN_ERR_FILEAPPEND = "Unable to append to password file"; static char *ADMIN_ERR_PWDFILEOPEN = "Failed to open password file"; static char *ADMIN_ERR_TMPFILEOPEN = "Failed to open temporary password file"; static char *ADMIN_ERR_PWDFILEACCESS = "Failed to access password file"; @@ -69,38 +69,47 @@ static const int LINELEN=80; static void initialise() { - if (admin_init) - return; - admin_init = 1; - users = loadUsers(); + if (admin_init) + { + return; + } + + admin_init = 1; + users = loadUsers(); } /** * Verify a username and password * - * @param username Username to verify - * @param password Password to verify + * @param username Username to verify + * @param password Password to verify * @return Non-zero if the username/password combination is valid */ int admin_verify(char *username, char *password) { -char *pw; + char *pw; - initialise(); - if (users == NULL) - { - if (strcmp(username, "admin") == 0 && strcmp(password, "mariadb") == 0) - return 1; - } - else - { - if ((pw = users_fetch(users, username)) == NULL) - return 0; - if (strcmp(pw, crypt(password, ADMIN_SALT)) == 0) - return 1; - } - return 0; + initialise(); + if (users == NULL) + { + if (strcmp(username, "admin") == 0 && strcmp(password, "mariadb") == 0) + { + return 1; + } + } + else + { + if ((pw = users_fetch(users, username)) == NULL) + { + return 0; + } + if (strcmp(pw, crypt(password, ADMIN_SALT)) == 0) + { + return 1; + } + } + return 0; } @@ -109,223 +118,239 @@ char *pw; * * @return Table of users */ -static USERS * +static USERS * loadUsers() { -USERS *rval; -FILE *fp; -char fname[1024], *home; -char uname[80], passwd[80]; + USERS *rval; + FILE *fp; + char fname[1024], *home; + char uname[80], passwd[80]; - initialise(); + initialise(); snprintf(fname,1023, "%s/passwd", get_datadir()); fname[1023] = '\0'; - if ((fp = fopen(fname, "r")) == NULL) - return NULL; - if ((rval = users_alloc()) == NULL) - { - fclose(fp); - return NULL; - } - while (fscanf(fp, "%[^:]:%s\n", uname, passwd) == 2) - { - users_add(rval, uname, passwd); - } - fclose(fp); + if ((fp = fopen(fname, "r")) == NULL) + { + return NULL; + } + if ((rval = users_alloc()) == NULL) + { + fclose(fp); + return NULL; + } + while (fscanf(fp, "%[^:]:%s\n", uname, passwd) == 2) + { + users_add(rval, uname, passwd); + } + fclose(fp); - return rval; + return rval; } /** * Add user * - * @param uname Name of the new user - * @param passwd Password for the new user - * @return NULL on success or an error string on failure + * @param uname Name of the new user + * @param passwd Password for the new user + * @return NULL on success or an error string on failure */ char * admin_add_user(char *uname, char *passwd) { -FILE *fp; -char fname[1024], *home, *cpasswd; + FILE *fp; + char fname[1024], *home, *cpasswd; - initialise(); + initialise(); - if(access(get_datadir(), F_OK) != 0) - if(mkdir(get_datadir(), S_IRWXU) != 0 && errno != EEXIST) - return ADMIN_ERR_PWDFILEOPEN; + if (access(get_datadir(), F_OK) != 0) + { + if (mkdir(get_datadir(), S_IRWXU) != 0 && errno != EEXIST) + { + return ADMIN_ERR_PWDFILEOPEN; + } + } snprintf(fname,1023, "%s/passwd", get_datadir()); fname[1023] = '\0'; - if (users == NULL) - { - MXS_NOTICE("Create initial password file."); - - if ((users = users_alloc()) == NULL) - return ADMIN_ERR_NOMEM; - if ((fp = fopen(fname, "w")) == NULL) - { - MXS_ERROR("Unable to create password file %s.", fname); - return ADMIN_ERR_PWDFILEOPEN; - } - fclose(fp); - } - if (users_fetch(users, uname) != NULL) - { - return ADMIN_ERR_DUPLICATE; - } - cpasswd = crypt(passwd, ADMIN_SALT); - users_add(users, uname, cpasswd); - if ((fp = fopen(fname, "a")) == NULL) - { - MXS_ERROR("Unable to append to password file %s.", fname); - return ADMIN_ERR_FILEAPPEND; - } - fprintf(fp, "%s:%s\n", uname, cpasswd); - fclose(fp); - return ADMIN_SUCCESS; + if (users == NULL) + { + MXS_NOTICE("Create initial password file."); + + if ((users = users_alloc()) == NULL) + { + return ADMIN_ERR_NOMEM; + } + if ((fp = fopen(fname, "w")) == NULL) + { + MXS_ERROR("Unable to create password file %s.", fname); + return ADMIN_ERR_PWDFILEOPEN; + } + fclose(fp); + } + if (users_fetch(users, uname) != NULL) + { + return ADMIN_ERR_DUPLICATE; + } + cpasswd = crypt(passwd, ADMIN_SALT); + users_add(users, uname, cpasswd); + if ((fp = fopen(fname, "a")) == NULL) + { + MXS_ERROR("Unable to append to password file %s.", fname); + return ADMIN_ERR_FILEAPPEND; + } + fprintf(fp, "%s:%s\n", uname, cpasswd); + fclose(fp); + return ADMIN_SUCCESS; } /** * Remove maxscale user from in-memory structure and from password file * - * @param uname Name of the new user - * @param passwd Password for the new user - * @return NULL on success or an error string on failure + * @param uname Name of the new user + * @param passwd Password for the new user + * @return NULL on success or an error string on failure */ char* admin_remove_user( - char* uname, - char* passwd) + char* uname, + char* passwd) { - FILE* fp; - FILE* fp_tmp; - char fname[1024]; - char fname_tmp[1024]; - char* home; - char fusr[LINELEN]; - char fpwd[LINELEN]; - char line[LINELEN]; - fpos_t rpos; - int n_deleted; - - if (!admin_search_user(uname)) { - MXS_ERROR("Couldn't find user %s. Removing user failed.", uname); - return ADMIN_ERR_USERNOTFOUND; - } - - if (admin_verify(uname, passwd) == 0) { - MXS_ERROR("Authentication failed, wrong user/password " - "combination. Removing user failed."); - return ADMIN_ERR_AUTHENTICATION; - } + FILE* fp; + FILE* fp_tmp; + char fname[1024]; + char fname_tmp[1024]; + char* home; + char fusr[LINELEN]; + char fpwd[LINELEN]; + char line[LINELEN]; + fpos_t rpos; + int n_deleted; + + if (!admin_search_user(uname)) + { + MXS_ERROR("Couldn't find user %s. Removing user failed.", uname); + return ADMIN_ERR_USERNOTFOUND; + } + + if (admin_verify(uname, passwd) == 0) + { + MXS_ERROR("Authentication failed, wrong user/password " + "combination. Removing user failed."); + return ADMIN_ERR_AUTHENTICATION; + } - /** Remove user from in-memory structure */ - n_deleted = users_delete(users, uname); + /** Remove user from in-memory structure */ + n_deleted = users_delete(users, uname); - if (n_deleted == 0) { - MXS_ERROR("Deleting the only user is forbidden. Add new " - "user before deleting the one."); - return ADMIN_ERR_DELLASTUSER; - } - /** - * Open passwd file and remove user from the file. - */ - snprintf(fname,1023, "%s/passwd", get_datadir()); - snprintf(fname_tmp,1023, "%s/passwd_tmp", get_datadir()); - fname[1023] = '\0'; - fname_tmp[1023] = '\0'; - /** - * Rewrite passwd file from memory. - */ - if ((fp = fopen(fname, "r")) == NULL) - { - int err = errno; - MXS_ERROR("Unable to open password file %s : errno %d.\n" - "Removing user from file failed; it must be done " - "manually.", - fname, - err); - return ADMIN_ERR_PWDFILEOPEN; - } - /** - * Open temporary passwd file. - */ - if ((fp_tmp = fopen(fname_tmp, "w")) == NULL) - { - int err = errno; - MXS_ERROR("Unable to open tmp file %s : errno %d.\n" - "Removing user from passwd file failed; it must be done " - "manually.", - fname_tmp, - err); - fclose(fp); - return ADMIN_ERR_TMPFILEOPEN; - } - - /** - * Scan passwd and copy all but matching lines to temp file. - */ - if (fgetpos(fp, &rpos) != 0) { - int err = errno; - MXS_ERROR("Unable to process passwd file %s : errno %d.\n" - "Removing user from file failed, and must be done " - "manually.", - fname, - err); - fclose(fp); - fclose(fp_tmp); - unlink(fname_tmp); - return ADMIN_ERR_PWDFILEACCESS; - } - - while (fscanf(fp, "%[^:]:%s\n", fusr, fpwd) == 2) - { - /** - * Compare username what was found from passwd file. - * Unmatching lines are copied to tmp file. - */ - if (strncmp(uname, fusr, strlen(uname)+1) != 0) { - if(fsetpos(fp, &rpos) != 0){ /** one step back */ - MXS_ERROR("Unable to set stream position. "); - } - fgets(line, LINELEN, fp); - fputs(line, fp_tmp); - } - - if (fgetpos(fp, &rpos) != 0) { - int err = errno; - MXS_ERROR("Unable to process passwd file %s : " - "errno %d.\n" - "Removing user from file failed, and must be " - "done manually.", - fname, - err); - fclose(fp); - fclose(fp_tmp); - unlink(fname_tmp); - return ADMIN_ERR_PWDFILEACCESS; - } - } + if (n_deleted == 0) + { + MXS_ERROR("Deleting the only user is forbidden. Add new " + "user before deleting the one."); + return ADMIN_ERR_DELLASTUSER; + } + /** + * Open passwd file and remove user from the file. + */ + snprintf(fname, 1023, "%s/passwd", get_datadir()); + snprintf(fname_tmp, 1023, "%s/passwd_tmp", get_datadir()); + fname[1023] = '\0'; + fname_tmp[1023] = '\0'; + /** + * Rewrite passwd file from memory. + */ + if ((fp = fopen(fname, "r")) == NULL) + { + int err = errno; + MXS_ERROR("Unable to open password file %s : errno %d.\n" + "Removing user from file failed; it must be done " + "manually.", + fname, + err); + return ADMIN_ERR_PWDFILEOPEN; + } + /** + * Open temporary passwd file. + */ + if ((fp_tmp = fopen(fname_tmp, "w")) == NULL) + { + int err = errno; + MXS_ERROR("Unable to open tmp file %s : errno %d.\n" + "Removing user from passwd file failed; it must be done " + "manually.", + fname_tmp, + err); + fclose(fp); + return ADMIN_ERR_TMPFILEOPEN; + } + + /** + * Scan passwd and copy all but matching lines to temp file. + */ + if (fgetpos(fp, &rpos) != 0) + { + int err = errno; + MXS_ERROR("Unable to process passwd file %s : errno %d.\n" + "Removing user from file failed, and must be done " + "manually.", + fname, + err); fclose(fp); - /** - * Replace original passwd file with new. - */ - if (rename(fname_tmp, fname)) { - int err = errno; - MXS_ERROR("Unable to rename new passwd file %s : errno " - "%d.\n" - "Rename it to %s manually.", - fname_tmp, - err, - fname); - unlink(fname_tmp); - fclose(fp_tmp); - return ADMIN_ERR_PWDFILEACCESS; - } fclose(fp_tmp); - return ADMIN_SUCCESS; + unlink(fname_tmp); + return ADMIN_ERR_PWDFILEACCESS; + } + + while (fscanf(fp, "%[^:]:%s\n", fusr, fpwd) == 2) + { + /** + * Compare username what was found from passwd file. + * Unmatching lines are copied to tmp file. + */ + if (strncmp(uname, fusr, strlen(uname)+1) != 0) + { + if(fsetpos(fp, &rpos) != 0) + { /** one step back */ + MXS_ERROR("Unable to set stream position. "); + } + fgets(line, LINELEN, fp); + fputs(line, fp_tmp); + } + + if (fgetpos(fp, &rpos) != 0) + { + int err = errno; + MXS_ERROR("Unable to process passwd file %s : " + "errno %d.\n" + "Removing user from file failed, and must be " + "done manually.", + fname, + err); + fclose(fp); + fclose(fp_tmp); + unlink(fname_tmp); + return ADMIN_ERR_PWDFILEACCESS; + } + } + fclose(fp); + /** + * Replace original passwd file with new. + */ + if (rename(fname_tmp, fname)) + { + int err = errno; + MXS_ERROR("Unable to rename new passwd file %s : errno " + "%d.\n" + "Rename it to %s manually.", + fname_tmp, + err, + fname); + unlink(fname_tmp); + fclose(fp_tmp); + return ADMIN_ERR_PWDFILEACCESS; + } + fclose(fp_tmp); + return ADMIN_SUCCESS; } @@ -333,28 +358,34 @@ char* admin_remove_user( /** * Check for existance of the user * - * @param user The user name to test - * @return Non-zero if the user exists + * @param user The user name to test + * @return Non-zero if the user exists */ int admin_search_user(char *user) { - initialise(); - if (users == NULL) - return 0; - return users_fetch(users, user) != NULL; + initialise(); + if (users == NULL) + { + return 0; + } + return users_fetch(users, user) != NULL; } /** * Print the statistics and user names of the administration users * - * @param dcb A DCB to send the output to + * @param dcb A DCB to send the output to */ void dcb_PrintAdminUsers(DCB *dcb) { - if (users) - dcb_usersPrint(dcb, users); - else - dcb_printf(dcb, "No administration users have been defined.\n"); + if (users) + { + dcb_usersPrint(dcb, users); + } + else + { + dcb_printf(dcb, "No administration users have been defined.\n"); + } } diff --git a/server/include/adminusers.h b/server/include/adminusers.h index 4cc560e41..c4e3ec40a 100644 --- a/server/include/adminusers.h +++ b/server/include/adminusers.h @@ -24,19 +24,19 @@ * @verbatim * Revision History * - * Date Who Description - * 18/07/13 Mark Riddoch Initial implementation + * Date Who Description + * 18/07/13 Mark Riddoch Initial implementation * * @endverbatim */ #include -#define ADMIN_SALT "MS" +#define ADMIN_SALT "MS" -extern int admin_verify(char *, char *); -extern char *admin_add_user(char *, char *); -extern int admin_search_user(char *); -extern void dcb_PrintAdminUsers(DCB *dcb); +extern int admin_verify(char *, char *); +extern char *admin_add_user(char *, char *); +extern int admin_search_user(char *); +extern void dcb_PrintAdminUsers(DCB *dcb); char* admin_remove_user(char* uname, char* passwd);