1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /* vim: tabstop=4 shiftwidth=4 noexpandtab
- * This file is part of ToaruOS and is released under the terms
- * of the NCSA / University of Illinois License - see LICENSE.md
- * Copyright (C) 2013-2018 K. Lange
- *
- * Authentication methods
- *
- */
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- #include <pwd.h>
- #ifndef fgetpwent
- extern struct passwd *fgetpwent(FILE *stream);
- #endif
- #define MASTER_PASSWD "/etc/master.passwd"
- int toaru_auth_check_pass(char * user, char * pass) {
- /* XXX DO something useful */
- /* 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, pass)) {
- fclose(master);
- return p->pw_uid;
- }
- }
- fclose(master);
- return -1;
- }
- void toaru_auth_set_vars(void) {
- int uid = getuid();
- struct passwd * p = getpwuid(uid);
- if (!p) {
- char tmp[10];
- sprintf(tmp, "%d", uid);
- setenv("USER", strdup(tmp), 1);
- setenv("HOME", "/", 1);
- setenv("SHELL", "/bin/sh", 1);
- } else {
- setenv("USER", strdup(p->pw_name), 1);
- setenv("HOME", strdup(p->pw_dir), 1);
- setenv("SHELL", strdup(p->pw_shell), 1);
- setenv("WM_THEME", strdup(p->pw_comment), 1);
- }
- endpwent();
- setenv("PATH", "/usr/bin:/bin", 0);
- chdir(getenv("HOME"));
- }
|