if (red == 0)
break;
if (red < 0) {
- if (errno == EINTR)
+ if (errno == EINTR && !got_sigterm)
continue;
error("Can't read secret from %s: %m", promptprog);
readgood = -1;
}
readgood += red;
} while (readgood < MAXSECRETLEN - 1);
- passwd[readgood] = 0;
close(p[0]);
/* now wait for child to exit */
while (waitpid(kid, &wstat, 0) < 0) {
- if (errno != EINTR) {
+ if (errno != EINTR || got_sigterm) {
warn("error waiting for %s: %m", promptprog);
break;
}
if (readgood < 0)
return 0;
+ passwd[readgood] = 0;
if (!WIFEXITED(wstat))
warn("%s terminated abnormally", promptprog);
if (WEXITSTATUS(wstat))