Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 18 Apr 1998 01:18:52 +0400 (MSD)
From:      Andrew Maltsev <am@amsoft.ru>
To:        freebsd-hackers@FreeBSD.ORG
Subject:   Telnet non transparence
Message-ID:  <199804172118.BAA05619@amsoft.ru>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199804172118.BAA05619>