kirkham@brahma.trl.oz.au (Daniel Kirkham - NSS) (05/31/90)
In article <7897@brazos.Rice.edu> paul@popcbr.ROCKEFELLER.EDU (Paul Alukal) writes > The second (and main) problem is with a VISTA VCP-1000 Terminal Server. > Looks like the Telnet implementation is not working properly on it. The > Control characters (like erase character, erase line etc) all gets messed > up if a remote login is done and many other problems. Did anyone else > come across these kind of problems on the Vista? Any help would be > appreciated. Can send mail directly to paul@popcbr.rockefeller.edu In article <7959@brazos.Rice.edu> lora@popcbr.ROCKEFELLER.EDU (Lora Frisch) writes: >There is a bug in Datability's implementation of telnet on their Vista >terminal server. If you use the Vista to telnet to a Unix host all is >well, but if you then telnet or rlogin to another Unix system, your >hotkeys are trashed. For instance, Control-C is used for interrupt, after >using rlogin to get to a second host, Control-C is now delete. Other hot >keys are simply missing. We have attempted various stty commands to >compensate for this to no avail. > >Datability has declared this a verified bug, but they are not able to give >a estimated date when the problem will be fixed. I have spent some time looking at the problem, and have decided that the initial part of the problem is with the implementation of in.telnetd. The explanation: Unlike the unix hosts, the Vista telnet code translates ^C, Delete, and ^A into special Telnet escape sequences, as described in RFC854: NAME CODE HEX MEANING NOP 241 f1 No operation. Data Mark 242 f2 The data stream portion of a Synch. This should always be accompanied by a TCP Urgent notification. Break 243 f3 NVT character BRK. Interrupt Process 244 f4 The function IP. Abort output 245 f5 The function AO. Are You There 246 f6 The function AYT. Erase character 247 f7 The function EC. Erase Line 248 f8 The function EL. Go ahead 249 f9 The GA signal. IAC 255 ff Data Byte 255. The sequences are usually IAC followed by one of the others. When these codes are received by in.telnetd, it must translate them into the equivalent indication to the process on the slave (tty) side of a pty/tty pair. In.telnetd does this in two ways. It will usually find the current settings of the processes erase and intr characters with an ioctl(2) call to the pty device. The contents seem to mirror the corresponding tty device. If the program on the slave side instructs the tty to go into RAW mode, or sets the intr character to -1 (which causes the process never to get a SIGINT, just the character typed) in.telnetd can no longer determine what the interrupt or erase characters are, and, as a result, an interrupt is sent as the default interrupt character (you've guessed it, Delete!), and erase (originally delete) ends up being ignored. Similar things happen to the other special Telnet sequences. Of course, telnet, rlogin and screen are affected by this. There are probably other programs. These special characters are revealed by typing `show profile' on the Vista. Near the bottom you will see something like this: End of Record Disabled Nop ^@ Data Mark Disabled Break ^A Int Process ^C Abort Output ^O Attention ^T Erase Char Disabled Erase Line ^U Goahead Disabled One would expect you could do somthing like `set profile ip disable'. Unfortunately you can't (according to the documentation and the Vista itself). But you also cannot do `set profile ip ^P' or the like, that the documentation suggests you can do. This, I feel, is also a major bug. I have made some modifications to in.telnetd (based on the BSD4.3 sources) which translates the Telnet sequences directly into ^C, delete, ^O, etc.. This solves the problem, with the disadvantage that you now have to maintain your own version of Telnet. I can supply the diffs on request. Daniel Kirkham, ACSnet d.kirkham@trl.oz Telecom Research Laboratories, Internet d.kirkham@trl.oz.au P.O. Box 249, Clayton, UUCP {uunet,ukc}!munnari!trl.oz!d.kirkham Victoria 3168, AUSTRALIA. VoiceNet + 61 3 541 6328