--- st.c | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/st.c b/st.c index 197dd79..46db942 100644 --- a/st.c +++ b/st.c _AT_@ -5,6 +5,7 @@ #include <fcntl.h> #include <limits.h> #include <locale.h> +#include <pwd.h> #include <stdarg.h> #include <stdbool.h> #include <stdio.h> _AT_@ -261,6 +262,7 @@ static void die(const char *, ...); static void draw(void); static void redraw(void); static void drawregion(int, int, int, int); +static void initenv(void); static void execsh(void); static void sigchld(int); static void run(void); _AT_@ -881,10 +883,6 @@ execsh(void) { char **args; char *envshell = getenv("SHELL"); - unsetenv("COLUMNS"); - unsetenv("LINES"); - unsetenv("TERMCAP"); - signal(SIGCHLD, SIG_DFL); signal(SIGHUP, SIG_DFL); signal(SIGINT, SIG_DFL); _AT_@ -893,7 +891,6 @@ execsh(void) { signal(SIGALRM, SIG_DFL); DEFAULT(envshell, SHELL); - putenv("TERM="TNAME); args = opt_cmd ? opt_cmd : (char*[]){envshell, "-i", NULL}; execvp(args[0], args); exit(EXIT_FAILURE); _AT_@ -914,6 +911,35 @@ sigchld(int a) { } void +initenv(void) { + const struct passwd *pass = getpwuid(getuid()); + char buff[sizeof(long) * 8]; + + if(!pass) + die("Process is running with an incorrect uid\n"); + + unsetenv("COLUMNS"); + unsetenv("LINES"); + unsetenv("TERMCAP"); + /* + * We assume the first input in passwd with this uid + * is the correct. If you have more of one user with the same + * uid you suck a lot. + */ + setenv("LOGNAME", pass->pw_name, 1); + setenv("USER", pass->pw_name, 1); + setenv("SHELL", pass->pw_shell, 0); + setenv("HOME", pass->pw_dir, 0); + putenv("TERM=" TNAME); + /* + * we can be sure that DISPLAY is correct because we don't have + * a -diplay option + */ + sprintf(buff, "%lu", xw.win); + setenv("WINDOWID", buff, 1); +} + +void ttynew(void) { int m, s; struct winsize w = {term.row, term.col, 0, 0}; _AT_@ -935,6 +961,7 @@ ttynew(void) { die("ioctl TIOCSCTTY failed: %s\n", SERRNO); close(s); close(m); + initenv(); execsh(); break; default: -- 1.7.10.4 --Fba/0zbH8Xs+Fj9o Content-Type: text/x-diff; charset=utf-8 Content-Disposition: attachment; filename="0002-Add-utmp-stuff.patch"Received on Mon Sep 17 2001 - 00:00:00 CEST
This archive was generated by hypermail 2.3.0 : Tue Oct 09 2012 - 19:12:02 CEST