Mercurial > dropbear
diff common-channel.c @ 1829:a7cc3332d8ab
Replace ChanType.sepfds with Channel.bidir_fd
This handles the case where a svrchansess has separate FDs
for nopty, but a single FD for pty mode.
The use of sepfds was also previously incorrect for X11 and
agent forwarding
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Mon, 11 Oct 2021 15:42:14 +0800 |
parents | 3f0ac6bc58a1 |
children | 90ac15aeac43 |
line wrap: on
line diff
--- a/common-channel.c Mon Oct 11 15:16:54 2021 +0800 +++ b/common-channel.c Mon Oct 11 15:42:14 2021 +0800 @@ -339,6 +339,7 @@ if (result == DROPBEAR_SUCCESS) { channel->readfd = channel->writefd = sock; + channel->bidir_fd = 1; channel->conn_pending = NULL; send_msg_channel_open_confirmation(channel, channel->recvwindow, channel->recvmaxpacket); @@ -1039,7 +1040,7 @@ int closein = 0, closeout = 0; - if (channel->type->sepfds) { + if (channel->bidir_fd) { TRACE(("SHUTDOWN(%d, %d)", fd, how)) shutdown(fd, how); if (how == 0) { @@ -1069,7 +1070,7 @@ /* if we called shutdown on it and all references are gone, then we * need to close() it to stop it lingering */ - if (channel->type->sepfds && channel->readfd == FD_CLOSED + if (channel->bidir_fd && channel->readfd == FD_CLOSED && channel->writefd == FD_CLOSED && channel->errfd == FD_CLOSED) { TRACE(("CLOSE (finally) of %d", fd)) m_close(fd); @@ -1102,6 +1103,7 @@ chan->writefd = chan->readfd = fd; ses.maxfd = MAX(ses.maxfd, fd); + chan->bidir_fd = 1; chan->await_open = 1;