/** * Verify a username and password * * @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; 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; } struct crypt_data cdata; cdata.initialized = 0; if (strcmp(pw, crypt_r(password, ADMIN_SALT, &cdata)) == 0) { return 1; } } return 0; }
/** * Verify a username and password * * @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; 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; }
/** * Check for existance of the user * * @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; }
/** * 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 */ char * admin_add_user(char *uname, char *passwd) { FILE *fp; char fname[1024], *home, *cpasswd; initialise(); 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; } struct crypt_data cdata; cdata.initialized = 0; cpasswd = crypt_r(passwd, ADMIN_SALT, &cdata); 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; }
/** * 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 */ char * admin_add_user(char *uname, char *passwd) { FILE *fp; char fname[1024], *home, *cpasswd; initialise(); sprintf(fname, "%s/passwd", get_datadir()); if (users == NULL) { LOGIF(LM, (skygw_log_write(LOGFILE_MESSAGE, "Create initial password file."))); if ((users = users_alloc()) == NULL) return ADMIN_ERR_NOMEM; if ((fp = fopen(fname, "w")) == NULL) { LOGIF(LE, (skygw_log_write_flush( LOGFILE_ERROR, "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) { LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR, "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; }