Do not set SHELL to utmp ever
SHELL must be set to the SHELL of the user, but it was possible set it to utmp.dev
parent
86633ada91
commit
f9fb620914
20
st.c
20
st.c
|
@ -1146,7 +1146,7 @@ die(const char *errstr, ...) {
|
|||
|
||||
void
|
||||
execsh(void) {
|
||||
char **args, *sh;
|
||||
char **args, *sh, *prog;
|
||||
const struct passwd *pw;
|
||||
char buf[sizeof(long) * 8 + 1];
|
||||
|
||||
|
@ -1158,13 +1158,15 @@ execsh(void) {
|
|||
die("who are you?\n");
|
||||
}
|
||||
|
||||
if (utmp)
|
||||
sh = utmp;
|
||||
else if (pw->pw_shell[0])
|
||||
sh = pw->pw_shell;
|
||||
sh = (pw->pw_shell[0]) ? pw->pw_shell : shell;
|
||||
if(opt_cmd)
|
||||
prog = opt_cmd[0];
|
||||
else if(utmp)
|
||||
prog = utmp;
|
||||
else
|
||||
sh = shell;
|
||||
args = (opt_cmd) ? opt_cmd : (char *[]){sh, NULL};
|
||||
prog = sh;
|
||||
args = (opt_cmd) ? opt_cmd : (char *[]) {prog, NULL};
|
||||
|
||||
snprintf(buf, sizeof(buf), "%lu", xw.win);
|
||||
|
||||
unsetenv("COLUMNS");
|
||||
|
@ -1172,7 +1174,7 @@ execsh(void) {
|
|||
unsetenv("TERMCAP");
|
||||
setenv("LOGNAME", pw->pw_name, 1);
|
||||
setenv("USER", pw->pw_name, 1);
|
||||
setenv("SHELL", args[0], 1);
|
||||
setenv("SHELL", sh, 1);
|
||||
setenv("HOME", pw->pw_dir, 1);
|
||||
setenv("TERM", termname, 1);
|
||||
setenv("WINDOWID", buf, 1);
|
||||
|
@ -1184,7 +1186,7 @@ execsh(void) {
|
|||
signal(SIGTERM, SIG_DFL);
|
||||
signal(SIGALRM, SIG_DFL);
|
||||
|
||||
execvp(args[0], args);
|
||||
execvp(prog, args);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue