auth.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /* vim: tabstop=4 shiftwidth=4 noexpandtab
  2. * This file is part of ToaruOS and is released under the terms
  3. * of the NCSA / University of Illinois License - see LICENSE.md
  4. * Copyright (C) 2013-2018 K. Lange
  5. *
  6. * Authentication methods
  7. *
  8. */
  9. #include <stdlib.h>
  10. #include <stdio.h>
  11. #include <string.h>
  12. #include <unistd.h>
  13. #include <pwd.h>
  14. #ifndef fgetpwent
  15. extern struct passwd *fgetpwent(FILE *stream);
  16. #endif
  17. #define MASTER_PASSWD "/etc/master.passwd"
  18. int toaru_auth_check_pass(char * user, char * pass) {
  19. /* XXX DO something useful */
  20. /* Open up /etc/master.passwd */
  21. FILE * master = fopen(MASTER_PASSWD, "r");
  22. struct passwd * p;
  23. while ((p = fgetpwent(master))) {
  24. if (!strcmp(p->pw_name, user) && !strcmp(p->pw_passwd, pass)) {
  25. fclose(master);
  26. return p->pw_uid;
  27. }
  28. }
  29. fclose(master);
  30. return -1;
  31. }
  32. void toaru_auth_set_vars(void) {
  33. int uid = getuid();
  34. struct passwd * p = getpwuid(uid);
  35. if (!p) {
  36. char tmp[10];
  37. sprintf(tmp, "%d", uid);
  38. setenv("USER", strdup(tmp), 1);
  39. setenv("HOME", "/", 1);
  40. setenv("SHELL", "/bin/sh", 1);
  41. } else {
  42. setenv("USER", strdup(p->pw_name), 1);
  43. setenv("HOME", strdup(p->pw_dir), 1);
  44. setenv("SHELL", strdup(p->pw_shell), 1);
  45. setenv("WM_THEME", strdup(p->pw_comment), 1);
  46. }
  47. endpwent();
  48. setenv("PATH", "/usr/bin:/bin", 0);
  49. chdir(getenv("HOME"));
  50. }