version 1.133, 2021/11/14 06:15:36 |
version 1.134, 2021/11/18 03:06:03 |
|
|
} |
} |
|
|
/* copy stdin to iqueue */ |
/* copy stdin to iqueue */ |
if (pfd[0].revents & POLLIN) { |
if (pfd[0].revents & (POLLIN|POLLHUP)) { |
len = read(in, buf, sizeof buf); |
len = read(in, buf, sizeof buf); |
if (len == 0) { |
if (len == 0) { |
debug("read eof"); |
debug("read eof"); |
sftp_server_cleanup_exit(0); |
sftp_server_cleanup_exit(0); |
} else if (len == -1) { |
} else if (len == -1) { |
error("read: %s", strerror(errno)); |
if (errno != EAGAIN && errno != EINTR) { |
sftp_server_cleanup_exit(1); |
error("read: %s", strerror(errno)); |
|
sftp_server_cleanup_exit(1); |
|
} |
} else if ((r = sshbuf_put(iqueue, buf, len)) != 0) |
} else if ((r = sshbuf_put(iqueue, buf, len)) != 0) |
fatal_fr(r, "sshbuf_put"); |
fatal_fr(r, "sshbuf_put"); |
} |
} |
/* send oqueue to stdout */ |
/* send oqueue to stdout */ |
if (pfd[1].revents & POLLOUT) { |
if (pfd[1].revents & (POLLOUT|POLLHUP)) { |
len = write(out, sshbuf_ptr(oqueue), olen); |
len = write(out, sshbuf_ptr(oqueue), olen); |
if (len == -1) { |
if (len == 0 || (len == -1 && errno == EPIPE)) { |
error("write: %s", strerror(errno)); |
debug("write eof"); |
|
sftp_server_cleanup_exit(0); |
|
} else if (len == -1) { |
sftp_server_cleanup_exit(1); |
sftp_server_cleanup_exit(1); |
|
if (errno != EAGAIN && errno != EINTR) { |
|
error("write: %s", strerror(errno)); |
|
sftp_server_cleanup_exit(1); |
|
} |
} else if ((r = sshbuf_consume(oqueue, len)) != 0) |
} else if ((r = sshbuf_consume(oqueue, len)) != 0) |
fatal_fr(r, "consume"); |
fatal_fr(r, "consume"); |
} |
} |