summaryrefslogtreecommitdiffstats
path: root/libexec/telnetd/termstat.c
diff options
context:
space:
mode:
authordg <dg@FreeBSD.org>1995-06-17 05:50:47 +0000
committerdg <dg@FreeBSD.org>1995-06-17 05:50:47 +0000
commit1c7c56a93b2ee67dd860c2b2c4f4b9a918a538de (patch)
tree5280aab064984dac3b5a35e4cb900cc8a49f1917 /libexec/telnetd/termstat.c
parent0ddcef0978c695d92c556ad8e96d7a1bbd7c3dc2 (diff)
downloadFreeBSD-src-1c7c56a93b2ee67dd860c2b2c4f4b9a918a538de.zip
FreeBSD-src-1c7c56a93b2ee67dd860c2b2c4f4b9a918a538de.tar.gz
The final negotiation of DO_BINARY in the LINEMODE portion of the telnetd code
causes some clients that do not support linemode to mis-interpret the return key (i.e. double returns). The fix is to only do the state check for binary options if linemode will be used. Closes PR#505. Submitted by: Charles Henrich
Diffstat (limited to 'libexec/telnetd/termstat.c')
-rw-r--r--libexec/telnetd/termstat.c47
1 files changed, 28 insertions, 19 deletions
diff --git a/libexec/telnetd/termstat.c b/libexec/telnetd/termstat.c
index 3fde25a..b08e50f 100644
--- a/libexec/telnetd/termstat.c
+++ b/libexec/telnetd/termstat.c
@@ -144,25 +144,6 @@ localstat()
#endif /* defined(CRAY2) && defined(UNICOS5) */
/*
- * Check for state of BINARY options.
- */
- if (tty_isbinaryin()) {
- if (his_want_state_is_wont(TELOPT_BINARY))
- send_do(TELOPT_BINARY, 1);
- } else {
- if (his_want_state_is_will(TELOPT_BINARY))
- send_dont(TELOPT_BINARY, 1);
- }
-
- if (tty_isbinaryout()) {
- if (my_want_state_is_wont(TELOPT_BINARY))
- send_will(TELOPT_BINARY, 1);
- } else {
- if (my_want_state_is_will(TELOPT_BINARY))
- send_wont(TELOPT_BINARY, 1);
- }
-
- /*
* Check for changes to flow control if client supports it.
*/
flowstat();
@@ -181,6 +162,34 @@ localstat()
tty_setlinemode(uselinemode);
}
+ if (uselinemode) {
+
+ /*
+ * Check for state of BINARY options.
+ *
+ * We only need to do the binary dance if we are actually going
+ * to use linemode. As this confuses some telnet clients that dont
+ * support linemode, and doesnt gain us anything, we dont do it
+ * unless we're doing linemode. -Crh (henrich@msu.edu)
+ */
+
+ if (tty_isbinaryin()) {
+ if (his_want_state_is_wont(TELOPT_BINARY))
+ send_do(TELOPT_BINARY, 1);
+ } else {
+ if (his_want_state_is_will(TELOPT_BINARY))
+ send_dont(TELOPT_BINARY, 1);
+ }
+
+ if (tty_isbinaryout()) {
+ if (my_want_state_is_wont(TELOPT_BINARY))
+ send_will(TELOPT_BINARY, 1);
+ } else {
+ if (my_want_state_is_will(TELOPT_BINARY))
+ send_wont(TELOPT_BINARY, 1);
+ }
+
+ }
/*
* Do echo mode handling as soon as we know what the
OpenPOWER on IntegriCloud