all repos — st @ f9fb620914f7b1e2580a890f23b66e18762788b7

st (suckless terminal) config

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.
Roberto E. Vargas Caballero k0ga@shike2.com
commit

f9fb620914f7b1e2580a890f23b66e18762788b7

parent

86633ada91d1c7d8be1bf0398caff8a62fb1b805

1 files changed, 11 insertions(+), 9 deletions(-)

jump to
M st.cst.c

@@ -1146,7 +1146,7 @@ }

void execsh(void) { - char **args, *sh; + char **args, *sh, *prog; const struct passwd *pw; char buf[sizeof(long) * 8 + 1];

@@ -1158,13 +1158,15 @@ else

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 @@ unsetenv("LINES");

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 @@ signal(SIGQUIT, SIG_DFL);

signal(SIGTERM, SIG_DFL); signal(SIGALRM, SIG_DFL); - execvp(args[0], args); + execvp(prog, args); exit(EXIT_FAILURE); }