version 1.102, 2002/05/25 08:50:39 |
version 1.103, 2002/05/31 10:30:33 |
|
|
Buffer b; |
Buffer b; |
struct stat st; |
struct stat st; |
pid_t pid; |
pid_t pid; |
int to[2], from[2], status, version = 1; |
int to[2], from[2], status, version = 2; |
|
|
debug("ssh_keysign called"); |
debug("ssh_keysign called"); |
|
|
|
|
close(to[1]); |
close(to[1]); |
if (dup2(to[0], STDIN_FILENO) < 0) |
if (dup2(to[0], STDIN_FILENO) < 0) |
fatal("ssh_keysign: dup2: %s", strerror(errno)); |
fatal("ssh_keysign: dup2: %s", strerror(errno)); |
|
close(from[1]); |
|
close(to[0]); |
execl(_PATH_SSH_KEY_SIGN, _PATH_SSH_KEY_SIGN, (char *) 0); |
execl(_PATH_SSH_KEY_SIGN, _PATH_SSH_KEY_SIGN, (char *) 0); |
fatal("ssh_keysign: exec(%s): %s", _PATH_SSH_KEY_SIGN, |
fatal("ssh_keysign: exec(%s): %s", _PATH_SSH_KEY_SIGN, |
strerror(errno)); |
strerror(errno)); |
|
|
close(to[0]); |
close(to[0]); |
|
|
buffer_init(&b); |
buffer_init(&b); |
|
buffer_put_int(&b, packet_get_connection_in()); /* send # of socket */ |
buffer_put_string(&b, data, datalen); |
buffer_put_string(&b, data, datalen); |
msg_send(to[1], version, &b); |
msg_send(to[1], version, &b); |
|
|
|
|
close(from[0]); |
close(from[0]); |
close(to[1]); |
close(to[1]); |
|
|
while (waitpid(pid, &status, 0) < 0) |
while (waitpid(pid, &status, 0) < 0) |
if (errno != EINTR) |
if (errno != EINTR) |
break; |
break; |
|
|
if (buffer_get_char(&b) != version) { |
if (buffer_get_char(&b) != version) { |
error("ssh_keysign: bad version"); |
error("ssh_keysign: bad version"); |