xref: /freebsd/crypto/heimdal/appl/telnet/README.ORIG (revision 02e9120893770924227138ba49df1edb3896112a)
1
2This is a distribution of both client and server telnet.  These programs
3have been compiled on:
4			telnet	telnetd
5	4.4 BSD-Lite	  x	  x
6	4.3 BSD Reno	  X	  X
7	UNICOS 9.1	  X	  X
8	UNICOS 9.0	  X	  X
9	UNICOS 8.0	  X	  X
10	BSDI 2.0	  X	  X
11	Solaris 2.4       x       x (no linemode in server)
12	SunOs 4.1.4	  X	  X (no linemode in server)
13	Ultrix 4.3	  X	  X (no linemode in server)
14	Ultrix 4.1	  X	  X (no linemode in server)
15
16In addition, previous versions have been compiled on the following
17machines, but were not available for testing this version.
18			telnet	telnetd
19	Next1.0		  X	  X
20	UNICOS 8.3	  X	  X
21	UNICOS 7.C	  X	  X
22	UNICOS 7.0	  X	  X
23	SunOs 4.0.3c	  X	  X (no linemode in server)
24	4.3 BSD		  X  	  X (no linemode in server)
25	DYNIX V3.0.12	  X	  X (no linemode in server)
26	Ultrix 3.1	  X	  X (no linemode in server)
27	Ultrix 4.0	  X	  X (no linemode in server)
28	SunOs 3.5	  X	  X (no linemode in server)
29	SunOs 4.1.3	  X	  X (no linemode in server)
30	Solaris 2.2       x       x (no linemode in server)
31	Solaris 2.3       x       x (no linemode in server)
32	BSDI 1.0	  X	  X
33	BSDI 1.1	  X	  X
34	DYNIX V3.0.17.9	  X	  X (no linemode in server)
35	HP-UX 8.0	  x       x (no linemode in server)
36
37This code should work, but there are no guarantees.
38
39May 30, 1995
40
41This release represents what is on the 4.4BSD-Lite2 release, which
42should be the final BSD release.  I will continue to support of
43telnet, The code (without encryption) is available via anonymous ftp
44from ftp.cray.com, in src/telnet/telnet.YY.MM.DD.NE.tar.Z, where
45YY.MM.DD is replaced with the year, month and day of the release.
46If you can't find it at one of these places, at some point in the
47near future information about the latest releases should be available
48from ftp.borman.com.
49
50In addition, the version with the encryption code is available via
51ftp from net-dist.mit.edu, in the directory /pub/telnet.  There
52is a README file there that gives further information on how
53to get the distribution.
54
55Questions, comments, bug reports and bug fixes can be sent to
56one of these addresses:
57		dab@borman.com
58		dab@cray.com
59		dab@bsdi.com
60
61This release is mainly bug fixes and code cleanup.
62
63	Replace all calls to bcopy()/bzero() with calls to
64	memmove()/memset() and all calls to index()/rindex()
65	with calls to strchr()/strrchr().
66
67	Add some missing diagnostics for option tracing
68	to telnetd.
69
70	Add support for BSDI 2.0 and Solaris 2.4.
71
72	Add support for UNICOS 8.0
73
74	Get rid of expanded tabs and trailing white spaces.
75
76	From Paul Vixie:
77		Fix for telnet going into an endless spin
78		when the session dies abnormally.
79
80	From Jef Poskanzer:
81		Changes to allow telnet to compile
82		under SunOS 3.5.
83
84	From Philip Guenther:
85		makeutx() doesn't expand utmpx,
86		use pututxline() instead.
87
88	From Chris Torek:
89		Add a sleep(1) before execing login
90		to avoid race condition that can eat
91		up the login prompt.
92		Use terminal speed directly if it is
93		not an encoded value.
94
95	From Steve Parker:
96		Fix to realloc() call.  Fix for execing
97		login on solaris with no user name.
98
99January 19, 1994
100
101This is a list of some of the changes since the last tar release
102of telnet/telnetd.  There are probably other changes that aren't
103listed here, but this should hit a lot of the main ones.
104
105   General:
106	Changed #define for AUTHENTICATE to AUTHENTICATION
107	Changed #define for ENCRYPT to ENCRYPTION
108	Changed #define for DES_ENCRYPT to DES_ENCRYPTION
109
110	Added support for SPX authentication: -DSPX
111
112	Added support for Kerberos Version 5 authentication: -DKRB5
113
114	Added support for ANSI C function prototypes
115
116	Added support for the NEW-ENVIRON option (RFC-1572)
117	including support for USERVAR.
118
119	Made support for the old Environment Option (RFC-1408)
120	conditional on -DOLD_ENVIRON
121
122	Added #define ENV_HACK - support for RFC 1571
123
124	The encryption code is removed from the public distributions.
125	Domestic 4.4 BSD distributions contain the encryption code.
126
127	ENV_HACK: Code to deal with systems that only implement
128		the old ENVIRON option, and have reversed definitions
129		of ENV_VAR and ENV_VAL.  Also fixes ENV processing in
130		client to handle things besides just the default set...
131
132	NO_BSD_SETJMP: UNICOS configuration for
133		UNICOS 6.1/6.0/5.1/5.0 systems.
134
135	STREAMSPTY: Use /dev/ptmx to get a clean pty.  This
136		is for SVr4 derivatives (Like Solaris)
137
138	UTMPX: For systems that have /etc/utmpx. This is for
139		SVr4 derivatives (Like Solaris)
140
141	Definitions for BSDI 1.0
142
143	Definitions for 4.3 Reno and 4.4 BSD.
144
145	Definitions for UNICOS 8.0 and UNICOS 7.C
146
147	Definitions for Solaris 2.0
148
149	Definitions for HP-UX 8.0
150
151	Latest Copyright notices from Berkeley.
152
153	FLOW-CONTROL: support for RFC-XXXx
154
155
156   Client Specific:
157
158	Fix the "send" command to not send garbage...
159
160	Fix status message for "skiprc"
161
162	Make sure to send NAWS after telnet has been suspended
163	or an external command has been run, if the window size
164	has changed.
165
166	sysV88 support.
167
168   Server Specific:
169
170	Support flowcontrol option in non-linemode servers.
171
172	-k Server supports Kludge Linemode, but will default to
173	   either single character mode or real Linemode support.
174	   The user will have to explicitly ask to switch into
175	   kludge linemode. ("stty extproc", or escape back to
176	   to telnet and say "mode line".)
177
178	-u Specify the length of the hostname field in the utmp
179	   file.  Hostname longer than this length will be put
180	   into the utmp file in dotted decimal notation, rather
181	   than putting in a truncated hostname.
182
183	-U Registered hosts only.  If a reverse hostname lookup
184	   fails, the connection will be refused.
185
186	-f/-F
187	   Allows forwarding of credentials for KRB5.
188
189Februrary 22, 1991:
190
191    Features:
192
193	This version of telnet/telnetd has support for both
194	the AUTHENTICATION and ENCRYPTION options.  The
195	AUTHENTICATION option is fairly well defined, and
196	an option number has been assigned to it.  The
197	ENCRYPTION option is still in a state of flux; an
198	option number has been assigned to, but it is still
199	subject to change.  The code is provided in this release
200	for experimental and testing purposes.
201
202	The telnet "send" command can now be used to send
203	do/dont/will/wont commands, with any telnet option
204	name.  The rules for when do/dont/will/wont are sent
205	are still followed, so just because the user requests
206	that one of these be sent doesn't mean that it will
207	be sent...
208
209	The telnet "getstatus" command no longer requires
210	that option printing be enabled to see the response
211	to the "DO STATUS" command.
212
213	A -n flag has been added to telnetd to disable
214	keepalives.
215
216	A new telnet command, "auth" has been added (if
217	AUTHENTICATE is defined).  It has four sub-commands,
218	"status", "disable", "enable" and "help".
219
220	A new telnet command, "encrypt" has been added (if
221	ENCRYPT is defined).  It has many sub-commands:
222	"enable", "type", "start", "stop", "input",
223	"-input", "output", "-output", "status", and "help".
224
225	The LOGOUT option is now supported by both telnet
226	and telnetd, a new command, "logout", was added
227	to support this.
228
229	Several new toggle options were added:
230	    "autoencrypt", "autodecrypt", "autologin", "authdebug",
231	    "encdebug", "skiprc", "verbose_encrypt"
232
233	An "rlogin" interface has been added.  If the program
234	is named "rlogin", or the "-r" flag is given, then
235	an rlogin type of interface will be used.
236		~.	Terminates the session
237		~<susp> Suspend the session
238		~^]	Escape to telnet command mode
239		~~	Pass through the ~.
240	    BUG: If you type the rlogin escape character
241		 in the middle of a line while in rlogin
242		 mode, you cannot erase it or any characters
243		 before it.  Hopefully this can be fixed
244		 in a future release...
245
246    General changes:
247
248	A "libtelnet.a" has now been created.  This libraray
249	contains code that is common to both telnet and
250	telnetd.  This is also where library routines that
251	are needed, but are not in the standard C library,
252	are placed.
253
254	The makefiles have been re-done.  All of the site
255	specific configuration information has now been put
256	into a single "Config.generic" file, in the top level
257	directory.  Changing this one file will take care of
258	all three subdirectories.  Also, to add a new/local
259	definition, a "Config.local" file may be created
260	at the top level; if that file exists, the subdirectories
261	will use that file instead of "Config.generic".
262
263	Many 1-2 line functions in commands.c have been
264	removed, and just inserted in-line, or replaced
265	with a macro.
266
267    Bug Fixes:
268
269	The non-termio code in both telnet and telnetd was
270	setting/clearing CTLECH in the sg_flags word.  This
271	was incorrect, and has been changed to set/clear the
272	LCTLECH bit in the local mode word.
273
274	The SRCRT #define has been removed.  If IP_OPTIONS
275	and IPPROTO_IP are defined on the system, then the
276	source route code is automatically enabled.
277
278	The NO_GETTYTAB #define has been removed; there
279	is a compatability routine that can be built into
280	libtelnet to achive the same results.
281
282	The server, telnetd, has been switched to use getopt()
283	for parsing the argument list.
284
285	The code for getting the input/output speeds via
286	cfgetispeed()/cfgetospeed() was still not quite
287	right in telnet.  Posix says if the ispeed is 0,
288	then it is really equal to the ospeed.
289
290	The suboption processing code in telnet now has
291	explicit checks to make sure that we received
292	the entire suboption (telnetd was already doing this).
293
294	The telnet code for processing the terminal type
295	could cause a core dump if an existing connection
296	was closed, and a new connection opened without
297	exiting telnet.
298
299	Telnetd was doing a TCSADRAIN when setting the new
300	terminal settings;  This is not good, because it means
301	that the tcsetattr() will hang waiting for output to
302	drain, and telnetd is the only one that will drain
303	the output...  The fix is to use TCSANOW which does
304	not wait.
305
306	Telnetd was improperly setting/clearing the ISTRIP
307	flag in the c_lflag field, it should be using the
308	c_iflag field.
309
310	When the child process of telnetd was opening the
311	slave side of the pty, it was re-setting the EXTPROC
312	bit too early, and some of the other initialization
313	code was wiping it out.  This would cause telnetd
314	to go out of linemode and into single character mode.
315
316	One instance of leaving linemode in telnetd forgot
317	to send a WILL ECHO to the client, the net result
318	would be that the user would see double character
319	echo.
320
321	If the MODE was being changed several times very
322	quickly, telnetd could get out of sync with the
323	state changes and the returning acks; and wind up
324	being left in the wrong state.
325
326September 14, 1990:
327
328	Switch the client to use getopt() for parsing the
329	argument list.  The 4.3Reno getopt.c is included for
330	systems that don't have getopt().
331
332	Use the posix _POSIX_VDISABLE value for what value
333	to use when disabling special characters.  If this
334	is undefined, it defaults to 0x3ff.
335
336	For non-termio systems, TIOCSETP was being used to
337	change the state of the terminal.  This causes the
338	input queue to be flushed, which we don't want.  This
339	is now changed to TIOCSETN.
340
341	Take out the "#ifdef notdef" around the code in the
342	server that generates a "sync" when the pty oputput
343	is flushed.  The potential problem is that some older
344	telnet clients may go into an infinate loop when they
345	receive a "sync", if so, the server can be compiled
346	with "NO_URGENT" defined.
347
348	Fix the client where it was setting/clearing the OPOST
349	bit in the c_lflag field, not the c_oflag field.
350
351	Fix the client where it was setting/clearing the ISTRIP
352	bit in the c_lflag field, not the c_iflag field.  (On
353	4.3Reno, this is the ECHOPRT bit in the c_lflag field.)
354	The client also had its interpretation of WILL BINARY
355	and DO BINARY reversed.
356
357	Fix a bug in client that would cause a core dump when
358	attempting to remove the last environment variable.
359
360	In the client, there were a few places were switch()
361	was being passed a character, and if it was a negative
362	value, it could get sign extended, and not match
363	the 8 bit case statements.  The fix is to and the
364	switch value with 0xff.
365
366	Add a couple more printoption() calls in the client, I
367	don't think there are any more places were a telnet
368	command can be received and not printed out when
369	"options" is on.
370
371	A new flag has been added to the client, "-a".  Currently,
372	this just causes the USER name to be sent across, in
373	the future this may be used to signify that automatic
374	authentication is requested.
375
376	The USER variable is now only sent by the client if
377	the "-a" or "-l user" options are explicity used, or
378	if the user explicitly asks for the "USER" environment
379	variable to be exported.  In the server, if it receives
380	the "USER" environment variable, it won't print out the
381	banner message, so that only "Password:" will be printed.
382	This makes the symantics more like rlogin, and should be
383	more familiar to the user.  (People are not used to
384	getting a banner message, and then getting just a
385	"Password:" prompt.)
386
387	Re-vamp the code for starting up the child login
388	process.  The code was getting ugly, and it was
389	hard to tell what was really going on.  What we
390	do now is after the fork(), in the child:
391		1) make sure we have no controlling tty
392		2) open and initialize the tty
393		3) do a setsid()/setpgrp()
394		4) makes the tty our controlling tty.
395	On some systems, #2 makes the tty our controlling
396	tty, and #4 is a no-op.  The parent process does
397	a gets rid of any controlling tty after the child
398	is fork()ed.
399
400	Use the strdup() library routine in telnet, instead
401	of the local savestr() routine.  If you don't have
402	strdup(), you need to define NO_STRDUP.
403
404	Add support for ^T (SIGINFO/VSTATUS), found in the
405	4.3Reno distribution.  This maps to the AYT character.
406	You need a 4-line bugfix in the kernel to get this
407	to work properly:
408
409	> *** tty_pty.c.ORG	Tue Sep 11 09:41:53 1990
410	> --- tty_pty.c	Tue Sep 11 17:48:03 1990
411	> ***************
412	> *** 609,613 ****
413	> 			if ((tp->t_lflag&NOFLSH) == 0)
414	> 				ttyflush(tp, FREAD|FWRITE);
415	> ! 			pgsignal(tp->t_pgrp, *(unsigned int *)data);
416	> 			return(0);
417	> 		}
418	> --- 609,616 ----
419	> 			if ((tp->t_lflag&NOFLSH) == 0)
420	> 				ttyflush(tp, FREAD|FWRITE);
421	> ! 			pgsignal(tp->t_pgrp, *(unsigned int *)data, 1);
422	> ! 			if ((*(unsigned int *)data == SIGINFO) &&
423	> ! 			    ((tp->t_lflag&NOKERNINFO) == 0))
424	> ! 				ttyinfo(tp);
425	> 			return(0);
426	> 		}
427
428	The client is now smarter when setting the telnet escape
429	character; it only sets it to one of VEOL and VEOL2 if
430	one of them is undefined, and the other one is not already
431	defined to the telnet escape character.
432
433	Handle TERMIOS systems that have seperate input and output
434	line speed settings imbedded in the flags.
435
436	Many other minor bug fixes.
437
438June 20, 1990:
439	Re-organize makefiles and source tree.  The telnet/Source
440	directory is now gone, and all the source that was in
441	telnet/Source is now just in the telnet directory.
442
443	Seperate makefile for each system are now gone.  There
444	are two makefiles, Makefile and Makefile.generic.
445	The "Makefile" has the definitions for the various
446	system, and "Makefile.generic" does all the work.
447	There is a variable called "WHAT" that is used to
448	specify what to make.  For example, in the telnet
449	directory, you might say:
450		make 4.4bsd WHAT=clean
451	to clean out the directory.
452
453	Add support for the ENVIRON and XDISPLOC options.
454	In order for the server to work, login has to have
455	the "-p" option to preserve environment variables.
456
457	Add the SOFT_TAB and LIT_ECHO modes in the LINEMODE support.
458
459	Add the "-l user" option to command line and open command
460	(This is passed through the ENVIRON option).
461
462	Add the "-e" command line option, for setting the escape
463	character.
464
465	Add the "-D", diagnostic, option to the server.  This allows
466	the server to print out debug information, which is very
467	useful when trying to debug a telnet that doesn't have any
468	debugging ability.
469
470	Turn off the literal next character when not in LINEMODE.
471
472	Don't recognize ^Y locally, just pass it through.
473
474	Make minor modifications for Sun4.0 and Sun4.1
475
476	Add support for both FORW1 and FORW2 characters.  The
477	telnet escpape character is set to whichever of the
478	two is not being used.  If both are in use, the escape
479	character is not set, so when in linemode the user will
480	have to follow the escape character with a <CR> or <EOF)
481	to get it passed through.
482
483	Commands can now be put in single and double quotes, and
484	a backslash is now an escape character.  This is needed
485	for allowing arbitrary strings to be assigned to environment
486	variables.
487
488	Switch telnetd to use macros like telnet for keeping
489	track of the state of all the options.
490
491	Fix telnetd's processing of options so that we always do
492	the right processing of the LINEMODE option, regardless
493	of who initiates the request to turn it on.  Also, make
494	sure that if the other side went "WILL ECHO" in response
495	to our "DO ECHO", that we send a "DONT ECHO" to get the
496	option turned back off!
497
498	Fix the TERMIOS setting of the terminal speed to handle both
499	BSD's seperate fields, and the SYSV method of CBAUD bits.
500
501	Change how we deal with the other side refusing to enable
502	an option.  The sequence used to be: send DO option; receive
503	WONT option; send DONT option.  Now, the sequence is: send
504	DO option; receive WONT option.  Both should be valid
505	according to the spec, but there has been at least one
506	client implementation of telnet identified that can get
507	really confused by this.  (The exact sequence, from a trace
508	on the server side, is (numbers are number of responses that
509	we expect to get after that line...):
510
511		send WILL ECHO	1 (initial request)
512		send WONT ECHO	2 (server is changing state)
513		recv DO ECHO	1 (first reply, ok.  expect DONT ECHO next)
514		send WILL ECHO	2 (server changes state again)
515		recv DONT ECHO	1 (second reply, ok.  expect DO ECHO next)
516		recv DONT ECHO	0 (third reply, wrong answer. got DONT!!!)
517	***	send WONT ECHO	  (send WONT to acknowledge the DONT)
518		send WILL ECHO	1 (ask again to enable option)
519		recv DO ECHO	0
520
521		recv DONT ECHO	0
522		send WONT ECHO	1
523		recv DONT ECHO	0
524		recv DO ECHO	1
525		send WILL ECHO	0
526		(and the last 5 lines loop forever)
527
528	The line with the "***" is last of the WILL/DONT/WONT sequence.
529	The change to the server to not generate that makes this same
530	example become:
531
532		send will ECHO	1
533		send wont ECHO	2
534		recv do ECHO	1
535		send will ECHO	2
536		recv dont ECHO	1
537		recv dont ECHO	0
538		recv do ECHO	1
539		send will ECHO	0
540
541	There is other option negotiation going on, and not sending
542	the third part changes some of the timings, but this specific
543	example no longer gets stuck in a loop.  The "telnet.state"
544	file has been modified to reflect this change to the algorithm.
545
546	A bunch of miscellaneous bug fixes and changes to make
547	lint happier.
548
549	This version of telnet also has some KERBEROS stuff in
550	it. This has not been tested, it uses an un-authorized
551	telnet option number, and uses an out-of-date version
552	of the (still being defined) AUTHENTICATION option.
553	There is no support for this code, do not enable it.
554
555
556March 1, 1990:
557CHANGES/BUGFIXES SINCE LAST RELEASE:
558	Some support for IP TOS has been added.  Requires that the
559	kernel support the IP_TOS socket option (currently this
560	is only in UNICOS 6.0).
561
562	Both telnet and telnetd now use the cc_t typedef.  typedefs are
563	included for systems that don't have it (in termios.h).
564
565	SLC_SUSP was not supported properly before.  It is now.
566
567	IAC EOF was not translated  properly in telnetd for SYSV_TERMIO
568	when not in linemode.  It now saves a copy of the VEOF character,
569	so that when ICANON is turned off and we can't trust it anymore
570	(because it is now the VMIN character) we use the saved value.
571
572	There were two missing "break" commands in the linemode
573	processing code in telnetd.
574
575	Telnetd wasn't setting the kernel window size information
576	properly.  It was using the rows for both rows and columns...
577
578Questions/comments go to
579		David Borman
580		Cray Research, Inc.
581		655F Lone Oak Drive
582		Eagan, MN 55123
583		dab@cray.com.
584
585README:	You are reading it.
586
587Config.generic:
588	This file contains all the OS specific definitions.  It
589	has pre-definitions for many common system types, and is
590	in standard makefile fromat.  See the comments at the top
591	of the file for more information.
592
593Config.local:
594	This is not part of the distribution, but if this file exists,
595	it is used instead of "Config.generic".  This allows site
596	specific configuration without having to modify the distributed
597	"Config.generic" file.
598
599kern.diff:
600	This file contains the diffs for the changes needed for the
601	kernel to support LINEMODE is the server.  These changes are
602	for a 4.3BSD system.  You may need to make some changes for
603	your particular system.
604
605	There is a new bit in the terminal state word, TS_EXTPROC.
606	When this bit is set, several aspects of the terminal driver
607	are disabled.  Input line editing, character echo, and
608	mapping of signals are all disabled.  This allows the telnetd
609	to turn of these functions when in linemode, but still keep
610	track of what state the user wants the terminal to be in.
611
612	New ioctl()s:
613
614		TIOCEXT		Turn on/off the TS_EXTPROC bit
615		TIOCGSTATE	Get t_state of tty to look at TS_EXTPROC bit
616		TIOCSIG		Generate a signal to processes in the
617				current process group of the pty.
618
619	There is a new mode for packet driver, the TIOCPKT_IOCTL bit.
620	When packet mode is turned on in the pty, and the TS_EXTPROC
621	bit is set, then whenever the state of the pty is changed, the
622	next read on the master side of the pty will have the TIOCPKT_IOCTL
623	bit set, and the data will contain the following:
624		struct xx {
625			struct sgttyb a;
626			struct tchars b;
627			struct ltchars c;
628			int t_state;
629			int t_flags;
630		}
631	This allows the process on the server side of the pty to know
632	when the state of the terminal has changed, and what the new
633	state is.
634
635	However, if you define USE_TERMIO or SYSV_TERMIO, the code will
636	expect that the structure returned in the TIOCPKT_IOCTL is
637	the termio/termios structure.
638
639stty.diff:
640	This file contains the changes needed for the stty(1) program
641	to report on the current status of the TS_EXTPROC bit.  It also
642	allows the user to turn on/off the TS_EXTPROC bit.  This is useful
643	because it allows the user to say "stty -extproc", and the
644	LINEMODE option will be automatically disabled, and saying "stty
645	extproc" will re-enable the LINEMODE option.
646
647telnet.state:
648	Both the client and server have code in them to deal
649	with option negotiation loops.  The algorithm that is
650	used is described in this file.
651
652telnet:
653	This directory contains the client code.  No kernel changes are
654	needed to use this code.
655
656telnetd:
657	This directory contains the server code.  If LINEMODE or KLUDGELINEMODE
658	are defined, then the kernel modifications listed above are needed.
659
660libtelnet:
661	This directory contains code that is common to both the client
662	and the server.
663
664arpa:
665	This directory has a new <arpa/telnet.h>
666
667libtelnet/Makefile.4.4:
668telnet/Makefile.4.4:
669telnetd/Makefile.4.4:
670	These are the makefiles that can be used on a 4.3Reno
671	system when this software is installed in /usr/src/lib/libtelnet,
672	/usr/src/libexec/telnetd, and /usr/src/usr.bin/telnet.
673
674
675The following TELNET options are supported:
676
677	LINEMODE:
678		The LINEMODE option is supported as per RFC1116.  The
679		FORWARDMASK option is not currently supported.
680
681	BINARY: The client has the ability to turn on/off the BINARY
682		option in each direction.  Turning on BINARY from
683		server to client causes the LITOUT bit to get set in
684		the terminal driver on both ends,  turning on BINARY
685		from the client to the server causes the PASS8 bit
686		to get set in the terminal driver on both ends.
687
688	TERMINAL-TYPE:
689		This is supported as per RFC1091.  On the server side,
690		when a terminal type is received, termcap/terminfo
691		is consulted to determine if it is a known terminal
692		type.  It keeps requesting terminal types until it
693		gets one that it recongnizes, or hits the end of the
694		list.  The server side looks up the entry in the
695		termcap/terminfo data base, and generates a list of
696		names which it then passes one at a time to each
697		request for a terminal type, duplicating the last
698		entry in the list before cycling back to the beginning.
699
700	NAWS:	The Negotiate about Window Size, as per RFC 1073.
701
702	TERMINAL-SPEED:
703		Implemented as per RFC 1079
704
705	TOGGLE-FLOW-CONTROL:
706		Implemented as per RFC 1080
707
708	TIMING-MARK:
709		As per RFC 860
710
711	SGA:	As per RFC 858
712
713	ECHO:	As per RFC 857
714
715	LOGOUT: As per RFC 727
716
717	STATUS:
718		The server will send its current status upon
719		request.  It does not ask for the clients status.
720		The client will request the servers current status
721		from the "send getstatus" command.
722
723	ENVIRON:
724		This option is currently being defined by the IETF
725		Telnet Working Group, and an RFC has not yet been
726		issued, but should be in the near future...
727
728	X-DISPLAY-LOCATION:
729		This functionality can be done through the ENVIRON
730		option, it is added here for completeness.
731
732	AUTHENTICATION:
733		This option is currently being defined by the IETF
734		Telnet Working Group, and an RFC has not yet been
735		issued.  The basic framework is pretty much decided,
736		but the definitions for the specific authentication
737		schemes is still in a state of flux.
738
739	ENCRYPTION:
740		This option is currently being defined by the IETF
741		Telnet Working Group, and an RFC has not yet been
742		issued.  The draft RFC is still in a state of flux,
743		so this code may change in the future.
744