TNOS Release Notes - Release 2.22 Brian A. Lantz, brian@lantz.com v1.00, June 28, 1997 These are the FINAL Release Notes for release 2.22 of TNOS. Hope- fully, this list of changes will give you an idea of the scope of work that has occured since the release of TNOS 2.21. ______________________________________________________________________ Table of Contents: 1. Bug Fixes 2. Improvements and Enhancements 3. Minor Changes 4. Remaining Known Bugs 5. To-Do List ______________________________________________________________________ 1. Bug Fixes The following bugs have been squashed. o Minor browser fix to use only the LAST tag, if multiples exist An old HTML trick was to define multiple TITLEs on a page, to get a kinda scrolling marquee effect from the title in the window's titlebar changing. The TNOS browser wasn't set up to properly discard all but the final one. o Cleanup up some code conditionals when forwarding and converse are omitted o Cleanup to again allow MBFWD flag to be undefined o Proper treatment of PBBS messages with callsign fields > 6 characters long When trying to send via PBBS forwarding messages with Internet addresses that had the user or first section of the hostname with more than 6 characters, previously this would be re- addressed as 'areaname@areaname', using the current area's name. This was NEVER correct. Since non-ham messages should NOT be passing via PBBS forwarding, such messages will now be marked as deleted (if in personal areas) and removed from the forwarding queues. o Fixed where rejected personal messages weren't being deleted from mailboxes o Corrected formatting of TCB in 'tcp view' command o Fixed a linking problem if HTTP defined but not BROWSER o A workaround for a libc bug in free() Some versions of GNU libc (at least some for Linux) have a bad bug that once it happens, a call to __libc_free() never returns. I have added code to the Unix version to keep this from disabling a system indefinitely. While I cannot recover gracefully from this, if a call to free takes longer than 60 seconds to return, then TNOS is exited. This allows properly configured systems with restart scripts (or an entry in the inittab file) to only be 'locked up' for one minute due to this libc bug. I have no idea why this is happening in the library, but it SEEMS to be related to a free getting called while the OS is swapping to disk. o Fixed an incompatibility between SETPSINFO flag an environment variables The SETPSINFO code does it's magic by basically trashing the command line arguments and environment variables. While I knew this when I added the code for the SETPSINFO, I hadn't thought of possible problems. A couple of places in the code used environment variables (if they existed) while we now effectively disabled. In addition, depending on the timing on startup, the TERM environment variable would (at times) be cleared before the NCURSES code had a chance to read it. o Re-enabled '412 No newsgroup selected' NNTP server message o Fixed a bug in the HTTP server that preventing using ports other than 80 o Fixed crash if <PgUp> used from Command Session o FBB forwarding problem if all messages in a transfer refused It seems that on occasion with FBB, if an entire negotiated transfer is rejected (all are answered as '-'), and there are more in that section, then the rest would be ignored and also marked as deleted. o FBB/Xfwd problem if 'SB'ed message in personal area Also, if a message in a negotiated transfer (contained in a personal mail area) was original sent as a 'SB', then the other messages in that transfer were also marked as 'SB'. This one, while VERY rare, was a bear to find ;-) And, messages MARKED as 'SB' (as above, in a personal area) were NOT getting properly deleted (because of the 'B'). o Fixed a buglet with unusually 'Sx' lines in reject checking o Fixed the 'time' server to properly adjust to UTC o Made a few minor forwarding mods, to handle rare quirks o Fixed the 'ping of self' resource contention buglet If from your TNOS console you ping'ed your self, a crash would usually follow. This was caused by a timing problem. When the raw IP socket was opened to send the ping, it added an entry into a table. That same table is traversed when an incoming packet is received. When the send of the ping is complete, that entry is removed. What was happening was that the table was having the entry removed WHILE it was being traversed. This timing was only 'just right' when pinging from the console; pinging yourself from the PBBS didn't cause the problem. o Fixed a problem of occasional non-clearing of HTTP connections This occured when the 'http simult' value was reached, a connection was waiting for a 'slot' to get it's data with, and the user impatiently disconnected the socket. It was compounded by trying to have one counter doing two functions (obviously, not very well ;-) o Fixed a bug when 'conv entrychannel' wasn't being used for telnet connects o Fixed bug where bad rewrite file could abort forwarding session o All the above included in 2.22b1 o Added patch from Gareth to do White Page lookups properly w/out ASKHOME o Minor fix for NNTPCLI support o Minor fix for newer LIBC jmp_buf.h file under Linux o Minor fix to area cleanup code, when exiting BBS o Minor fix in rspf.c to prevent calling set_timer from a null route o Minor fixed in wildmat.c to prevent calling with empty or null string o Fix for obscure statline problem o All the above included in 2.22b2 o Fixed a problem with large SOA's being output if 'dom tr on' o Fixed an improperly dereferenced pointer in fbbfwd.c o Added code to convert to lowercase username in HTTP PBBS code o Fixed an obscure bug with forward sessions and keyboard locking o Workaround for bug where some PBBSs send an extra forwarding prompt o Fixed a rare problem with F9'ing from Command to Trace session o Fixed a fwding problem if more than one Message-Id lines in a message o Fixed a problem with AXUI and digis o All the above included in 2.22b3 o Plugged an obscure security hole with PBBS finger command o Fixed a problem accessing sockets with TNOS/DOS 2. Improvements and Enhancements The following optimizations and improvements have occurred. o Added support to the Browser for <MARQUEE> tags This scrolling marquee is placed on the top line of the three line control area at the bottom of the browser screen. If an ISINDEX tag is present on the same page as a MARQUEE, the MARQUEE is ignored, since the ISINDEX instructions use the same line in the control area. Also, if there are more than one MARQUEE tags in a page, the last one is the one displayed. o TNOS Statusline News Server added Building on the browser marquee code, the statusline for the Command Session can now have a marquee which gets updated from a special URL at www.lantz.com. NOTE: This server is only compiled in if the BROWSER flag is set! To enable display of the Statusline News Server, you need two commands. The first is 'start statnews'. This retrieves the current news info from www.lantz.com, and then it waits till the top of the next hour, and does it again. While the updates occur in minute zero of the hour, the second is purposely randomized based on the last part of the 'ip address', to keep from having a 'pile up' on second zero ;-) The updating of this data can be stopped with 'stop statnews'. You can do a 'start statnews' at any time, to single to that process for it to re-read the News URL at that time, if you wish. The second step is that you need to add a 'M' to your 'statmode' command. If you are not using a 'statmode', then this is part of the default display. A 'stop statnews' command has no effect on this, though. If the 'M'arquee flag is set for your 'statmode', then the last retrieved news will be displayed. o Support for recent ncurses (1.9.9e) o Color support added to Unix versions The various color commands now work with Unix and curses. o Added creation of a 'structur.fil' file on startup This file contains the default and actual (in use) names for all modifyable filenames, directory names, and default session manager names. This can be used to help rectify problems discovering where TNOS expect a file or directory to be located. The 'in use' section of this file can be saved separately, and used as a configuration file with the '-f configfile' command line option, if desired. The 'structur.fil' file is created in the TNOS root directory used on execution. o Finished port of DOS SCREENSAVER code for Unix Now the SCREENSAVER can be compiled into TNOS/Unix and used. o Started adding in full support for CGI applications o CGI environment variable available in 'echo var=' Server-Side Includes All environment variables (regular and CGI) are available in this manner, if the HTTPCGI flag is set when TNOS is compiled. NOTE: MSDOS users using this will want to make sure to allocate a large enough environment size, using the CONFIG.SYS 'SHELL' command. o Added a 'http execcgi' command to allow disabling of CGI at runtime This is off (set to 0) by default. o Added a 'wpages clientcall' to set the FROM call of WP client updates o Temporarily added a forwarding connection type of 'fbbtelnet' for FBB 'telnet' forwarding FBB's 'telnet' share the same NAME as the RFC854 protocol, but little else. It IMPROPERLY handles <CR> usage, and cannot seem to properly handle binary compressed forwarding. If you need to use telnet to forward to a FBB PBBS, then make the connection type 'fbbtelnet' instead of 'telnet' in your forward.bbs file. This will hack the <CR> problem and restrict the forwarding mode to non- compresses FBB-style forwarding. This is only temporary, and may not remain until the official release of TNOS 2.22. I am working with F6FBB to help him make his 'telnet' more standard. o Added a 'http hostname' command to set the default hostname of the HTTP server This allows you to define this as a different hostname from the 'hostname' of the TNOS box itself. o HTTP server is now a multi-homed server! That is, it can now provide different input for different IP addresses, and respond as different hostnames. The 'start http <port> <rootdir>' command now has additional optional parameters for hostname and ip address to use. For a syntax listing of this command, do a 'start http ?'. The port still defaults to 80. The dirname still defaults to the 'http' directory under your TNOS root directory. The hostname defaults to the setting of the 'http hostname' command (which itself defaults to the value specified by the 'hostname' command). The ip address defaults to INADDR_ANY, or ANY IP address that TNOS has assigned to it for any interface. All optional parameters can be specified as '-', if needed, to retain the default setting for that parameter. This can also be used to only serve HTTP data on certain addresses in use on the TNOS box, but not to ALL addresses. o Added a generic Message server This allows you to set up a specified port to listen for connections, and when they are received, to output a user-definable message, followed by a disconnect. The port a Message server can be installed on is configurable, and so is the optional ip address (which defaults to INADDR_ANY, or ANY IP address that TNOS has assigned to it for any interface). Newlines (or blank lines) can be imbedded in the message string by using "\n" within the string. For a usage string for the Message server, do a 'start message' or 'stop message'. o Added a generic TScript message server This is like the Message server mentioned previously, but instead of defining a string to be sent to the remote machine upon connection to a specified socket port, a TScript script to be run is defined. This can include ANY TScript commands valid in a TUTOR/NEWS/INFO server, a 'script' command, or a scripthook file. The port a Message server can be installed on is configurable, and so is the optional ip address (which defaults to INADDR_ANY, or ANY IP address that TNOS has assigned to it for any interface). For a usage string for the TScript server, do a 'start tscript' or 'stop tscript'. o Added a 'pbbs pruneage' command to allow variable prune aging By default, the 'pbbs pruneage' is set to 6 months. The value of this command is used with the 'pbbs prune' command. o Modified the 'pbbs prune' and 'expire' commands to remove empty files o All the above included in 2.22b1 o Added RIP98 support, thanks to Gareth! The impact of this addition (as well as a good description of how to set up RIP) is described in a file from Gareth, located at ftp://ftp.lantz.com/tnos/misc/RIP98.txt o If you are running the HTTP server, read the next entry! o IMPORTANT HTTP CHANGE!! Default file changed from root.htm(l) to index.htm(l) o If you are running the HTTP server, did you read the above entry? o Removed the AX25PASSWORD compile flag o Added a 'pbbs ax25passwd' command This allows you to configure at run-time (rather than compile time) the ability to make all users (with accounts in the FTPUSER file) confirm their identities with a password over AX.25. Netrom and telnet connects are not affected by this, neither are anonymous users or users defined as PBBSs in the FTPUSERS file. The default for this command is off. o Changed build-make.inc to accomidate for recent NCURSES releases While previous NCURSES releases had a /usr/include/ncurses directory, or a /usr/local/include/ncurses.h file, the recent version has neither, but now just uses a /usr/include/curses.h file. To accomidate this, if the older ncurses directory or file is not found, a symlink is created of /usr/include/ncurses.h which points to /usr/include/curses.h. TNOS includes ncurses.h (still does, for this purpose) to avoid accidently including a non-ncurses header file, on older systems. o All the above included in 2.22b2 o Added code to prevent possibility of dups or forgeries This is in three parts. First, if an outbound forwarding session does NOT see a SID from the remote PBBS (due to either a bad forwarding script in your forward.bbs file, or a SERIOUS problem with the remote), then the forwarding session is aborted, a message is logged in the logfile, and also a message is sent to the console (whether 'forward trace' is on or not). This prevents TNOS from being the cause for dups! But, this isn't enough, as the remote of an incoming forwarding session could have an erroneous forwarding script on IT'S side, causing IT to eat the SID sent by your TNOS. In that case, you don't KNOW that it's a BBS, as it never identified itself as one. To guard against this, if a message is sent and it has R: lines but it is NOT identified as a PBBS (with a received SID), then the message is automatically held, and an error message is logged in the logfile. These messages are not deleted, so you have them for a reference in communications with the remote sysop, but they should NOT be simply released, as they now have a NEW bid! Note, this same 'fix' also prevents users being able to impersonate other users as messages originated from other systems, as was the case recently when someone attempted to impersonated W0RLI. This was done by a user entering a 'sb' line with a '< W0RLI' and a first data line of a dummied-up R: line, making it LOOK like it was from W0RLI, and forwarded from his PBBS. Users should NOT be allowed to produce such forgeries. Also, if a bulletin is received from a PBBS, with R: lines but NO BID, this is ALSO held, with an error in the logfile. This also indicates an error on the REMOTE system. These messages should also NOT be released. This cannot happen if the 'pbbs nobid off' command is used, but if the 'pbbs nobid' command is 'on', this will hold the message anyway. If a non-bulletin is received from a PBBS, with R: lines but NO BID/MID, this generates a warning message in the logfile, but is NOT held. There has NEVER been an agreement among PBBS authors as to MIDs, though most (except for W0RLI) treat MIDs and BIDs mostly identically. By the specification non-bulletins aren't REQUIRED to have a BID. If this occurs, the received message will have it's MID made into a BID, and passed on. This is usually not a problem (to anyone but Hank), as personal messages are not 'flooded' as bulletins. The worst that happens is that the same personal message gets delivered multiple times. (NOTE: personal messages to 'sysop@*' are treated as bulletins by TNOS, and most all other PBBSs). o TNOS treatment of BIDs/MIDs TNOS is totally compliant with the PBBS specification in this regard. The spec states that all bulletins must have BIDs and if a PBBS receives a message without one, it assigns one. The specification states that a BID is optional for personal messages and should NOT be assigned to NTS messages. In regards to MIDs, the specification states that "Because of considerable disagreement between the authors of existing systems on the implementation of this feature (MIDs), it is not included as part of this recommendation. There is no requirement that a BBS implement a MID feature." TNOS assigns a MID (message ID) to all messages. If a non-bulletin message does NOT have a BID, then the MID is used in it's place in all occurances. All messages forwarded from TNOS systems will either have a BID or a MID sent with them. NO messages will ever be forwarded from a TNOS system without a BID or MID. This treatment of MIDs by TNOS is consistent with the specification, contrary to what W0RLI would like to believe ;-) If something is not covered by a spec and left to interpretation, then nobody's implementation is incorrect. o Automatic location/verification of LOCKDIR's existence The following paths are checked (in this order) and the LOCKDIR is set to the first one that matches. If none of them are found, an error message is printed, and TNOS exits. o /usr/spool/uucp o /var/spool/lock o /var/spool/uucp o /var/lock o Added '-l lockdirpath' command line parameter This allows you to set up a custom LOCKDIR path, if needed. o Added a 'smtp holdscanall' command For some reason (which I cannot remember) the scanning of the wordhold.dat and userhold.dat files was coded to NOT check files received from remote sites, but to only scan locally generated messages. This new command will allow you to have ALL email messages scanned by these files, and held if there is a reason. This command is 'off' by default, so it works like it always has. o All the above included in 2.22b3 3. Minor Changes The following minor changes have occurred. o Added additional output to 'http status' command o Added a idle timeout to TCPGATE code Uses a hard-coded constant in tcpgate.c, which defaults to 10 minutes. o Updated the config.hlp file, used by mkconfig.tcl o New outbound forwarding sessions are now inhibited once shutdown starts o Added code to make usable PBBS BID from any internet MessageId o Reformatted the 'daytime' server's output, adding timezone o Removed the no longer functional 'isat' command o More lint cleanup, this time in MSDOS code o All the above included in 2.22b1 o HTTP server treats .htm files the same now as .html o All the above included in 2.22b2 o Improved the 'forward alteredbids' command's scanning While correctly identifying a change in BID within a message, the scanning was changed to prevent needless message holding/deleting. This would occur if a truncated BID was found within the R: lines, without the REAL bid being affected. Now, if the BID in an R: line is NOT the same as the BID received, it is only flagged if it is NOT a truncated version of the BID. If it differs (or is longer than the BID received), it will be flagged, but no 'false alerts' will be given due to truncated R: lines. With the OBVIOUS flood of newbie SYSOPS and their desire to put all sorts of MEANINGLESS garbage in their R: lines (causing the NEEDED BID to get lost or truncated), this modification should help. o Minor changes to support new glibc library Compiles and runs, but there still MAY be an unresolved problem or two with glibc still. We'll just have to see. o Dramatically simplified files.c and created auth.c Moved authentication functions to a new file, auth.c, and did a lot of code simplification to files.c. Leaner and meaner.... o All the above included in 2.22b3 o Some lint cleanups 4. Remaining Known Bugs The following are known bugs that will be addressed in the near future. These may or may not be fixed before the next release is made available. 1. The proxy server scripts do not seem to work properly There is a problem, that is being looked into, which seems to be related to calling scripts from within scripts (which proxy.scr DOES). 2. None other at this time.... ;-) 5. To-Do List The following are things on the author's 'to-do' list that are being considered for this or a future release of TNOS. These may eventually be done, but not necessarily by the next release. 1. Complete the spec and coding of the non-IP HTTP PBBS interface 2. Add to the browser support for the 'select' and 'textarea' tags 3. Add to the browser better rendering of tables within tables 4. Export a complete set of CGI environment variables when 'exec cmd' used Currently you can execute a program and pass in explicit parameters (which CAN be dynamically assigned using server-side includes), but it is NOT a CGI-compatible interface. I will consider adding this at a later time. 5. Add capability to allow use of OS commands This includes finishing the incomplete 'pipe' command in the Unix release. Due to the obvious restrictions of MS-DOS (memory, etc.), this WILL be considered for Unix version only. 6. Add better support for PBBS<->Internet mail address translation The 'translate' file and improved handling of aliases is a START, but more work needs to be done here. Maybe a 'translate.out' file... 7. Add code to allow a TIP socket type, for use with LL Modems 8. Tweek the WPages code a bit Need to improve the code that insures that the wpagebbs entries are correct, of the proper length, and actually look like hier addresses. Also, make the expiring of WPages files less fragile if the file has become corrupted. 9. Check into duplicate entries in the WP files While not harmful, the WPages routines SHOULD be overwriting existing entries, NOT creating new ones. 10. Consider adding intelligence to convers links The idea being that if there are no incoming links, and no local users, that the remote outgoing link would be brought down until this changed. 11. Consider moving MSDOS version to curses for screen I/O