[channels.c channels.h clientloop.c]
     try to fix agent-forwarding-backconnection-bug, as seen on HPUX,
     for example; with Lutz.Jaenicke@aet.TU-Cottbus.DE,
This commit is contained in:
Ben Lindstrom 2001-09-18 05:51:13 +00:00
parent 99a30f11c2
commit 944c4f0bda
4 changed files with 24 additions and 4 deletions

View File

@ -26,6 +26,10 @@
- markus@cvs.openbsd.org 2001/09/17 20:50:22
[key.c ssh-keygen.c]
better error handling if you try to export a bad key to ssh.com
- markus@cvs.openbsd.org 2001/09/17 20:52:47
[channels.c channels.h clientloop.c]
try to fix agent-forwarding-backconnection-bug, as seen on HPUX,
for example; with Lutz.Jaenicke@aet.TU-Cottbus.DE,
20010917
- (djm) x11-ssh-askpass-1.2.4 in RPM spec, revert workarounds
@ -6486,4 +6490,4 @@
- Wrote replacements for strlcpy and mkdtemp
- Released 1.0pre1
$Id: ChangeLog,v 1.1536 2001/09/18 05:49:14 mouring Exp $
$Id: ChangeLog,v 1.1537 2001/09/18 05:51:13 mouring Exp $

View File

@ -39,7 +39,7 @@
*/
#include "includes.h"
RCSID("$OpenBSD: channels.c,v 1.132 2001/07/17 21:04:56 markus Exp $");
RCSID("$OpenBSD: channels.c,v 1.133 2001/09/17 20:52:47 markus Exp $");
#include "ssh.h"
#include "ssh1.h"
@ -260,6 +260,7 @@ channel_new(char *ctype, int type, int rfd, int wfd, int efd,
c->cb_fn = NULL;
c->cb_arg = NULL;
c->cb_event = 0;
c->force_drain = 0;
c->detach_user = NULL;
c->input_filter = NULL;
debug("channel %d: new [%s]", found, remote_name);
@ -874,6 +875,9 @@ static void
channel_pre_x11_open(Channel *c, fd_set * readset, fd_set * writeset)
{
int ret = x11_open_helper(&c->output);
/* c->force_drain = 1; */
if (ret == 1) {
c->type = SSH_CHANNEL_OPEN;
if (compat20)
@ -1781,6 +1785,13 @@ channel_input_ieof(int type, int plen, void *ctxt)
if (c == NULL)
packet_disconnect("Received ieof for nonexistent channel %d.", id);
chan_rcvd_ieof(c);
/* XXX force input close */
if (c->force_drain) {
debug("channel %d: FORCE input drain", c->self);
c->istate = CHAN_INPUT_WAIT_DRAIN;
}
}
void
@ -2669,6 +2680,7 @@ x11_input_open(int type, int plen, void *ctxt)
close(sock);
} else {
c->remote_id = remote_id;
c->force_drain = 1;
}
}
if (c == NULL) {
@ -2931,6 +2943,7 @@ auth_input_open_request(int type, int plen, void *ctxt)
close(sock);
} else {
c->remote_id = remote_id;
c->force_drain = 1;
}
}
if (c == NULL) {

View File

@ -32,7 +32,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/* RCSID("$OpenBSD: channels.h,v 1.45 2001/07/17 21:04:57 markus Exp $"); */
/* RCSID("$OpenBSD: channels.h,v 1.46 2001/09/17 20:52:47 markus Exp $"); */
#ifndef CHANNEL_H
#define CHANNEL_H
@ -77,6 +77,7 @@ struct Channel {
int efd; /* extended fd */
int sock; /* sock fd */
int isatty; /* rfd is a tty */
int force_drain; /* force close on iEOF */
Buffer input; /* data read from socket, to be sent over
* encrypted connection */
Buffer output; /* data received over encrypted connection for

View File

@ -59,7 +59,7 @@
*/
#include "includes.h"
RCSID("$OpenBSD: clientloop.c,v 1.81 2001/07/17 21:04:57 markus Exp $");
RCSID("$OpenBSD: clientloop.c,v 1.82 2001/09/17 20:52:47 markus Exp $");
#include "ssh.h"
#include "ssh1.h"
@ -1111,6 +1111,7 @@ client_request_x11(const char *request_type, int rchan)
error("client_request_x11: channel_new failed");
close(sock);
}
c->force_drain = 1;
return c;
}
@ -1136,6 +1137,7 @@ client_request_agent(const char *request_type, int rchan)
error("client_request_agent: channel_new failed");
close(sock);
}
c->force_drain = 1;
return c;
}