From 93594b1197cf3ae1835eedebbebb2b40ea2a81f7 Mon Sep 17 00:00:00 2001 From: Martin Lewis Date: Thu, 4 Apr 2019 13:29:32 +0200 Subject: [PATCH] telnetd: Added support for AYT IAC command. Fixed a TODO in AYT IAC handling by replying back with a NOP. Signed-off-by: Martin Lewis Signed-off-by: Denys Vlasenko --- networking/telnetd.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/networking/telnetd.c b/networking/telnetd.c index caef15181..bd60c8681 100644 --- a/networking/telnetd.c +++ b/networking/telnetd.c @@ -249,7 +249,7 @@ safe_write_to_pty_decode_iac(struct tsession *ts) * IAC SE (240) End of subnegotiation. Treated as NOP. * IAC NOP (241) NOP. Supported. * IAC BRK (243) Break. Like serial line break. TODO via tcsendbreak()? - * IAC AYT (246) Are you there. Send back evidence that AYT was seen. TODO (send NOP back)? + * IAC AYT (246) Are you there. * These don't look useful: * IAC DM (242) Data mark. What is this? * IAC IP (244) Suspend, interrupt or abort the process. (Ancient cousin of ^C). @@ -277,6 +277,13 @@ safe_write_to_pty_decode_iac(struct tsession *ts) rc = 2; goto update_and_return; } + if (buf[1] == AYT) { + /* Send back evidence that AYT was seen. */ + buf[1] = NOP; + /*rc =*/ safe_write(ts->sockfd_write, buf, 2); + rc = 2; + goto update_and_return; + } if (buf[1] >= 240 && buf[1] <= 249) { /* NOP (241). Ignore (putty keepalive, etc) */ /* All other 2-byte commands also treated as NOPs here */