commit fe48b8a35b1ce2ff6de2275bc413d8e0e60eaf2f from: Martijn van Duren date: Fri Dec 18 20:43:25 2020 UTC Don't ignore signals, but make $EDITOR it's own process group commit - 3a96e431f52e0dc30405e20330aa6ac0f04790e3 commit + fe48b8a35b1ce2ff6de2275bc413d8e0e60eaf2f blob - 8133c3cfd7c7f834365b8c2b88095a93d5442580 blob + 1d3789e902b9ab1f3b7dd6c0ffece44888797b6b --- vias.c +++ vias.c @@ -358,7 +358,7 @@ main(int argc, char **argv) gid_t groups[NGROUPS_MAX + 1]; int ngroups; int i, ch; - int ofd, tfd; + int ofd, tfd, ttyfd; char cwdpath[PATH_MAX]; const char *cwd; char *login_style = NULL; @@ -426,19 +426,19 @@ main(int argc, char **argv) if (!(rule->options & NOPASS)) authuser(myname, login_style, rule->options & PERSIST); - if (pledge("stdio rpath wpath cpath exec proc id", NULL) == -1) + if (pledge("stdio rpath wpath cpath exec proc id tty", NULL) == -1) err(1, "pledge"); if ((setuid(uid)) == -1) err(1, "setuid failed"); - if (pledge("stdio rpath wpath cpath exec proc", NULL) == -1) + if (pledge("stdio rpath wpath cpath exec proc tty", NULL) == -1) err(1, "pledge"); if ((tfd = mkstemp(tmpfile)) == -1) err(1, "mkstemp failed"); - if (pledge("stdio rpath cpath exec proc", NULL) == -1) + if (pledge("stdio rpath cpath exec proc tty", NULL) == -1) err(1, "pledge"); if (!fcpy(tfd, ofd)) { @@ -451,7 +451,7 @@ main(int argc, char **argv) else cwd = cwdpath; - if (pledge("stdio cpath exec proc", NULL) == -1) + if (pledge("stdio cpath exec proc tty", NULL) == -1) err(1, "pledge"); syslog(LOG_AUTHPRIV | LOG_INFO, "%s edited %s from %s", @@ -481,10 +481,13 @@ main(int argc, char **argv) execvp(eargv[0], eargv); err(1, "execvp failed"); default: - if (pledge("stdio cpath", NULL) == -1) + if (pledge("stdio cpath proc tty", NULL) == -1) err(1, "pledge"); - (void) signal(SIGINT, SIG_IGN); + (void)setpgid(vipid, 0); + ttyfd = open("/dev/tty", O_RDWR); + if (ttyfd != -1) + (void)tcsetpgrp(ttyfd, vipid); while ((ret = waitpid(vipid, &status, 0)) == -1 && errno == EINTR) ;