From: simon Date: Mon, 27 Aug 2001 16:58:47 +0000 (+0000) Subject: Fix handling of SSH2_MSG_CHANNEL_CLOSE, which was breaking in port X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/commitdiff_plain/92f157bd6429ae0526d549db3e727c1ad824a319 Fix handling of SSH2_MSG_CHANNEL_CLOSE, which was breaking in port forwarding talking to ssh.com's ssh-3.0.1. git-svn-id: svn://svn.tartarus.org/sgt/putty@1216 cda61777-01e9-0310-a592-d414129be87e --- diff --git a/ssh.c b/ssh.c index 4856e630..efc28ef6 100644 --- a/ssh.c +++ b/ssh.c @@ -4729,22 +4729,29 @@ static void do_ssh2_authconn(unsigned char *in, int inlen, int ispkt) c = find234(ssh_channels, &i, ssh_channelfind); if (!c) continue; /* nonexistent channel */ - if (c->closes == 0) { - ssh2_pkt_init(SSH2_MSG_CHANNEL_CLOSE); - ssh2_pkt_adduint32(c->remoteid); - ssh2_pkt_send(); - } /* Do pre-close processing on the channel. */ switch (c->type) { case CHAN_MAINSESSION: break; /* nothing to see here, move along */ case CHAN_X11: + if (c->u.x11.s != NULL) + x11_close(c->u.x11.s); + sshfwd_close(c); break; case CHAN_AGENT: + sshfwd_close(c); break; case CHAN_SOCKDATA: + if (c->u.pfd.s != NULL) + pfd_close(c->u.pfd.s); + sshfwd_close(c); break; } + if (c->closes == 0) { + ssh2_pkt_init(SSH2_MSG_CHANNEL_CLOSE); + ssh2_pkt_adduint32(c->remoteid); + ssh2_pkt_send(); + } del234(ssh_channels, c); bufchain_clear(&c->v.v2.outbuffer); sfree(c);