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