From e191597e6bbf03e920e1b42f44ac65faaddedf51 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Thu, 7 Mar 2019 21:04:25 -0600 Subject: Add reset_env() and make su and login use it. Do long-delayed login cleanup. --- lib/lib.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'lib/lib.c') diff --git a/lib/lib.c b/lib/lib.c index 54bfc8c4..d1210f49 100644 --- a/lib/lib.c +++ b/lib/lib.c @@ -122,6 +122,7 @@ ssize_t readall(int fd, void *buf, size_t len) ssize_t writeall(int fd, void *buf, size_t len) { size_t count = 0; + while (countpw_dir)) { + perror_msg("chdir %s", p->pw_dir); + xchdir("/"); + } + } else { + char **ev1, **ev2; + + // remove LD_*, IFS, ENV, and BASH_ENV from environment + for (ev1 = ev2 = environ;;) { + while (*ev2 && (strstart(ev2, "LD_") || strstart(ev2, "IFS=") || + strstart(ev2, "ENV=") || strstart(ev2, "BASH_ENV="))) ev2++; + if (!(*ev1++ = *ev2++)) break; + } + } + + setenv("PATH", _PATH_DEFPATH, 1); + setenv("HOME", p->pw_dir, 1); + setenv("SHELL", p->pw_shell, 1); + setenv("USER", p->pw_name, 1); + setenv("LOGNAME", p->pw_name, 1); +} -- cgit v1.2.3