version 1.23, 2001/11/08 10:51:08 |
version 1.24, 2001/12/21 08:53:45 |
|
|
pid_t pid; |
pid_t pid; |
size_t len; |
size_t len; |
char *pass; |
char *pass; |
int p[2], status; |
int p[2], status, ret; |
char buf[1024]; |
char buf[1024]; |
|
|
if (fflush(stdout) != 0) |
if (fflush(stdout) != 0) |
|
|
fatal("ssh_askpass: exec(%s): %s", askpass, strerror(errno)); |
fatal("ssh_askpass: exec(%s): %s", askpass, strerror(errno)); |
} |
} |
close(p[1]); |
close(p[1]); |
len = read(p[0], buf, sizeof buf -1); |
|
|
len = ret = 0; |
|
do { |
|
ret = read(p[0], buf + len, sizeof(buf) - 1 - len); |
|
if (ret == -1 && errno == EINTR) |
|
continue; |
|
if (ret <= 0) |
|
break; |
|
len += ret; |
|
} while (sizeof(buf) - 1 - len > 0); |
|
buf[len] = '\0'; |
|
|
close(p[0]); |
close(p[0]); |
while (waitpid(pid, &status, 0) < 0) |
while (waitpid(pid, &status, 0) < 0) |
if (errno != EINTR) |
if (errno != EINTR) |
break; |
break; |
if (len <= 1) |
|
return xstrdup(""); |
|
buf[len] = '\0'; |
|
buf[strcspn(buf, "\r\n")] = '\0'; |
buf[strcspn(buf, "\r\n")] = '\0'; |
pass = xstrdup(buf); |
pass = xstrdup(buf); |
memset(buf, 0, sizeof(buf)); |
memset(buf, 0, sizeof(buf)); |