date and time created 91/01/17 18:23:53 by bostic
[unix-history] / usr / src / usr.bin / telnet / README
CommitLineData
bd994ff1
PB
1
2
3This is a distribution of both client and server telnet. These programs
4have been compiled on:
5 telnet telnetd
6 BSD 4.4 X X
7 UNICOS 5.1 X X
8 UNICOS 6.0 X X
9 SunOs 3.5 X X (no linemode in server)
10 SunOs 4.0.3c X X (no linemode in server)
11 SunOs 4.1 X X (no linemode in server)
12 DYNIX V3.0.17.9 X X (no linemode in server)
13 Ultrix 3.1 X X (no linemode in server)
14 Ultrix 4.0 X (server compiles, but doesn't
15 work with /bin/csh)
16
17In addition, previous versions have been compiled on the following
18machines, but were not available for testing this version.
19 telnet telnetd
20 BSD 4.3 X X (no linemode in server)
21 DYNIX V3.0.12 X X (no linemode in server)
22
23September 14, 1990:
24
25 Switch the client to use getopt() for parsing the
26 argument list. The 4.3Reno getopt.c is included for
27 systems that don't have getopt().
28
29 Use the posix _POSIX_VDISABLE value for what value
30 to use when disabling special characters. If this
31 is undefined, it defaults to 0x3ff.
32
33 For non-termio systems, TIOCSETP was being used to
34 change the state of the terminal. This causes the
35 input queue to be flushed, which we don't want. This
36 is now changed to TIOCSETN.
37
38 Take out the "#ifdef notdef" around the code in the
39 server that generates a "sync" when the pty oputput
40 is flushed. The potential problem is that some older
41 telnet clients may go into an infinate loop when they
42 receive a "sync", if so, the server can be compiled
43 with "NO_URGENT" defined.
44
45 Fix the client where it was setting/clearing the OPOST
46 bit in the c_lflag field, not the c_oflag field.
47
48 Fix the client where it was setting/clearing the ISTRIP
49 bit in the c_lflag field, not the c_iflag field. (On
50 4.3Reno, this is the ECHOPRT bit in the c_lflag field.)
51 The client also had its interpretation of WILL BINARY
52 and DO BINARY reversed.
53
54 Fix a bug in client that would cause a core dump when
55 attempting to remove the last environment variable.
56
57 In the client, there were a few places were switch()
58 was being passed a character, and if it was a negative
59 value, it could get sign extended, and not match
60 the 8 bit case statements. The fix is to and the
61 switch value with 0xff.
62
63 Add a couple more printoption() calls in the client, I
64 don't think there are any more places were a telnet
65 command can be received and not printed out when
66 "options" is on.
67
68 A new flag has been added to the client, "-a". Currently,
69 this just causes the USER name to be sent across, in
70 the future this may be used to signify that automatic
71 authentication is requested.
72
73 The USER variable is now only sent by the client if
74 the "-a" or "-l user" options are explicity used, or
75 if the user explicitly asks for the "USER" environment
76 variable to be exported. In the server, if it receives
77 the "USER" environment variable, it won't print out the
78 banner message, so that only "Password:" will be printed.
79 This makes the symantics more like rlogin, and should be
80 more familiar to the user. (People are not used to
81 getting a banner message, and then getting just a
82 "Password:" prompt.)
83
84 Re-vamp the code for starting up the child login
85 process. The code was getting ugly, and it was
86 hard to tell what was really going on. What we
87 do now is after the fork(), in the child:
88 1) make sure we have no controlling tty
89 2) open and initialize the tty
90 3) do a setsid()/setpgrp()
91 4) makes the tty our controlling tty.
92 On some systems, #2 makes the tty our controlling
93 tty, and #4 is a no-op. The parent process does
94 a gets rid of any controlling tty after the child
95 is fork()ed.
96
97 Use the strdup() library routine in telnet, instead
98 of the local savestr() routine. If you don't have
99 strdup(), you need to define NO_STRDUP.
100
101 Add support for ^T (SIGINFO/VSTATUS), found in the
102 4.3Reno distribution. This maps to the AYT character.
103 You need a 4-line bugfix in the kernel to get this
104 to work properly:
105
106 > *** tty_pty.c.ORG Tue Sep 11 09:41:53 1990
107 > --- tty_pty.c Tue Sep 11 17:48:03 1990
108 > ***************
109 > *** 609,613 ****
110 > if ((tp->t_lflag&NOFLSH) == 0)
111 > ttyflush(tp, FREAD|FWRITE);
112 > ! pgsignal(tp->t_pgrp, *(unsigned int *)data);
113 > return(0);
114 > }
115 > --- 609,616 ----
116 > if ((tp->t_lflag&NOFLSH) == 0)
117 > ttyflush(tp, FREAD|FWRITE);
118 > ! pgsignal(tp->t_pgrp, *(unsigned int *)data, 1);
119 > ! if ((*(unsigned int *)data == SIGINFO) &&
120 > ! ((tp->t_lflag&NOKERNINFO) == 0))
121 > ! ttyinfo(tp);
122 > return(0);
123 > }
124
125 The client is now smarter when setting the telnet escape
126 character; it only sets it to one of VEOL and VEOL2 if
127 one of them is undefined, and the other one is not already
128 defined to the telnet escape character.
129
130 Handle TERMIOS systems that have seperate input and output
131 line speed settings imbedded in the flags.
132
133 Many other minor bug fixes.
134
135June 20, 1990:
136 Re-organize makefiles and source tree. The telnet/Source
137 directory is now gone, and all the source that was in
138 telnet/Source is now just in the telnet directory.
139
140 Seperate makefile for each system are now gone. There
141 are two makefiles, Makefile and Makefile.generic.
142 The "Makefile" has the definitions for the various
143 system, and "Makefile.generic" does all the work.
144 There is a variable called "WHAT" that is used to
145 specify what to make. For example, in the telnet
146 directory, you might say:
147 make 4.4bsd WHAT=clean
148 to clean out the directory.
149
150 Add support for the ENVIRON and XDISPLOC options.
151 In order for the server to work, login has to have
152 the "-p" option to preserve environment variables.
153
154 Add the SOFT_TAB and LIT_ECHO modes in the LINEMODE support.
155
156 Add the "-l user" option to command line and open command
157 (This is passed through the ENVIRON option).
158
159 Add the "-e" command line option, for setting the escape
160 character.
161
162 Add the "-D", diagnostic, option to the server. This allows
163 the server to print out debug information, which is very
164 useful when trying to debug a telnet that doesn't have any
165 debugging ability.
166
167 Turn off the literal next character when not in LINEMODE.
168
169 Don't recognize ^Y locally, just pass it through.
170
171 Make minor modifications for Sun4.0 and Sun4.1
172
173 Add support for both FORW1 and FORW2 characters. The
174 telnet escpape character is set to whichever of the
175 two is not being used. If both are in use, the escape
176 character is not set, so when in linemode the user will
177 have to follow the escape character with a <CR> or <EOF)
178 to get it passed through.
179
180 Commands can now be put in single and double quotes, and
181 a backslash is now an escape character. This is needed
182 for allowing arbitrary strings to be assigned to environment
183 variables.
184
185 Switch telnetd to use macros like telnet for keeping
186 track of the state of all the options.
187
188 Fix telnetd's processing of options so that we always do
189 the right processing of the LINEMODE option, regardless
190 of who initiates the request to turn it on. Also, make
191 sure that if the other side went "WILL ECHO" in response
192 to our "DO ECHO", that we send a "DONT ECHO" to get the
193 option turned back off!
194
195 Fix the TERMIOS setting of the terminal speed to handle both
196 BSD's seperate fields, and the SYSV method of CBAUD bits.
197
198 Change how we deal with the other side refusing to enable
199 an option. The sequence used to be: send DO option; receive
200 WONT option; send DONT option. Now, the sequence is: send
201 DO option; receive WONT option. Both should be valid
202 according to the spec, but there has been at least one
203 client implementation of telnet identified that can get
204 really confused by this. (The exact sequence, from a trace
205 on the server side, is (numbers are number of responses that
206 we expect to get after that line...):
207
208 send WILL ECHO 1 (initial request)
209 send WONT ECHO 2 (server is changing state)
210 recv DO ECHO 1 (first reply, ok. expect DONT ECHO next)
211 send WILL ECHO 2 (server changes state again)
212 recv DONT ECHO 1 (second reply, ok. expect DO ECHO next)
213 recv DONT ECHO 0 (third reply, wrong answer. got DONT!!!)
214 *** send WONT ECHO (send WONT to acknowledge the DONT)
215 send WILL ECHO 1 (ask again to enable option)
216 recv DO ECHO 0
217
218 recv DONT ECHO 0
219 send WONT ECHO 1
220 recv DONT ECHO 0
221 recv DO ECHO 1
222 send WILL ECHO 0
223 (and the last 5 lines loop forever)
224
225 The line with the "***" is last of the WILL/DONT/WONT sequence.
226 The change to the server to not generate that makes this same
227 example become:
228
229 send will ECHO 1
230 send wont ECHO 2
231 recv do ECHO 1
232 send will ECHO 2
233 recv dont ECHO 1
234 recv dont ECHO 0
235 recv do ECHO 1
236 send will ECHO 0
237
238 There is other option negotiation going on, and not sending
239 the third part changes some of the timings, but this specific
240 example no longer gets stuck in a loop. The "telnet.state"
241 file has been modified to reflect this change to the algorithm.
242
243 A bunch of miscellaneous bug fixes and changes to make
244 lint happier.
245
246 This version of telnet also has some KERBEROS stuff in
247 it. This has not been tested, it uses an un-authorized
248 telnet option number, and uses an out-of-date version
249 of the (still being defined) AUTHENTICATION option.
250 There is no support for this code, do not enable it.
251
252
253March 1, 1990:
254CHANGES/BUGFIXES SINCE LAST RELEASE:
255 Some support for IP TOS has been added. Requires that the
256 kernel support the IP_TOS socket option (currently this
257 is only in UNICOS 6.0).
258
259 Both telnet and telnetd now use the cc_t typedef. typedefs are
260 included for systems that don't have it (in termios.h).
261
262 SLC_SUSP was not supported properly before. It is now.
263
264 IAC EOF was not translated properly in telnetd for SYSV_TERMIO
265 when not in linemode. It now saves a copy of the VEOF character,
266 so that when ICANON is turned off and we can't trust it anymore
267 (because it is now the VMIN character) we use the saved value.
268
269 There were two missing "break" commands in the linemode
270 processing code in telnetd.
271
272 Telnetd wasn't setting the kernel window size information
273 properly. It was using the rows for both rows and columns...
274
275Questions/comments go to
276 David Borman
277 Cray Research, Inc.
278 655F Lone Oak Drive
279 Eagan, MN 55123
280 dab@cray.com.
281
282README: You are reading it.
283
284kern.diff:
285 This file contains the diffs for the changes needed for the
286 kernel to support LINEMODE is the server. These changes are
287 for a 4.3BSD system. You may need to make some changes for
288 your particular system.
289
290 There is a new bit in the terminal state word, TS_EXTPROC.
291 When this bit is set, several aspects of the terminal driver
292 are disabled. Input line editing, character echo, and
293 mapping of signals are all disabled. This allows the telnetd
294 to turn of these functions when in linemode, but still keep
295 track of what state the user wants the terminal to be in.
296
297 New ioctl()s:
298
299 TIOCEXT Turn on/off the TS_EXTPROC bit
300 TIOCGSTATE Get t_state of tty to look at TS_EXTPROC bit
301 TIOCSIG Generate a signal to processes in the
302 current process group of the pty.
303
304 There is a new mode for packet driver, the TIOCPKT_IOCTL bit.
305 When packet mode is turned on in the pty, and the TS_EXTPROC
306 bit is set, then whenever the state of the pty is changed, the
307 next read on the master side of the pty will have the TIOCPKT_IOCTL
308 bit set, and the data will contain the following:
309 struct xx {
310 struct sgttyb a;
311 struct tchars b;
312 struct ltchars c;
313 int t_state;
314 int t_flags;
315 }
316 This allows the process on the server side of the pty to know
317 when the state of the terminal has changed, and what the new
318 state is.
319
320 However, if you define USE_TERMIO or SYSV_TERMIO, the code will
321 expect that the structure returned in the TIOCPKT_IOCTL is
322 the termio/termios structure.
323
324stty.diff:
325 This file contains the changes needed for the stty(1) program
326 to report on the current status of the TS_EXTPROC bit. It also
327 allows the user to turn on/off the TS_EXTPROC bit. This is useful
328 because it allows the user to say "stty -extproc", and the
329 LINEMODE option will be automatically disabled, and saying "stty
330 extproc" will re-enable the LINEMODE option.
331
332telnet.state:
333 Both the client and server have code in them to deal
334 with option negotiation loops. The algorithm that is
335 used is described in this file.
336
337telnet:
338 This directory contains the client code. No kernel changes are
339 needed to use this code.
340
341telnetd:
342 This directory contains the server code. If LINEMODE or KLUDGELINEMODE
343 are defined, then the kernel modifications listed above are needed.
344
345arpa:
346 This directory has a new <arpa/telnet.h>
347
348
349The following TELNET options are supported:
350
351 LINEMODE:
352 The LINEMODE option is supported as per RFC1116. The
353 FORWARDMASK option is not currently supported.
354
355 BINARY: The client has the ability to turn on/off the BINARY
356 option in each direction. Turning on BINARY from
357 server to client causes the LITOUT bit to get set in
358 the terminal driver on both ends, turning on BINARY
359 from the client to the server causes the PASS8 bit
360 to get set in the terminal driver on both ends.
361
362 TERMINAL-TYPE:
363 This is supported as per RFC1091. On the server side,
364 when a terminal type is received, termcap/terminfo
365 is consulted to determine if it is a known terminal
366 type. It keeps requesting terminal types until it
367 gets one that it recongnizes, or hits the end of the
368 list. The server side looks up the entry in the
369 termcap/terminfo data base, and generates a list of
370 names which it then passes one at a time to each
371 request for a terminal type, duplicating the last
372 entry in the list before cycling back to the beginning.
373
374 NAWS: The Negotiate about Window Size, as per RFC 1073.
375
376 TERMINAL-SPEED:
377 Implemented as per RFC 1079
378
379 TOGGLE-FLOW-CONTROL:
380 Implemented as per RFC 1080
381
382 TIMING-MARK:
383 As per RFC 860
384
385 SGA: As per RFC 858
386
387 ECHO: As per RFC 857
388
389 STATUS:
390 The server will send its current status upon
391 request. It does not ask for the clients status.
392 The client will request the servers current status
393 from the "send getstatus" command.
394
395 ENVIRON:
396 This option is currently being defined by the IETF
397 Telnet Working Group, and an RFC has not yet been
398 issued, but should be in the near future...
399
400 X-DISPLAY-LOCATION:
401 This functionality can be done through the ENVIRON
402 option, it is added here for completeness.
403
404Look at the Makefile for comments about #define paramaters that need
405to be set up for your individual site. There are also several Makefiles
406for various systems that these have been compiled on.