2 This is a distribution of both client and server telnet. These programs
11 Solaris 2.4 x x (no linemode in server)
12 SunOs 4.1.4 X X (no linemode in server)
13 Ultrix 4.3 X X (no linemode in server)
14 Ultrix 4.1 X X (no linemode in server)
16 In addition, previous versions have been compiled on the following
17 machines, but were not available for testing this version.
23 SunOs 4.0.3c X X (no linemode in server)
24 4.3 BSD X X (no linemode in server)
25 DYNIX V3.0.12 X X (no linemode in server)
26 Ultrix 3.1 X X (no linemode in server)
27 Ultrix 4.0 X X (no linemode in server)
28 SunOs 3.5 X X (no linemode in server)
29 SunOs 4.1.3 X X (no linemode in server)
30 Solaris 2.2 x x (no linemode in server)
31 Solaris 2.3 x x (no linemode in server)
34 DYNIX V3.0.17.9 X X (no linemode in server)
35 HP-UX 8.0 x x (no linemode in server)
37 This code should work, but there are no guarantees.
41 This release represents what is on the 4.4BSD-Lite2 release, which
42 should be the final BSD release. I will continue to support of
43 telnet, The code (without encryption) is available via anonymous ftp
44 from ftp.cray.com, in src/telnet/telnet.YY.MM.DD.NE.tar.Z, where
45 YY.MM.DD is replaced with the year, month and day of the release.
46 If you can't find it at one of these places, at some point in the
47 near future information about the latest releases should be available
50 In addition, the version with the encryption code is available via
51 ftp from net-dist.mit.edu, in the directory /pub/telnet. There
52 is a README file there that gives further information on how
53 to get the distribution.
55 Questions, comments, bug reports and bug fixes can be sent to
56 one of these addresses:
61 This release is mainly bug fixes and code cleanup.
63 Replace all calls to bcopy()/bzero() with calls to
64 memmove()/memset() and all calls to index()/rindex()
65 with calls to strchr()/strrchr().
67 Add some missing diagnostics for option tracing
70 Add support for BSDI 2.0 and Solaris 2.4.
72 Add support for UNICOS 8.0
74 Get rid of expanded tabs and trailing white spaces.
77 Fix for telnet going into an endless spin
78 when the session dies abnormally.
81 Changes to allow telnet to compile
85 makeutx() doesn't expand utmpx,
86 use pututxline() instead.
89 Add a sleep(1) before execing login
90 to avoid race condition that can eat
92 Use terminal speed directly if it is
96 Fix to realloc() call. Fix for execing
97 login on solaris with no user name.
101 This is a list of some of the changes since the last tar release
102 of telnet/telnetd. There are probably other changes that aren't
103 listed here, but this should hit a lot of the main ones.
106 Changed #define for AUTHENTICATE to AUTHENTICATION
107 Changed #define for ENCRYPT to ENCRYPTION
108 Changed #define for DES_ENCRYPT to DES_ENCRYPTION
110 Added support for SPX authentication: -DSPX
112 Added support for Kerberos Version 5 authentication: -DKRB5
114 Added support for ANSI C function prototypes
116 Added support for the NEW-ENVIRON option (RFC-1572)
117 including support for USERVAR.
119 Made support for the old Environment Option (RFC-1408)
120 conditional on -DOLD_ENVIRON
122 Added #define ENV_HACK - support for RFC 1571
124 The encryption code is removed from the public distributions.
125 Domestic 4.4 BSD distributions contain the encryption code.
127 ENV_HACK: Code to deal with systems that only implement
128 the old ENVIRON option, and have reversed definitions
129 of ENV_VAR and ENV_VAL. Also fixes ENV processing in
130 client to handle things besides just the default set...
132 NO_BSD_SETJMP: UNICOS configuration for
133 UNICOS 6.1/6.0/5.1/5.0 systems.
135 STREAMSPTY: Use /dev/ptmx to get a clean pty. This
136 is for SVr4 derivatives (Like Solaris)
138 UTMPX: For systems that have /etc/utmpx. This is for
139 SVr4 derivatives (Like Solaris)
141 Definitions for BSDI 1.0
143 Definitions for 4.3 Reno and 4.4 BSD.
145 Definitions for UNICOS 8.0 and UNICOS 7.C
147 Definitions for Solaris 2.0
149 Definitions for HP-UX 8.0
151 Latest Copyright notices from Berkeley.
153 FLOW-CONTROL: support for RFC-XXXx
158 Fix the "send" command to not send garbage...
160 Fix status message for "skiprc"
162 Make sure to send NAWS after telnet has been suspended
163 or an external command has been run, if the window size
170 Support flowcontrol option in non-linemode servers.
172 -k Server supports Kludge Linemode, but will default to
173 either single character mode or real Linemode support.
174 The user will have to explicitly ask to switch into
175 kludge linemode. ("stty extproc", or escape back to
176 to telnet and say "mode line".)
178 -u Specify the length of the hostname field in the utmp
179 file. Hostname longer than this length will be put
180 into the utmp file in dotted decimal notation, rather
181 than putting in a truncated hostname.
183 -U Registered hosts only. If a reverse hostname lookup
184 fails, the connection will be refused.
187 Allows forwarding of credentials for KRB5.
193 This version of telnet/telnetd has support for both
194 the AUTHENTICATION and ENCRYPTION options. The
195 AUTHENTICATION option is fairly well defined, and
196 an option number has been assigned to it. The
197 ENCRYPTION option is still in a state of flux; an
198 option number has been assigned to, but it is still
199 subject to change. The code is provided in this release
200 for experimental and testing purposes.
202 The telnet "send" command can now be used to send
203 do/dont/will/wont commands, with any telnet option
204 name. The rules for when do/dont/will/wont are sent
205 are still followed, so just because the user requests
206 that one of these be sent doesn't mean that it will
209 The telnet "getstatus" command no longer requires
210 that option printing be enabled to see the response
211 to the "DO STATUS" command.
213 A -n flag has been added to telnetd to disable
216 A new telnet command, "auth" has been added (if
217 AUTHENTICATE is defined). It has four sub-commands,
218 "status", "disable", "enable" and "help".
220 A new telnet command, "encrypt" has been added (if
221 ENCRYPT is defined). It has many sub-commands:
222 "enable", "type", "start", "stop", "input",
223 "-input", "output", "-output", "status", and "help".
225 The LOGOUT option is now supported by both telnet
226 and telnetd, a new command, "logout", was added
229 Several new toggle options were added:
230 "autoencrypt", "autodecrypt", "autologin", "authdebug",
231 "encdebug", "skiprc", "verbose_encrypt"
233 An "rlogin" interface has been added. If the program
234 is named "rlogin", or the "-r" flag is given, then
235 an rlogin type of interface will be used.
236 ~. Terminates the session
237 ~<susp> Suspend the session
238 ~^] Escape to telnet command mode
239 ~~ Pass through the ~.
240 BUG: If you type the rlogin escape character
241 in the middle of a line while in rlogin
242 mode, you cannot erase it or any characters
243 before it. Hopefully this can be fixed
244 in a future release...
248 A "libtelnet.a" has now been created. This libraray
249 contains code that is common to both telnet and
250 telnetd. This is also where library routines that
251 are needed, but are not in the standard C library,
254 The makefiles have been re-done. All of the site
255 specific configuration information has now been put
256 into a single "Config.generic" file, in the top level
257 directory. Changing this one file will take care of
258 all three subdirectories. Also, to add a new/local
259 definition, a "Config.local" file may be created
260 at the top level; if that file exists, the subdirectories
261 will use that file instead of "Config.generic".
263 Many 1-2 line functions in commands.c have been
264 removed, and just inserted in-line, or replaced
269 The non-termio code in both telnet and telnetd was
270 setting/clearing CTLECH in the sg_flags word. This
271 was incorrect, and has been changed to set/clear the
272 LCTLECH bit in the local mode word.
274 The SRCRT #define has been removed. If IP_OPTIONS
275 and IPPROTO_IP are defined on the system, then the
276 source route code is automatically enabled.
278 The NO_GETTYTAB #define has been removed; there
279 is a compatability routine that can be built into
280 libtelnet to achive the same results.
282 The server, telnetd, has been switched to use getopt()
283 for parsing the argument list.
285 The code for getting the input/output speeds via
286 cfgetispeed()/cfgetospeed() was still not quite
287 right in telnet. Posix says if the ispeed is 0,
288 then it is really equal to the ospeed.
290 The suboption processing code in telnet now has
291 explicit checks to make sure that we received
292 the entire suboption (telnetd was already doing this).
294 The telnet code for processing the terminal type
295 could cause a core dump if an existing connection
296 was closed, and a new connection opened without
299 Telnetd was doing a TCSADRAIN when setting the new
300 terminal settings; This is not good, because it means
301 that the tcsetattr() will hang waiting for output to
302 drain, and telnetd is the only one that will drain
303 the output... The fix is to use TCSANOW which does
306 Telnetd was improperly setting/clearing the ISTRIP
307 flag in the c_lflag field, it should be using the
310 When the child process of telnetd was opening the
311 slave side of the pty, it was re-setting the EXTPROC
312 bit too early, and some of the other initialization
313 code was wiping it out. This would cause telnetd
314 to go out of linemode and into single character mode.
316 One instance of leaving linemode in telnetd forgot
317 to send a WILL ECHO to the client, the net result
318 would be that the user would see double character
321 If the MODE was being changed several times very
322 quickly, telnetd could get out of sync with the
323 state changes and the returning acks; and wind up
324 being left in the wrong state.
328 Switch the client to use getopt() for parsing the
329 argument list. The 4.3Reno getopt.c is included for
330 systems that don't have getopt().
332 Use the posix _POSIX_VDISABLE value for what value
333 to use when disabling special characters. If this
334 is undefined, it defaults to 0x3ff.
336 For non-termio systems, TIOCSETP was being used to
337 change the state of the terminal. This causes the
338 input queue to be flushed, which we don't want. This
339 is now changed to TIOCSETN.
341 Take out the "#ifdef notdef" around the code in the
342 server that generates a "sync" when the pty oputput
343 is flushed. The potential problem is that some older
344 telnet clients may go into an infinate loop when they
345 receive a "sync", if so, the server can be compiled
346 with "NO_URGENT" defined.
348 Fix the client where it was setting/clearing the OPOST
349 bit in the c_lflag field, not the c_oflag field.
351 Fix the client where it was setting/clearing the ISTRIP
352 bit in the c_lflag field, not the c_iflag field. (On
353 4.3Reno, this is the ECHOPRT bit in the c_lflag field.)
354 The client also had its interpretation of WILL BINARY
355 and DO BINARY reversed.
357 Fix a bug in client that would cause a core dump when
358 attempting to remove the last environment variable.
360 In the client, there were a few places were switch()
361 was being passed a character, and if it was a negative
362 value, it could get sign extended, and not match
363 the 8 bit case statements. The fix is to and the
364 switch value with 0xff.
366 Add a couple more printoption() calls in the client, I
367 don't think there are any more places were a telnet
368 command can be received and not printed out when
371 A new flag has been added to the client, "-a". Currently,
372 this just causes the USER name to be sent across, in
373 the future this may be used to signify that automatic
374 authentication is requested.
376 The USER variable is now only sent by the client if
377 the "-a" or "-l user" options are explicity used, or
378 if the user explicitly asks for the "USER" environment
379 variable to be exported. In the server, if it receives
380 the "USER" environment variable, it won't print out the
381 banner message, so that only "Password:" will be printed.
382 This makes the symantics more like rlogin, and should be
383 more familiar to the user. (People are not used to
384 getting a banner message, and then getting just a
387 Re-vamp the code for starting up the child login
388 process. The code was getting ugly, and it was
389 hard to tell what was really going on. What we
390 do now is after the fork(), in the child:
391 1) make sure we have no controlling tty
392 2) open and initialize the tty
393 3) do a setsid()/setpgrp()
394 4) makes the tty our controlling tty.
395 On some systems, #2 makes the tty our controlling
396 tty, and #4 is a no-op. The parent process does
397 a gets rid of any controlling tty after the child
400 Use the strdup() library routine in telnet, instead
401 of the local savestr() routine. If you don't have
402 strdup(), you need to define NO_STRDUP.
404 Add support for ^T (SIGINFO/VSTATUS), found in the
405 4.3Reno distribution. This maps to the AYT character.
406 You need a 4-line bugfix in the kernel to get this
409 > *** tty_pty.c.ORG Tue Sep 11 09:41:53 1990
410 > --- tty_pty.c Tue Sep 11 17:48:03 1990
413 > if ((tp->t_lflag&NOFLSH) == 0)
414 > ttyflush(tp, FREAD|FWRITE);
415 > ! pgsignal(tp->t_pgrp, *(unsigned int *)data);
419 > if ((tp->t_lflag&NOFLSH) == 0)
420 > ttyflush(tp, FREAD|FWRITE);
421 > ! pgsignal(tp->t_pgrp, *(unsigned int *)data, 1);
422 > ! if ((*(unsigned int *)data == SIGINFO) &&
423 > ! ((tp->t_lflag&NOKERNINFO) == 0))
428 The client is now smarter when setting the telnet escape
429 character; it only sets it to one of VEOL and VEOL2 if
430 one of them is undefined, and the other one is not already
431 defined to the telnet escape character.
433 Handle TERMIOS systems that have seperate input and output
434 line speed settings imbedded in the flags.
436 Many other minor bug fixes.
439 Re-organize makefiles and source tree. The telnet/Source
440 directory is now gone, and all the source that was in
441 telnet/Source is now just in the telnet directory.
443 Seperate makefile for each system are now gone. There
444 are two makefiles, Makefile and Makefile.generic.
445 The "Makefile" has the definitions for the various
446 system, and "Makefile.generic" does all the work.
447 There is a variable called "WHAT" that is used to
448 specify what to make. For example, in the telnet
449 directory, you might say:
450 make 4.4bsd WHAT=clean
451 to clean out the directory.
453 Add support for the ENVIRON and XDISPLOC options.
454 In order for the server to work, login has to have
455 the "-p" option to preserve environment variables.
457 Add the SOFT_TAB and LIT_ECHO modes in the LINEMODE support.
459 Add the "-l user" option to command line and open command
460 (This is passed through the ENVIRON option).
462 Add the "-e" command line option, for setting the escape
465 Add the "-D", diagnostic, option to the server. This allows
466 the server to print out debug information, which is very
467 useful when trying to debug a telnet that doesn't have any
470 Turn off the literal next character when not in LINEMODE.
472 Don't recognize ^Y locally, just pass it through.
474 Make minor modifications for Sun4.0 and Sun4.1
476 Add support for both FORW1 and FORW2 characters. The
477 telnet escpape character is set to whichever of the
478 two is not being used. If both are in use, the escape
479 character is not set, so when in linemode the user will
480 have to follow the escape character with a <CR> or <EOF)
481 to get it passed through.
483 Commands can now be put in single and double quotes, and
484 a backslash is now an escape character. This is needed
485 for allowing arbitrary strings to be assigned to environment
488 Switch telnetd to use macros like telnet for keeping
489 track of the state of all the options.
491 Fix telnetd's processing of options so that we always do
492 the right processing of the LINEMODE option, regardless
493 of who initiates the request to turn it on. Also, make
494 sure that if the other side went "WILL ECHO" in response
495 to our "DO ECHO", that we send a "DONT ECHO" to get the
496 option turned back off!
498 Fix the TERMIOS setting of the terminal speed to handle both
499 BSD's seperate fields, and the SYSV method of CBAUD bits.
501 Change how we deal with the other side refusing to enable
502 an option. The sequence used to be: send DO option; receive
503 WONT option; send DONT option. Now, the sequence is: send
504 DO option; receive WONT option. Both should be valid
505 according to the spec, but there has been at least one
506 client implementation of telnet identified that can get
507 really confused by this. (The exact sequence, from a trace
508 on the server side, is (numbers are number of responses that
509 we expect to get after that line...):
511 send WILL ECHO 1 (initial request)
512 send WONT ECHO 2 (server is changing state)
513 recv DO ECHO 1 (first reply, ok. expect DONT ECHO next)
514 send WILL ECHO 2 (server changes state again)
515 recv DONT ECHO 1 (second reply, ok. expect DO ECHO next)
516 recv DONT ECHO 0 (third reply, wrong answer. got DONT!!!)
517 *** send WONT ECHO (send WONT to acknowledge the DONT)
518 send WILL ECHO 1 (ask again to enable option)
526 (and the last 5 lines loop forever)
528 The line with the "***" is last of the WILL/DONT/WONT sequence.
529 The change to the server to not generate that makes this same
541 There is other option negotiation going on, and not sending
542 the third part changes some of the timings, but this specific
543 example no longer gets stuck in a loop. The "telnet.state"
544 file has been modified to reflect this change to the algorithm.
546 A bunch of miscellaneous bug fixes and changes to make
549 This version of telnet also has some KERBEROS stuff in
550 it. This has not been tested, it uses an un-authorized
551 telnet option number, and uses an out-of-date version
552 of the (still being defined) AUTHENTICATION option.
553 There is no support for this code, do not enable it.
557 CHANGES/BUGFIXES SINCE LAST RELEASE:
558 Some support for IP TOS has been added. Requires that the
559 kernel support the IP_TOS socket option (currently this
560 is only in UNICOS 6.0).
562 Both telnet and telnetd now use the cc_t typedef. typedefs are
563 included for systems that don't have it (in termios.h).
565 SLC_SUSP was not supported properly before. It is now.
567 IAC EOF was not translated properly in telnetd for SYSV_TERMIO
568 when not in linemode. It now saves a copy of the VEOF character,
569 so that when ICANON is turned off and we can't trust it anymore
570 (because it is now the VMIN character) we use the saved value.
572 There were two missing "break" commands in the linemode
573 processing code in telnetd.
575 Telnetd wasn't setting the kernel window size information
576 properly. It was using the rows for both rows and columns...
578 Questions/comments go to
585 README: You are reading it.
588 This file contains all the OS specific definitions. It
589 has pre-definitions for many common system types, and is
590 in standard makefile fromat. See the comments at the top
591 of the file for more information.
594 This is not part of the distribution, but if this file exists,
595 it is used instead of "Config.generic". This allows site
596 specific configuration without having to modify the distributed
597 "Config.generic" file.
600 This file contains the diffs for the changes needed for the
601 kernel to support LINEMODE is the server. These changes are
602 for a 4.3BSD system. You may need to make some changes for
603 your particular system.
605 There is a new bit in the terminal state word, TS_EXTPROC.
606 When this bit is set, several aspects of the terminal driver
607 are disabled. Input line editing, character echo, and
608 mapping of signals are all disabled. This allows the telnetd
609 to turn of these functions when in linemode, but still keep
610 track of what state the user wants the terminal to be in.
614 TIOCEXT Turn on/off the TS_EXTPROC bit
615 TIOCGSTATE Get t_state of tty to look at TS_EXTPROC bit
616 TIOCSIG Generate a signal to processes in the
617 current process group of the pty.
619 There is a new mode for packet driver, the TIOCPKT_IOCTL bit.
620 When packet mode is turned on in the pty, and the TS_EXTPROC
621 bit is set, then whenever the state of the pty is changed, the
622 next read on the master side of the pty will have the TIOCPKT_IOCTL
623 bit set, and the data will contain the following:
631 This allows the process on the server side of the pty to know
632 when the state of the terminal has changed, and what the new
635 However, if you define USE_TERMIO or SYSV_TERMIO, the code will
636 expect that the structure returned in the TIOCPKT_IOCTL is
637 the termio/termios structure.
640 This file contains the changes needed for the stty(1) program
641 to report on the current status of the TS_EXTPROC bit. It also
642 allows the user to turn on/off the TS_EXTPROC bit. This is useful
643 because it allows the user to say "stty -extproc", and the
644 LINEMODE option will be automatically disabled, and saying "stty
645 extproc" will re-enable the LINEMODE option.
648 Both the client and server have code in them to deal
649 with option negotiation loops. The algorithm that is
650 used is described in this file.
653 This directory contains the client code. No kernel changes are
654 needed to use this code.
657 This directory contains the server code. If LINEMODE or KLUDGELINEMODE
658 are defined, then the kernel modifications listed above are needed.
661 This directory contains code that is common to both the client
665 This directory has a new <arpa/telnet.h>
667 libtelnet/Makefile.4.4:
669 telnetd/Makefile.4.4:
670 These are the makefiles that can be used on a 4.3Reno
671 system when this software is installed in /usr/src/lib/libtelnet,
672 /usr/src/libexec/telnetd, and /usr/src/usr.bin/telnet.
675 The following TELNET options are supported:
678 The LINEMODE option is supported as per RFC1116. The
679 FORWARDMASK option is not currently supported.
681 BINARY: The client has the ability to turn on/off the BINARY
682 option in each direction. Turning on BINARY from
683 server to client causes the LITOUT bit to get set in
684 the terminal driver on both ends, turning on BINARY
685 from the client to the server causes the PASS8 bit
686 to get set in the terminal driver on both ends.
689 This is supported as per RFC1091. On the server side,
690 when a terminal type is received, termcap/terminfo
691 is consulted to determine if it is a known terminal
692 type. It keeps requesting terminal types until it
693 gets one that it recongnizes, or hits the end of the
694 list. The server side looks up the entry in the
695 termcap/terminfo data base, and generates a list of
696 names which it then passes one at a time to each
697 request for a terminal type, duplicating the last
698 entry in the list before cycling back to the beginning.
700 NAWS: The Negotiate about Window Size, as per RFC 1073.
703 Implemented as per RFC 1079
706 Implemented as per RFC 1080
715 LOGOUT: As per RFC 727
718 The server will send its current status upon
719 request. It does not ask for the clients status.
720 The client will request the servers current status
721 from the "send getstatus" command.
724 This option is currently being defined by the IETF
725 Telnet Working Group, and an RFC has not yet been
726 issued, but should be in the near future...
729 This functionality can be done through the ENVIRON
730 option, it is added here for completeness.
733 This option is currently being defined by the IETF
734 Telnet Working Group, and an RFC has not yet been
735 issued. The basic framework is pretty much decided,
736 but the definitions for the specific authentication
737 schemes is still in a state of flux.
740 This option is currently being defined by the IETF
741 Telnet Working Group, and an RFC has not yet been
742 issued. The draft RFC is still in a state of flux,
743 so this code may change in the future.