summaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorMarkus Friedl <markus@cvs.openbsd.org>2001-02-23 15:37:46 +0000
committerMarkus Friedl <markus@cvs.openbsd.org>2001-02-23 15:37:46 +0000
commit2c67ede0ca78f09c66229bb2fe9631ae2686c823 (patch)
treede0001bdd643780e206a0166da18da5d4e9407ab /usr.bin
parenta6ad70a073877c2f66f9fae373ee9201e9d7849a (diff)
handle SSH_PROTOFLAG_SCREEN_NUMBER for buggy clients
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/ssh/session.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/usr.bin/ssh/session.c b/usr.bin/ssh/session.c
index a9b607db54f..632810fc751 100644
--- a/usr.bin/ssh/session.c
+++ b/usr.bin/ssh/session.c
@@ -33,7 +33,7 @@
*/
#include "includes.h"
-RCSID("$OpenBSD: session.c,v 1.56 2001/02/16 14:03:43 markus Exp $");
+RCSID("$OpenBSD: session.c,v 1.57 2001/02/23 15:37:45 markus Exp $");
#include "ssh.h"
#include "ssh1.h"
@@ -184,6 +184,7 @@ do_authenticated(struct passwd * pw)
int n_bytes;
int plen;
u_int proto_len, data_len, dlen;
+ int screen_flag;
/*
* Cancel the alarm we set to limit the time taken for
@@ -308,13 +309,18 @@ do_authenticated(struct passwd * pw)
s->auth_proto = packet_get_string(&proto_len);
s->auth_data = packet_get_string(&data_len);
- if (packet_get_protocol_flags() & SSH_PROTOFLAG_SCREEN_NUMBER) {
- debug2("SSH_PROTOFLAG_SCREEN_NUMBER == true");
+ screen_flag = packet_get_protocol_flags() &
+ SSH_PROTOFLAG_SCREEN_NUMBER;
+ debug2("SSH_PROTOFLAG_SCREEN_NUMBER: %d", screen_flag);
+
+ if (packet_remaining() == 4) {
+ if (!screen_flag)
+ debug2("Buggy client: "
+ "X11 screen flag missing");
packet_integrity_check(plen,
4 + proto_len + 4 + data_len + 4, type);
s->screen = packet_get_int();
} else {
- debug2("SSH_PROTOFLAG_SCREEN_NUMBER == false");
packet_integrity_check(plen,
4 + proto_len + 4 + data_len, type);
s->screen = 0;