From owner-freebsd-hackers Fri Apr 17 14:26:10 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id OAA00463 for freebsd-hackers-outgoing; Fri, 17 Apr 1998 14:26:10 -0700 (PDT) (envelope-from owner-freebsd-hackers@FreeBSD.ORG) Received: from amsoft.ru (amsoft.ru [194.87.86.241]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id VAA00397 for ; Fri, 17 Apr 1998 21:25:18 GMT (envelope-from am@amsoft.ru) Received: (from am@localhost) by amsoft.ru (8.8.8/amsoft/1.0) id BAA05619 for freebsd-hackers@freebsd.org; Sat, 18 Apr 1998 01:18:53 +0400 (MSD) From: Andrew Maltsev Message-Id: <199804172118.BAA05619@amsoft.ru> Subject: Telnet non transparence To: freebsd-hackers@FreeBSD.ORG Date: Sat, 18 Apr 1998 01:18:52 +0400 (MSD) Organization: AM'soft X-Location: Oryol (http://www.oryol.ru/), Russia X-Phone: +7 086 229 9988 X-Mailer: ELM [version 2.4ME+ PL32 (25)] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG There are three open PR's related to this issue. In the last (bin/6317) I'd posted my patch for the problem. Why not to commit it? The problem is that even with -8E specified telnet falls to command mode by 0xff -- this is not what ``-E -- Stops any character from being recognized as an escape character'' usually means :) Here is the patch: Index: commands.c =================================================================== RCS file: /.1/FreeBSD/CVS/src/usr.bin/telnet/commands.c,v retrieving revision 1.9 diff -c -r1.9 commands.c *** commands.c 1998/02/20 04:33:02 1.9 --- commands.c 1998/04/16 10:13:09 *************** *** 405,411 **** static int send_esc() { ! NETADD(escape); return 1; } --- 405,412 ---- static int send_esc() { ! if(escapable) ! NETADD(escape); return 1; } *************** *** 938,944 **** printf("Telnet rlogin escape character is '%s'.\n", control(rlogin)); } else { ! escape = (s && *s) ? special(s) : _POSIX_VDISABLE; printf("Telnet escape character is '%s'.\n", control(escape)); } } --- 939,951 ---- printf("Telnet rlogin escape character is '%s'.\n", control(rlogin)); } else { ! if(s && *s) { ! escape = special(s); ! escapable = 1; ! } else { ! escape = _POSIX_VDISABLE; ! escapable = 0; ! } printf("Telnet escape character is '%s'.\n", control(escape)); } } *************** *** 1010,1015 **** --- 1017,1025 ---- value = _POSIX_VDISABLE; } *(ct->charp) = (cc_t)value; + if(ct->charp == &escape) /* special workaround - i'm too lazy */ + /* to add yet another handler (am@) */ + escapable = !(value == _POSIX_VDISABLE); printf("%s character is '%s'.\n", ct->name, control(*(ct->charp))); } slc_check(); *************** *** 1330,1338 **** printf("new escape character: "); (void) fgets(buf, sizeof(buf), stdin); arg = buf; } ! if (arg[0] != '\0') escape = arg[0]; if (!In3270) { printf("Escape character is '%s'.\n", control(escape)); } --- 1340,1354 ---- printf("new escape character: "); (void) fgets(buf, sizeof(buf), stdin); arg = buf; + if (*buf=='\n') arg++; } ! if (arg[0] != '\0') { escape = arg[0]; + escapable = 1; + } else { + escape = _POSIX_VDISABLE; + escapable = 0; + } if (!In3270) { printf("Escape character is '%s'.\n", control(escape)); } Index: externs.h =================================================================== RCS file: /.1/FreeBSD/CVS/src/usr.bin/telnet/externs.h,v retrieving revision 1.3 diff -c -r1.3 externs.h *** externs.h 1997/01/07 19:47:56 1.3 --- externs.h 1998/04/16 09:55:57 *************** *** 148,153 **** --- 148,154 ---- clienteof; /* Client received EOF */ extern cc_t escape; /* Escape to command mode */ + extern short escapable; /* Escape allowed? */ extern cc_t rlogin; /* Rlogin mode escape character */ #ifdef KLUDGELINEMODE extern cc_t echoc; /* Toggle local echoing */ Index: main.c =================================================================== RCS file: /.1/FreeBSD/CVS/src/usr.bin/telnet/main.c,v retrieving revision 1.6 diff -c -r1.6 main.c *** main.c 1997/03/29 04:32:57 1.6 --- main.c 1998/04/16 09:54:57 *************** *** 141,147 **** eight = 3; /* binary output and input */ break; case 'E': ! rlogin = escape = _POSIX_VDISABLE; break; case 'K': #ifdef AUTHENTICATION --- 141,148 ---- eight = 3; /* binary output and input */ break; case 'E': ! rlogin = _POSIX_VDISABLE; ! set_escape_char(NULL); break; case 'K': #ifdef AUTHENTICATION Index: telnet.c =================================================================== RCS file: /.1/FreeBSD/CVS/src/usr.bin/telnet/telnet.c,v retrieving revision 1.5 diff -c -r1.5 telnet.c *** telnet.c 1998/02/20 04:34:08 1.5 --- telnet.c 1998/04/16 09:59:38 *************** *** 110,115 **** --- 110,116 ---- char *prompt = 0; + short escapable; cc_t escape; cc_t rlogin; #ifdef KLUDGELINEMODE *************** *** 188,193 **** --- 189,195 ---- /* Don't change NetTrace */ + escapable = 1; escape = CONTROL(']'); rlogin = _POSIX_VDISABLE; #ifdef KLUDGELINEMODE *************** *** 1969,1975 **** command(0, "z\n", 2); continue; } ! if (sc == escape) { command(0, (char *)tbp, tcc); bol = 1; count += tcc; --- 1971,1977 ---- command(0, "z\n", 2); continue; } ! if (escapable && sc == escape) { command(0, (char *)tbp, tcc); bol = 1; count += tcc; *************** *** 1986,1992 **** } if ((sc == '\n') || (sc == '\r')) bol = 1; ! } else if (sc == escape) { /* * Double escape is a pass through of a single escape character. */ --- 1988,1994 ---- } if ((sc == '\n') || (sc == '\r')) bol = 1; ! } else if (escapable && sc == escape) { /* * Double escape is a pass through of a single escape character. */ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message