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