diff options
author | Darren Tucker <dtucker@zip.com.au> | 2016-10-19 03:26:09 +1100 |
---|---|---|
committer | Darren Tucker <dtucker@zip.com.au> | 2016-10-19 03:26:09 +1100 |
commit | 8f866d8a57b9a2dc5dd04504e27f593b551618e3 (patch) | |
tree | 06f7dcbec815809281ebcca61c006644536f404b /openbsd-compat | |
parent | f901440cc844062c9bab0183d133f7ccc58ac3a5 (diff) |
Import readpassphrase.c rev 1.26.
Author: miller@openbsd.org:
Avoid generate SIGTTOU when restoring the terminal mode. If we get
SIGTTOU it means the process is not in the foreground process group
which, in most cases, means that the shell has taken control of the tty.
Requiring the user the fg the process in this case doesn't make sense
and can result in both SIGTSTP and SIGTTOU being sent which can lead to
the process being suspended again immediately after being brought into
the foreground.
Diffstat (limited to 'openbsd-compat')
-rw-r--r-- | openbsd-compat/readpassphrase.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/openbsd-compat/readpassphrase.c b/openbsd-compat/readpassphrase.c index 783cc9e67..24aed6e46 100644 --- a/openbsd-compat/readpassphrase.c +++ b/openbsd-compat/readpassphrase.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: readpassphrase.c,v 1.25 2015/09/14 10:45:27 guenther Exp $ */ | 1 | /* $OpenBSD: readpassphrase.c,v 1.26 2016/10/18 12:47:18 millert Exp $ */ |
2 | 2 | ||
3 | /* | 3 | /* |
4 | * Copyright (c) 2000-2002, 2007, 2010 | 4 | * Copyright (c) 2000-2002, 2007, 2010 |
@@ -157,9 +157,13 @@ restart: | |||
157 | 157 | ||
158 | /* Restore old terminal settings and signals. */ | 158 | /* Restore old terminal settings and signals. */ |
159 | if (memcmp(&term, &oterm, sizeof(term)) != 0) { | 159 | if (memcmp(&term, &oterm, sizeof(term)) != 0) { |
160 | const int sigttou = signo[SIGTTOU]; | ||
161 | |||
162 | /* Ignore SIGTTOU generated when we are not the fg pgrp. */ | ||
160 | while (tcsetattr(input, TCSAFLUSH|TCSASOFT, &oterm) == -1 && | 163 | while (tcsetattr(input, TCSAFLUSH|TCSASOFT, &oterm) == -1 && |
161 | errno == EINTR && !signo[SIGTTOU]) | 164 | errno == EINTR && !signo[SIGTTOU]) |
162 | continue; | 165 | continue; |
166 | signo[SIGTTOU] = sigttou; | ||
163 | } | 167 | } |
164 | (void)sigaction(SIGALRM, &savealrm, NULL); | 168 | (void)sigaction(SIGALRM, &savealrm, NULL); |
165 | (void)sigaction(SIGHUP, &savehup, NULL); | 169 | (void)sigaction(SIGHUP, &savehup, NULL); |