Add the DragonFly cvs id and perform general cleanups on cvs/rcs/sccs ids. Most
[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 # $DragonFly: src/usr.bin/telnet/README,v 1.2 2003/06/17 04:29:32 dillon Exp $
3
4 This is a distribution of both client and server telnet.  These programs
5 have 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
18 In addition, previous versions have been compiled on the following
19 machines, 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
39 This code should work, but there are no guarantees.
40
41 May 30, 1995
42
43 This release represents what is on the 4.4BSD-Lite2 release, which
44 should be the final BSD release.  I will continue to support of
45 telnet, The code (without encryption) is available via anonymous ftp
46 from ftp.cray.com, in src/telnet/telnet.YY.MM.DD.NE.tar.Z, where
47 YY.MM.DD is replaced with the year, month and day of the release.
48 If you can't find it at one of these places, at some point in the
49 near future information about the latest releases should be available
50 from ftp.borman.com.
51
52 In addition, the version with the encryption code is available via
53 ftp from net-dist.mit.edu, in the directory /pub/telnet.  There
54 is a README file there that gives further information on how
55 to get the distribution.
56
57 Questions, comments, bug reports and bug fixes can be sent to
58 one of these addresses:
59                 dab@borman.com
60                 dab@cray.com
61                 dab@bsdi.com
62
63 This 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
101 January 19, 1994
102
103 This is a list of some of the changes since the last tar release
104 of telnet/telnetd.  There are probably other changes that aren't
105 listed 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
191 Februrary 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
328 September 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
440 June 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
558 March 1, 1990:
559 CHANGES/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
580 Questions/comments go to
581                 David Borman
582                 Cray Research, Inc.
583                 655F Lone Oak Drive
584                 Eagan, MN 55123
585                 dab@cray.com.
586
587 README: You are reading it.
588
589 Config.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
595 Config.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
601 kern.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
641 stty.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
649 telnet.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
654 telnet:
655         This directory contains the client code.  No kernel changes are
656         needed to use this code.
657
658 telnetd:
659         This directory contains the server code.  If LINEMODE or KLUDGELINEMODE
660         are defined, then the kernel modifications listed above are needed.
661
662 libtelnet:
663         This directory contains code that is common to both the client
664         and the server.
665
666 arpa:
667         This directory has a new <arpa/telnet.h>
668
669 libtelnet/Makefile.4.4:
670 telnet/Makefile.4.4:
671 telnetd/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
677 The 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.