summaryrefslogtreecommitdiff
path: root/ttymodes.c
diff options
context:
space:
mode:
Diffstat (limited to 'ttymodes.c')
-rw-r--r--ttymodes.c125
1 files changed, 33 insertions, 92 deletions
diff --git a/ttymodes.c b/ttymodes.c
index db772c39c743..8451396353c9 100644
--- a/ttymodes.c
+++ b/ttymodes.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ttymodes.c,v 1.30 2016/05/04 14:22:33 markus Exp $ */
+/* $OpenBSD: ttymodes.c,v 1.32 2017/04/30 23:26:54 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -59,12 +59,10 @@
#define TTY_OP_END 0
/*
- * uint32 (u_int) follows speed in SSH1 and SSH2
+ * uint32 (u_int) follows speed.
*/
-#define TTY_OP_ISPEED_PROTO1 192
-#define TTY_OP_OSPEED_PROTO1 193
-#define TTY_OP_ISPEED_PROTO2 128
-#define TTY_OP_OSPEED_PROTO2 129
+#define TTY_OP_ISPEED 128
+#define TTY_OP_OSPEED 129
/*
* Converts POSIX speed_t to a baud rate. The values of the
@@ -282,19 +280,8 @@ tty_make_modes(int fd, struct termios *tiop)
struct termios tio;
int baud;
Buffer buf;
- int tty_op_ospeed, tty_op_ispeed;
- void (*put_arg)(Buffer *, u_int);
buffer_init(&buf);
- if (compat20) {
- tty_op_ospeed = TTY_OP_OSPEED_PROTO2;
- tty_op_ispeed = TTY_OP_ISPEED_PROTO2;
- put_arg = buffer_put_int;
- } else {
- tty_op_ospeed = TTY_OP_OSPEED_PROTO1;
- tty_op_ispeed = TTY_OP_ISPEED_PROTO1;
- put_arg = (void (*)(Buffer *, u_int)) buffer_put_char;
- }
if (tiop == NULL) {
if (fd == -1) {
@@ -310,20 +297,20 @@ tty_make_modes(int fd, struct termios *tiop)
/* Store input and output baud rates. */
baud = speed_to_baud(cfgetospeed(&tio));
- buffer_put_char(&buf, tty_op_ospeed);
+ buffer_put_char(&buf, TTY_OP_OSPEED);
buffer_put_int(&buf, baud);
baud = speed_to_baud(cfgetispeed(&tio));
- buffer_put_char(&buf, tty_op_ispeed);
+ buffer_put_char(&buf, TTY_OP_ISPEED);
buffer_put_int(&buf, baud);
/* Store values of mode flags. */
#define TTYCHAR(NAME, OP) \
buffer_put_char(&buf, OP); \
- put_arg(&buf, special_char_encode(tio.c_cc[NAME]));
+ buffer_put_int(&buf, special_char_encode(tio.c_cc[NAME]));
#define TTYMODE(NAME, FIELD, OP) \
buffer_put_char(&buf, OP); \
- put_arg(&buf, ((tio.FIELD & NAME) != 0));
+ buffer_put_int(&buf, ((tio.FIELD & NAME) != 0));
#include "ttymodes.h"
@@ -333,10 +320,7 @@ tty_make_modes(int fd, struct termios *tiop)
end:
/* Mark end of mode data. */
buffer_put_char(&buf, TTY_OP_END);
- if (compat20)
- packet_put_string(buffer_ptr(&buf), buffer_len(&buf));
- else
- packet_put_raw(buffer_ptr(&buf), buffer_len(&buf));
+ packet_put_string(buffer_ptr(&buf), buffer_len(&buf));
buffer_free(&buf);
}
@@ -351,19 +335,10 @@ tty_parse_modes(int fd, int *n_bytes_ptr)
int opcode, baud;
int n_bytes = 0;
int failure = 0;
- u_int (*get_arg)(void);
- int arg_size;
-
- if (compat20) {
- *n_bytes_ptr = packet_get_int();
- if (*n_bytes_ptr == 0)
- return;
- get_arg = packet_get_int;
- arg_size = 4;
- } else {
- get_arg = packet_get_char;
- arg_size = 1;
- }
+
+ *n_bytes_ptr = packet_get_int();
+ if (*n_bytes_ptr == 0)
+ return;
/*
* Get old attributes for the terminal. We will modify these
@@ -382,9 +357,7 @@ tty_parse_modes(int fd, int *n_bytes_ptr)
case TTY_OP_END:
goto set;
- /* XXX: future conflict possible */
- case TTY_OP_ISPEED_PROTO1:
- case TTY_OP_ISPEED_PROTO2:
+ case TTY_OP_ISPEED:
n_bytes += 4;
baud = packet_get_int();
if (failure != -1 &&
@@ -392,9 +365,7 @@ tty_parse_modes(int fd, int *n_bytes_ptr)
error("cfsetispeed failed for %d", baud);
break;
- /* XXX: future conflict possible */
- case TTY_OP_OSPEED_PROTO1:
- case TTY_OP_OSPEED_PROTO2:
+ case TTY_OP_OSPEED:
n_bytes += 4;
baud = packet_get_int();
if (failure != -1 &&
@@ -404,13 +375,13 @@ tty_parse_modes(int fd, int *n_bytes_ptr)
#define TTYCHAR(NAME, OP) \
case OP: \
- n_bytes += arg_size; \
- tio.c_cc[NAME] = special_char_decode(get_arg()); \
+ n_bytes += 4; \
+ tio.c_cc[NAME] = special_char_decode(packet_get_int()); \
break;
#define TTYMODE(NAME, FIELD, OP) \
case OP: \
- n_bytes += arg_size; \
- if (get_arg()) \
+ n_bytes += 4; \
+ if (packet_get_int()) \
tio.FIELD |= NAME; \
else \
tio.FIELD &= ~NAME; \
@@ -424,51 +395,21 @@ tty_parse_modes(int fd, int *n_bytes_ptr)
default:
debug("Ignoring unsupported tty mode opcode %d (0x%x)",
opcode, opcode);
- if (!compat20) {
- /*
- * SSH1:
- * Opcodes 1 to 127 are defined to have
- * a one-byte argument.
- * Opcodes 128 to 159 are defined to have
- * an integer argument.
- */
- if (opcode > 0 && opcode < 128) {
- n_bytes += 1;
- (void) packet_get_char();
- break;
- } else if (opcode >= 128 && opcode < 160) {
- n_bytes += 4;
- (void) packet_get_int();
- break;
- } else {
- /*
- * It is a truly undefined opcode (160 to 255).
- * We have no idea about its arguments. So we
- * must stop parsing. Note that some data
- * may be left in the packet; hopefully there
- * is nothing more coming after the mode data.
- */
- logit("parse_tty_modes: unknown opcode %d",
- opcode);
- goto set;
- }
+ /*
+ * SSH2:
+ * Opcodes 1 to 159 are defined to have a uint32
+ * argument.
+ * Opcodes 160 to 255 are undefined and cause parsing
+ * to stop.
+ */
+ if (opcode > 0 && opcode < 160) {
+ n_bytes += 4;
+ (void) packet_get_int();
+ break;
} else {
- /*
- * SSH2:
- * Opcodes 1 to 159 are defined to have
- * a uint32 argument.
- * Opcodes 160 to 255 are undefined and
- * cause parsing to stop.
- */
- if (opcode > 0 && opcode < 160) {
- n_bytes += 4;
- (void) packet_get_int();
- break;
- } else {
- logit("parse_tty_modes: unknown opcode %d",
- opcode);
- goto set;
- }
+ logit("parse_tty_modes: unknown opcode %d",
+ opcode);
+ goto set;
}
}
}