* src/su.c, src/vipw.c, src/newgrp.c: When the child is

interrupted, stop ourself with a SIGSTOP signal.
This commit is contained in:
nekral-guest 2010-03-23 13:05:06 +00:00
parent 052e9105f7
commit fcd5b38caf
4 changed files with 10 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2010-03-23 Nicolas François <nicolas.francois@centraliens.net>
* src/su.c, src/vipw.c, src/newgrp.c: When the child is
interrupted, stop ourself with a SIGSTOP signal.
2010-03-23 Nicolas François <nicolas.francois@centraliens.net>
* src/newgrp.c: Limit the scope of variable pid.

View File

@ -322,8 +322,9 @@ static void syslog_sg (const char *name, const char *group)
errno = 0;
pid = waitpid (child, &cst, WUNTRACED);
if ((pid == child) && (WIFSTOPPED (cst) != 0)) {
/* stop when child stops */
kill (getpid (), WSTOPSIG(cst));
/* The child (shell) was suspended.
* Suspend sg/newgrp. */
kill (getpid (), SIGSTOP);
/* wake child when resumed */
kill (child, SIGCONT);
}

View File

@ -313,7 +313,7 @@ static void run_shell (const char *shellstr, char *args[], bool doshell,
if (((pid_t)-1 != pid) && (0 != WIFSTOPPED (status))) {
/* The child (shell) was suspended.
* Suspend su. */
kill (getpid (), WSTOPSIG(status));
kill (getpid (), SIGSTOP);
/* wake child when resumed */
kill (pid, SIGCONT);
}

View File

@ -310,7 +310,7 @@ vipwedit (const char *file, int (*file_lock) (void), int (*file_unlock) (void))
if ((pid != -1) && (WIFSTOPPED (status) != 0)) {
/* The child (editor) was suspended.
* Suspend vipw. */
kill (getpid (), WSTOPSIG (status));
kill (getpid (), SIGSTOP);
/* wake child when resumed */
kill (pid, SIGCONT);
} else {