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 +++++++++++++++++++++++++++++++++++ lib/lib.h | 1 + 2 files changed, 36 insertions(+) (limited to 'lib') 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); +} diff --git a/lib/lib.h b/lib/lib.h index bdabd4a2..87f4150e 100644 --- a/lib/lib.h +++ b/lib/lib.h @@ -259,6 +259,7 @@ void do_lines(int fd, char delim, void (*call)(char **pline, long len)); long environ_bytes(); long long millitime(void); char *format_iso_time(char *buf, size_t len, struct timespec *ts); +void reset_env(struct passwd *p, int clear); #define HR_SPACE 1 // Space between number and units #define HR_B 2 // Use "B" for single byte units -- cgit v1.2.3