Commit | Line | Data |
---|---|---|
bd994ff1 PB |
1 | |
2 | ||
3 | This is a distribution of both client and server telnet. These programs | |
4 | have 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 | ||
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 | BSD 4.3 X X (no linemode in server) | |
21 | DYNIX V3.0.12 X X (no linemode in server) | |
22 | ||
23 | September 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 | ||
135 | June 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 | ||
253 | March 1, 1990: | |
254 | CHANGES/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 | ||
275 | Questions/comments go to | |
276 | David Borman | |
277 | Cray Research, Inc. | |
278 | 655F Lone Oak Drive | |
279 | Eagan, MN 55123 | |
280 | dab@cray.com. | |
281 | ||
282 | README: You are reading it. | |
283 | ||
284 | kern.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 | ||
324 | stty.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 | ||
332 | telnet.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 | ||
337 | telnet: | |
338 | This directory contains the client code. No kernel changes are | |
339 | needed to use this code. | |
340 | ||
341 | telnetd: | |
342 | This directory contains the server code. If LINEMODE or KLUDGELINEMODE | |
343 | are defined, then the kernel modifications listed above are needed. | |
344 | ||
345 | arpa: | |
346 | This directory has a new <arpa/telnet.h> | |
347 | ||
348 | ||
349 | The 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 | ||
404 | Look at the Makefile for comments about #define paramaters that need | |
405 | to be set up for your individual site. There are also several Makefiles | |
406 | for various systems that these have been compiled on. |