Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Dec 96 22:52 CST
From:      uhclem@nemesis.lonestar.org (Frank Durda IV)
To:        scrappy@freefall.freebsd.org, freebsd-bugs@freefall.freebsd.org
Message-ID:  <m0vWEkX-000u4DC@nemesis.lonestar.org>

next in thread | raw e-mail | index | archive | help
Synopsis: 2.x telnetd handles CTRL-M differently than other ttys  FDIV044
Return-receipt-to: 
Return-receipt-from: 
Cc: uhclem
Bcc: 

[0]Synopsis: 2.x telnetd handles CTRL-M differently than other ttys  FDIV044
[0]
[0]State-Changed-From-To: open-feedback
[0]State-Changed-By: scrappy
[0]State-Changed-When: Mon Oct 21 23:07:38 PDT 1996
[0]State-Changed-Why: 
[0]
[0]Dust off the cobwebs - Confirm Status


Confirmed - this problem still exists in 2.1.5 and 2.2-ALPHA.  NO CHANGE.
2.1.6 was not re-tested.

Additional information:

The attached program demonstrates the original problem.

1.	cc -o chars chars.c
2.	./chars	
	(follow displayed instructions and note result accuracy - NORMAL)
3.	telnet self
4.	login
5.	./chars
	(follow displayed instructions and note you don't get the
	 same results - MALFUNCTION)


The routines "chars" invokes are extracted from a package called XMAIL,
and appear to be doing completely valid things, effectively selecting
RAW mode.  I have stripped all of the #ifdef SYS3 and other conditionals
so it is easier to view.  

I did not write these routines, so a review of their form and function
really isn't needed.  I do know that this code works consistently for
both non-telnet and telnet sessions in BSD 4.1, 4.2 4.3, and 
FreeBSD up thru 1.1.5.x.  It also works correctly on a FreeBSD 2.x system
if you replace telnetd with the telnetd provided with FreeBSD 1.1.5.1
or older.


A related problem:	(there should be an open PR on this but I don't see it)

1.	Login to stock shell with stock .cshrc/.login (csh with filec
	enabled)
2.	cd directory where above programs reside.
3.	Type [c][CTRL][D]
	system should display files that match, including chars.c. NORMAL
4.	[CTRL][C].
5.	Telnet self
6.	login (same csh/filec login used in steps 1-5)
7.	cd directory where above programs reside.
8.	Type [c][CTRL][D]
	system should display files that match, but instead, simply
	echos ^D.  MALFUNCTION
As above, replacing telnetd with the one shipped with 1.1.5.1 fixes
this problem.


Frank Durda IV <uhclem@nemesis.lonestar.org>|"The Knights who say "LETNi"
or uhclem%nemesis@rwsystr.nkn.net           | demand...  A SEGMENT REGISTER!!!"
					    |"A what?"
or ...letni!rwsys!nemesis!uhclem	    |"LETNi! LETNi! LETNi!"  - 1983


-----chars.c-----
#include <stdio.h>
#include  <sgtty.h>
#include <sys/stat.h>
extern char	*ttyname();

static	struct  stat	ttystatus;
int	stdin_isatty, stdout_isatty;
char	*ttynam_stdout;
static  struct	sgttyb	old, new;
static	struct  stat	ttystatus;
int	stdin_isatty, stdout_isatty;
char	*ttynam_stdout;

#define	EOT	'\004'
static int	eof=EOT,  killc=CTRL('U'),  erase=CTRL('H'),  werase=CTRL('W');

main()
{
	char c;
	printf("Press these keys  [T] [E] [S] [T] [Enter] [CTRL][J] [CTRL][M] [Esc]\n");
	save_tty();
	set_tty();

	while((c=getchar())!=EOF && c!=0x1b) {
		printf("%02x ",c);
	}

	restore_tty();
	printf("\nYou should see 74 65 73 74 0a 0a 0a\n");
}


save_tty()
{
	struct tchars	tc;
	struct ltchars t;

	fstat(fileno(stdout), &ttystatus);
	ttynam_stdout = ttyname(fileno(stdout));
	stdout_isatty = (ioctl(fileno(stdout), TIOCGETP, &old) >= 0);
	stdin_isatty = (ioctl(fileno(stdin), TIOCGETP, &old) >= 0);
	if (ioctl(fileno(stdin), TIOCGLTC, &t) == 0)
		werase = (int)t.t_werasc;

	killc = (int)old.sg_kill;
	erase = (int)old.sg_erase;
	if (ioctl(fileno(stdin), TIOCGETC, &tc) == 0)
		eof = (int)tc.t_eofc;

	new = old;
	new.sg_flags |= CBREAK;
	new.sg_flags &= ~ECHO;
}

set_tty()
{
	ioctl(fileno(stdin), TIOCSETN, &new);
}

restore_tty()
{
	if (stdout_isatty)
		chmod(ttynam_stdout, (int)ttystatus.st_mode&0777);
	if (stdin_isatty)
		ioctl(fileno(stdin), TIOCSETP, &old);
}

-----END of chars.c-----




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