version 1.53, 2019/01/19 04:15:56 |
version 1.54, 2019/06/28 13:35:04 |
|
|
error("ssh_askpass: fflush: %s", strerror(errno)); |
error("ssh_askpass: fflush: %s", strerror(errno)); |
if (askpass == NULL) |
if (askpass == NULL) |
fatal("internal error: askpass undefined"); |
fatal("internal error: askpass undefined"); |
if (pipe(p) < 0) { |
if (pipe(p) == -1) { |
error("ssh_askpass: pipe: %s", strerror(errno)); |
error("ssh_askpass: pipe: %s", strerror(errno)); |
return NULL; |
return NULL; |
} |
} |
osigchld = signal(SIGCHLD, SIG_DFL); |
osigchld = signal(SIGCHLD, SIG_DFL); |
if ((pid = fork()) < 0) { |
if ((pid = fork()) == -1) { |
error("ssh_askpass: fork: %s", strerror(errno)); |
error("ssh_askpass: fork: %s", strerror(errno)); |
signal(SIGCHLD, osigchld); |
signal(SIGCHLD, osigchld); |
return NULL; |
return NULL; |
} |
} |
if (pid == 0) { |
if (pid == 0) { |
close(p[0]); |
close(p[0]); |
if (dup2(p[1], STDOUT_FILENO) < 0) |
if (dup2(p[1], STDOUT_FILENO) == -1) |
fatal("ssh_askpass: dup2: %s", strerror(errno)); |
fatal("ssh_askpass: dup2: %s", strerror(errno)); |
execlp(askpass, askpass, msg, (char *)NULL); |
execlp(askpass, askpass, msg, (char *)NULL); |
fatal("ssh_askpass: exec(%s): %s", askpass, strerror(errno)); |
fatal("ssh_askpass: exec(%s): %s", askpass, strerror(errno)); |
|
|
buf[len] = '\0'; |
buf[len] = '\0'; |
|
|
close(p[0]); |
close(p[0]); |
while ((ret = waitpid(pid, &status, 0)) < 0) |
while ((ret = waitpid(pid, &status, 0)) == -1) |
if (errno != EINTR) |
if (errno != EINTR) |
break; |
break; |
signal(SIGCHLD, osigchld); |
signal(SIGCHLD, osigchld); |