[next] Re: Interpretation of carriage returns

Eric P. Scott eps at toaster.SFSU.EDU
Wed May 9 08:05:54 AEST 1990


Archive-name: unregistered/08-May-90
Original-posting-by: eps at toaster.SFSU.EDU (Eric P. Scott)
Original-subject: Re: Interpretation of carriage returns
Reposted-by: emv at math.lsa.umich.edu (Edward Vielmetti)

[This is an experimental alt.sources re-posting from the newsgroup(s)
comp.sys.next. Comments on this service to emv at math.lsa.umich.edu 
(Edward Vielmetti).]


In article <90128.025215CMH117 at psuvm.psu.edu> CMH117 at psuvm.psu.edu
	(Charles Hannum) writes:
>If I log on the console of the NeXT and load a Terminal or Shell, carriage
>returns seem to be interpreted as :M.  But if I log in remotely, they are
>interpreted as :J, which breaks nice things like tn3270.
>
>Could someone please tell me why?

This is a BUG in telnetd.  This is a BUG in the original 4.3 BSD
telnetd that Berkeley fixed long ago.

There are two replacements: one is the telnetd from the 4.3-tahoe
distribution.  It corrects this problem (and a few others), but
still dates from Berkeley's Lousy Code Era (i.e. you have to
compile with -fwritable-strings etc.).  The 90.03.01 is the new
"clean" version, which fixes some grave omissions, and adds some
really nifty functionality.  It also comes with source patches to
the kernel.  A lot of good that does me.  :-(

I can only hope that NeXT looks kindly on its Internet customers
in the future and bundles the kernel support necessary for
traceroute, SLIP, RARP, linemode...  Their competitors WILL (if
they don't already).

					-=EPS=-
P.S. Having sources to things like telnetd and ftpd is essential
if you want to add local security hacks, e.g.

/*
 * Copyright 1990 by Eric P. Scott <eps at cs.sfsu.edu>
 * Redistribution permitted as long as this notice is retained.
 */
void unregistered(f, srca)	/* call if gethostbyaddr() fails */
int f;
struct in_addr srca;
{
	char *index();
	extern char *sys_errlist[];
	struct arpreq ar;
	char buf[BUFSIZ];

	bzero((char *)&ar, sizeof ar);
	ar.arp_pa.sa_family=AF_INET;
	((struct sockaddr_in *)&ar.arp_pa)->sin_addr.s_addr=srca.s_addr;
	if (ioctl(f, SIOCGARP, (caddr_t)&ar)<0) {
		if (errno==ENXIO)
			(void)sprintf(buf, "Access denied to %s\r\n\
Get your Zone Administrator to fix your nameservers.\r\n",
			inet_ntoa(srca));
		else (void)sprintf(buf, "telnetd: %s SIOCGARP error: %s\r\n",
			inet_ntoa(srca), sys_errlist[errno]);
	}
	else {
		if ((ar.arp_flags&ATF_COM)==0)	/* should never happen */
			(void)sprintf(buf, "telnetd: %s (not complete)\r\n",
			inet_ntoa(srca));
		else (void)sprintf(buf,	/* unauthorized Ethernet tap */
			"Access denied to %s at %02X:%02X:%02X:%02X:%02X:%02X\
\r\nPlease contact contact campus Network Support for assistance.\r\n",
			inet_ntoa(srca),
			ar.arp_ha.sa_data[0]&255,
			ar.arp_ha.sa_data[1]&255,
			ar.arp_ha.sa_data[2]&255,
			ar.arp_ha.sa_data[3]&255,
			ar.arp_ha.sa_data[4]&255,
			ar.arp_ha.sa_data[5]&255);
	}
	(void)write(f, buf, strlen(buf));
	if (buf[0]!='A') return;
	*index(buf, '\r')='\0';
	syslog(LOG_NOTICE, "%s\n", buf);	/* if syslogd worked */
	sleep(5);
	exit(1);
}



More information about the Alt.sources mailing list