int checkUserPass(char * user, char * pass) { /* Generate SHA512 */ char hash[SHA512_DIGEST_STRING_LENGTH]; SHA512_Data(pass, strlen(pass), hash); /* Open up /etc/master.passwd */ FILE * passwd = fopen("/etc/master.passwd", "r"); char line[2048]; while (fgets(line, 2048, passwd) != NULL) { line[strlen(line)-1] = '\0'; char *p, *tokens[4], *last; int i = 0; for ((p = strtok_r(line, ":", &last)); p; (p = strtok_r(NULL, ":", &last)), i++) { if (i < 511) tokens[i] = p; } tokens[i] = NULL; if (strcmp(tokens[0],user) != 0) { continue; } if (!strcmp(tokens[1],hash)) { fclose(passwd); return atoi(tokens[2]); } } fclose(passwd); return -1; }
int toaru_auth_check_pass(char * user, char * pass) { /* Generate SHA512 */ char hash[SHA512_DIGEST_STRING_LENGTH]; SHA512_Data(pass, strlen(pass), hash); /* Open up /etc/master.passwd */ FILE * master = fopen(MASTER_PASSWD, "r"); struct passwd * p; while ((p = fgetpwent(master))) { if (!strcmp(p->pw_name, user) && !strcmp(p->pw_passwd, hash)) { fclose(master); return p->pw_uid; } } fclose(master); return -1; }