Upgrading TNOS to release 2.01 http://www.lantz.com/Update2.01.html TNOS 2.01 will be the next release of TNOS, to be released sometime before the formation of the United Federation of Planets. Hopefully, this list of changes will give you an idea of the scope of work that has occurred between versions. Of course, it may be faster just to re-read the docs when the next version is released. This document is divided into: * Bug Fixes * Improvements * Minor Changes * Known Bugs * To-Do List ------------------------------------------------------------ Bug Fixes: The following bugs have been squashed. * Cleaned up a minor buglet and a memory leak in forwarding code * Clean up mods from Paul for the APOP code - got in too late for 2.00 * Creation of 'BID' from PINE MessageIDs not unique enough - fixed * Above included in patchkit 1 * FBB Compressed forwarding wasn't closing a file when receiving msgs This resulted in one open file for each message :-( * FBB Compressed forwarding wasn't removing a tempfile when sending msgs If you used FBB compression and SENT a message, then it ALSO was leaving a tempfile hanging around. * FBB Compressed forwarding crashes under certain conditions :-( Also, in some cases (I won't get into the long involved description), you would get a glorious crash after sucessfully sending an FBB compressed message. * The fix to prevent AXListeners for IP callsigns broke support for ROSE So, that fix was removed and a better one took it's place...... * Fixed a *VERY SELDOM* bug in FBB forwarding This would occur ONLY if you had two machines sending the same messages at the same time (yep! I'm REALLY beating on this stuff ;-). If the initial bid check (before sending the 'FS' command passes, and then when in dosend() it failed (just came in from another BBS in that brief time), then it would send out a 'NO - Already have ....' message, causing a protocol error on the remote end. Now, if the bid fails in dosend() (after passing earlier), we assume that it came in since then, and silently drop the copy in the bit-bucket. * Also another infrequent occurance which COULD lose messages This buglet is in FBB, too, but we can't do anything about that ;-) *IF* garbage comes from a receiving FBB-style PBBS, instead of a forward negotiations ('FA', 'FB', 'FF', or 'FQ'), then FBB (and TNOS 2.00) would treat the reception of data (without it's analysis) as an indication that the messages sent were received correctly, and would remove them from the queue, and delete them, if personal messages. While this is very rare, we SAW a case where the 'NO - Already have...' bug was sent, and FBB marked the messages as received okay. After looking, the TNOS code ALSO was not checking for a valid 'F' command. Now this extra protection is added. * A rare one with Expiry and new message arrival in SMTP This ONLY occurred when EXPIRY was happening and a message came in while the EXPIRY process was *between* areas. A very brief time, but it did happen to Mike TWICE in a couple of days (he must not live right ;) Fixed now. * Discovered that part of the White Pages support never got finished Once a BBS got entered into the wpagebbs file, if changes were made, they never got updated. The support for the wpages file was fine, though. * Fixed the display of the 'mbox motdalways' command While this was a boolean type command, it was being processed as a numeric command, making the display (and input) numeric rather than [on|off]. * Fix to the POP3 Client code. Sometimes got out of sync with the server This was one that slipped through the cracks with the APOP additions. * A minor fix in FBB Forwarding code, if a temp file error is found * A workaround for a missing attribute in MSYS BBSs SIDs If a PBBS supports FBB-style forwarding, it supports MIDs on personal messages. Any BBS that supports MIDs is SUPPOSE to advertise it with a 'M' in their SID. MSYS does NOT. So, we now assume the 'M' when we see the 'F', whether it is there or not. Not our problem, but it's fixed. * Fixed a minor display problem with RDATE * Fixed a bug which seg faulted if BBS 'KS' command had no parameters * Workarounds for older GCC's in compiling STATS files * Another fix for PINE-generated messages and bid checking Since the purpose of bidchecking in the SMTP code is to prevent PBBS dups, this needed mod, simply tells the SMTP code that a bid check is not needed if it came from a PINE or Chameleon mailer. This SHOULD finally stop the occasional bounced PINE messages. * Applied RXECHO patch for AXIP by John Woolner/VK1ZAO * Last (hopefully) memory leak with FBBCMP plugged If you are using FBB compression, and you have NO messages outgoing, you forfit 20K of memory! Not a big concern on Unix, but BIG TROUBLES for DOS! Easy fix, though............. * Fix for crash if typo in forward.bbs for interface name * Fixed bug with 'ax25 bct' being used for all interfaces The 'ifconfig iface ax25 bct' was not being used for the regular, timer generated beacons. This is now fixed. * Fixed a buglet in the routine that determines if an area is public This one came in with 2.00, and would SOMETIMES yield the proper result, and sometimes not. This would result in some public messages being deleted after being forwarded (if they originated outside of xNOS and had no 'X-BBS-Msg-Type:" line), and in some cases messages being unexpectedly held. * Fixed a buglet in the Unix session manager code, dealing with options This is one that was inherited from JNOS/Linux, and found thanks to Bob Smith <bob@snuffy.penfield.ny.us> (an alias if I ever heard one ;-) * Fixed a buglet with the BBS '!' command modifier The skipping of lines beginning with '-' in the areas (and areas.sys) file (for historical compatibility) was not being handled correctly, causing these lines to be analyzed as area names. * Fixed a long-standing occasional bug with mail area locking * Found and fixed a few accesses to invalid memory * Killed Conference Bridge '/who' display buglets Actually surprising it worked ;-) * Fixed a small buglet in FBB-style forwarding in area handling * Fixed a small buglet that didn't delete unused sockets in ttylink If the TNOS station had 'attend off', then each attempt would leave a lingering dead socket. Depending on system usage and number of sockets selected, this could eventually make it so that there were NO available sockets. * Fix to prevent crashes if attempting to view 'hostname' when not set Thanks to Alan B. Clegg <abc@gateway.com> for this one. * Fixed a BBS security/Domain translate bug...... Jack discovered the answer to the problems he was having. It seems that if 'dom trans' is ON, the security assignments did not sense ampr addresses properly. * Small fix for mailers that like to give leading spaces on email names * Fix for Chameleon mailers and BIDs * Fixed bug where BBS and RLOGIN pings left a socket open till session ended * Fixed a filename buglet with BBS message delegation. * Fixed some NNTP buglets * Fixed a subtile bug with 'tcp clean' This only cleaned out the first FIN_WAIT2. * Fixed a buglet that would place redundant WP update records in update.wp * Above included in patchkit 3 * Added fix (from nos-bbs) for FBB Yapp receiving This makes a 0 packet length into a length of 256, as per FBB spec. * A few assorted sun-related changes/fixes * DNS Server bug imported from nos-bbs * Fixed a quirk that passed a blank command in BBS sysop mode back to the BBS * Fix for properly leaving off the users' root dir in ftpserver with PWD command * Assorted FTPserver fixes for parsing the ftpusers file * Flow control fix for non-Linux Unixes (eliminated overruns) * Simple fix to RFC-822 header parsing to allow tab following colon Should also make whitespace optional. * Fixed problem with case significance in parsing alias file ------------------------------------------------------------ Improvements: The following optimizations and improvements have occurred. * Added a 'smtp notify [on | off] command This toggles whether or not you get a 'New mail for .....' message for each incoming message. * Changed the WPAGES lookup routines to ALSO look in the wp*.new files The wpages and wpagebbs files are SORTED for rapid access, and all new entries are placed in wpages.new and wpagebbs.new, which is UNSORTED. These *.new files are added to the base file, re-sorted, and expired when the bid timer expires (or you 'bid kick'). The *.new file are NOW looked at (sequentially, of course) for expansion and lookup. Since the SORTED files will give faster, more responsive access, it is suggested that you set your 'wpage timer' to a value that will help insure SORTED responses. * Added support for a WP Client, which generates WP Updates This added the 'wpage client [on|off]', 'wpage destinations [bbscall]' and 'wpage update [#hours| now]' commands. If the client is on, then any activity that should be reported to the PBBS network via WP Updates is added to a spool/update.wp file, which is sent to all the PBBSs listed in the 'wpage destinations' (1 message per BBS to 'WP@bbscall') when the 'wpage update' timer expires or gets 'kicked' with a 'wpages update now' command. * Added support for a WP Server, which accepts and processes WP Updates This added the 'wpage server [on|off]' command and associated code. * Added an '/include' command to the BBS message mini-editor Along with this, the output of the '/original' command was changed to show the message line numbers. The syntax is '/i xxx [yyy]', where 'xxx' is the first line number you want included (from the '/o' output), and 'yyy' is the last line number (or include to rest of file, if 'yyy' is omitted). This command (like '/o') only works with the 'SR' (or 'reply') command. The included lines are prepended with '> '. * Added code for temporary white pages additions This addon is similar to how FBB handles White Pages. When a non-authorative WP user entry comes in (from any source), a temporary entry is created for a user. Non-authoritative entries are ones that are 'guessed' from the traffic flow, but were not directly entered by the user (or a sysop) for the purposes of White Pages update. The 'wpages temporaryage xxx' command sets the age of a temporary entry, which defaults to 30 days. When an entry has remained in the wpage.tmp file for this long, the master wpages file is updated with this temporary info. This prevents the master wpages info from being incorrectly updated simply because a user sends a message from a BBS other than their regular HOME BBS. * Better handling of AUTO/LOCAL ax25 routes Current code takes any 'AUTO' route given to it (by a BBS gateway, a Command Session 'connect/split' command, or a forwarding connect command) and *if* there was a LOCAL (manually entered) route, that route disappears, and is replaced by the AUTO one. This AUTO route disappears when that connection is severed, leaving (now) *NO* route. Now, if there is a LOCAL route (entered by the sysop, with a 'ax route add' command), then any other AUTO routes can be specified *BUT* they are effectively ignored. A LOCAL route will NOT be overwritten by an AUTO route. * FINALLY found an easy way to by-pass LZW for local-to-local smtp sessions Until I can come up with something better, this at least cuts down the CPU, memory, and time consumption of LZW for internal mail processing in the SMTP client<->SMTP server. * Optimized the memory allocation for FBB Compression under DOS Original way allocated ~20K when a FBB-style compressed forwarding session began, and didn't release this memory until the session was complete, even though it was only used at the few instants that encoding/decoding was actually being done. While this works fine with Unix and under DOS if the TNOS station is an station with only one or so stations that it forwards with, this CLEARLY has problems for heavily used TNOS/DOS stations. Under these rules, to compress forward to 5 PBBSs, takes a minimum of 100K of available memory. Now, the memory is allocated JUST before the encode/decode functions are called, and freed immediately afterward. This buys a LOT more memory efficiency. But, not stopping there, I changed the memory allocation to call functions that WAIT if the memory isn't immediately available. This will allow MANY more forwarding sessions to co-exist. When it requires the 20K of memory, if it is NOT available at the time, that process will sleep, and be awoke when another PBBS forwarding process frees the memory IT was using. These two changes SHOULD make TNOS's FBB Compression support much more "world-class"..... * Added a new forward command to queue up messages from an area The 'forward queue <bbs> <all | area>' command allows you to add to the queue of a bbs (defined in the forward.bbs file), all of the messages in a particular area (or all areas) defined for that bbs. This is good when adding a new bbs that you wish to send the entire 'backlog' of messages to, in order to catch them up. All non-deleted messages are added to the queue. The actual message headers are NOT analyzed, so it COULD try to send to a bbs that NORMALLY it would have 'seen' as already having the message. The receiving BBS (in this case) will end up rejecting the messages that it already has. While this is not optimum, it serves the desired purpose, with little code, and the lack of optimization shouldn't matter, since this SHOULDN'T be a commonly used feature. * Added code to FBB-style forwarding to defer messages already incoming This code does one final check before telling the remote PBBS to send the message, and looks to see if there is another FBB-style forwarding session going on that has *already* started accepting this message. If so, the message will be deferred from this BBS, waiting to a later time, when either the message DID make it through successfully, or if not, it will be tried again. * Added needed conditional code for compiling on Sun3 The primary 'fix' needed for this platform was a workaround for the old Sun compiler, which returns from sprint() the POINTER to the buffer that the data was placed into, rather than the number of characters placed there. There are now SPRINTF and VSPRINTF macros, used in the few occasions where sprintf() is assumed to return the count. All other changes are in '#if sun' conditionals. * Added code to make FBB-style forwarded comply to subchannel assignments While this required a LOT of code to be rewritten, the basic change is that now incoming FBB-style forwarding sessions honor the subchannel assignments. What this means is that if a BBS is defined to have a subchannel restriction: * Any incoming forwarding session will be allowed to SEND incoming messages even if there is no available subchannel slot. * When incoming forwarding sessions turn around the data flow to receive from us, we will ONLY send if either we have already been granted a subchannel slot, or if there is one currently available. * Outgoing forwarding will only occur if there is a subchannel slot available. * Any BBSs that cannot receive a subchannel slot are deferred. * If any outgoing session is deferred due to the lack of an available subchannel slot, the forwarding process will be 'kicked' after each BBS has completed processing, to allow deferred sessions to be processed at the earliest possible time. * If an FBB-style process initially cannot receive a subchannel slot, it is attempted each time forwarding control is passed back to it. If later in the forwarding session a slot becomes available, it will be granted to that existing process. These rules, of course, do NOT apply if the BBS does NOT have a subchannel assignment. Using these, you can easily restrict the number of outgoing PBBS forwarding sessions for better utilization of limited bandwidth. * Added a new mbscripthook for email addresses too vague This MIGHT help with the age-old problem of users sending to "ALL@USA"! This hook gets called for each email message that is not sent by a SYSOP or via PBBS forwarding. It is passed the original address being mailed to. The script hookfile (spool/cmds/vague.sys) can then look at the address, and depending on criteria that YOU set, can warn the user that the address to too vague. On my system, sending to "all@*" gets: *** The email address you've given to FAR too vague! Very few (if any) will *** read it addressed as it is currently. Suggest you abort this message *** (with '/abort'), and re-enter it with a more descriptive address! Doing it in this manner provides the most versatility, allowing each SYSOP to determine which addressing he/she wishes to 'preach' at the user about. It also has the benefit of not needing to 'rewrite' these to a special area for garbage disposal, unless you WISH to. You could always rewrite (in this example) "all@*" to an area named 'trash', and tell the user in the hookfile that this message, as addressed, will not be accepted. The choice is yours, but this will give us a tool to help in educating the average user. * Added the 'state' of BBS users to the Conference '/who' display Required a bit of rewriting to avoid 'code-bloat' ;-) * Support for ELF binaries added In actuality, the change was EXTREMELY minor, but it took a while to find. And while I'd like to take credit for it, the idea came from Bob Smith <bob@snuffy.penfield.ny.us> and his porting of TNOS to the Sun3. He found that the stacksizes needed adjustment in order to get the Sun up and running. Once he pinned it all down and submitted the diff, I got to thinking that MAYBE the stacksize COULD be marginal, and this COULD account for the occasional "how did that happen" crashes we've seen. So I applied his patch for large stacksizes on Unix. Then I got to thinking that this COULD account for the screwy things I'd seen trying to get ELF binaries to run. So, one compile later, we have ELF working. Thanks for the idea, Bob! * Added diffs for compiling on BSDI * Now 'certified' for use with GCC 2.7.0 There are about 1100 warnings of unused parameters and 75 warnings of comparisons between signed and unsigned variables, but these are merely annoying, and not an indication of a problem. The unused parameters will be handled with the new 'OPTIONAL' macro. Soon will get around to patching all these to be 2.7.0-happy! ;-) * All unused parameters warning fixed for GCC 2.7.0 * All comparison warnings fixed for GCC 2.7.0 * Patches from Paul to prevent using a less efficient MX record This keeps track of MX's to the local host, and prevents using an MX of greater value, if one of a lesser value is for 'us'. * Patch from Bruce Tenison for having a group subscription welcome file When a member subscribes to a defined 'group' using the Reqsvr, a check is made to see if there is a 'groupname.hlp' file in the spool/help directory. If there is a file for that particular group, this is sent to the user by the Reqsvr. * Added a catalog file for less commonly used strings Like the Unix catalog files, this is a place for strings to be looked up, instead of having the strings in memory as part of the executable. While MSDOS will gain from the memory savings, all versions will gain, in that language localizations can (at least partially) be done using this. This feature can be disabled with the config.h file and the 'CATALOG' flag. * Stricter callsign checking option available The 'STRICT_CALL' flag in config.h will reject any logins from non-callsigns and will not try to PBBS forward any messages from non-callsigns. This option will be OFF in official exe's to avoid confusion. This one was contributed by Mat. * Added ftpusers permission to allow denying use of '*** linked to' This security hole had already been 'patched' in JNOS, so just took that patch. The permission value is different, though: # no_linkedto 262144 0x00040000 (No '*** LINKED TO' allowed) * Added a 'mbox nosubjbell' command This command (if set to on), will strip out any bell character entered as part of a BBS message's subject line. Many (including myself) get annoyed at having listings 'beep' at them. ------------------------------------------------------------ Minor Changes: The following minor changes have occurred. * Modifications made for clean compiles on Borland C 3.1 * Above included in patchkit 1 * Placed checks in BBS login to prevent usernames with spaces For whatever the reason, I've noticed users logged in from time to time with something like this "c username" as the username. Obviously someone no paying close attention to what they were doing. Now TNOS will inform them that no spaces are allowed, and make them try again. * A small optimization in the changearea() function If you call changearea() now to change to the SAME area, then it is optimized to NOT close the area and re-open the same one. * Changed the 'mbox wpages [on|off]' to 'wpages support [on|off]' Just common sense ;-) *** CHANGE THOSE CONFIG FILES *** * Added the date to the statline display * Optimized the stats code, to reduce redundant code - smaller footprint * Unix Makefile changes for ease of customization Made a 'LOCKDIR' definition to define the directory where your lock files are found, and use NOSDIR within buildctl and ctlcheck, instead of hard-coded paths. * Changed the algorithm used to calculate the stats averages Previously the average included the partial day you were on for the averages on the 'general' sub-option. Since all of the other displays are based on NOT including the current, partial day, I changed the averages to subtract out the data for the current day before averaging. The averages are also now rounded up, instead of down. * TNOS/Linux version strings changed to TNOS/Unix (makefile.lnx renamed to makefile.unx) * Readme file updated with BSD/OS notes * Directory structure at ftp.lantz.com (and the mirror) changed The 'linux' directory will be renamed 'unix' starting with 2.01. * Added a 'security encode' BBS command This (available only to sysops) just extends the existing security command by looking to see if there is a parameter given, and if it starts with 'e'. * Minor internal changes to the REQSVR code * Above included in patchkit 3 * A few misc cleanups * Added a prompt to the 'stats clear' command After twice accidently clearing stats during testing, I figured this *might* be needed ;-) You can bypass the prompt with 'stats clear yes'. * In BBS, when deleting a held message, hold state is now cleared * If GCC, added GCC version to the Command Session 'status' command * Added an optional site-specific makefile file extension The Makefile for Unix now includes code to include a 'make.inc' file, if it exists. Everyone is encouraged to use the stock, unmodified Makefile.unx and place any OS or site-specific changes in the make.inc file. * FBB forwarding will not defer zero length messages ------------------------------------------------------------ Known Bugs: The following are known bugs that are being worked on during the development of release 2.00. These may or may not be fixed in release 2.01. * Domain cached MX records (dummy ones) added and not removed Seems if you have 'domain usemx' on and it queries for a MX that is NOT found, that a dummy record gets added to the cache that NEVER expires, though there is an expiration time in it. * ? CNAMEs seems to need to be fully qualified? Bug? * Forward file locking needed If a record gets added into a *.fwd file when a forwarding session is concluding, sometimes the new record gets missed, and the *.fwd file gets deleted. Rare, but needs to be addressed. * Sending mail to the proxy server, doesn't seem to work properly * Displaying parameter strings with a '\r' needs adjustment If you define a parameter string (like 'ax25 bctext') to be multi-line strings with a '\r', the output to the screen may not be what you expect. * None other at this time.... ;-) ------------------------------------------------------------ To-Do List: The following are things on my 'to-do' list that may eventually be done, but not necessarily by the next release. * Investigate incorporating into TNOS a userfs extension This would allow *any* Linux (and possibly other Unix) program to open a file and access certain TNOS features. For instance a terminal program like minicom could open a device: /tnos/connect/lan/k0zxf/ko4ks-1/813044 and do the equivalent to 'connect lan k0zxf ko4ks-1 813044'. You could incorporate a copy of your current usage stats into a email message in Pine, by simply inserting a file named /tnos/stats/usage/general. * Add capability to allow use of OS commands This WILL be limited to Unix version. * FTP permissions improved The new UNIX-like dir display needs a little more work with the permissions portion of the display... * Add in UNIX permissions checking to FTP server This could cause problems with restricted files not being restricted. * 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... * Still better handling of AUTO/LOCAL ax25 routes Improvement by making an ax25 route entry part of the connection block, using this unique AUTO route for this connection only. * Support (optimization) for ncurses 1.9.x for performance * Color support output to Unix console The various color commands don't work with the Unix kernel and curses. Annoying, but just possible unexpected output. No crashes. * Consider altering import code to prevent holding imported messages Only bypass user permissions checking, not bad word check holding. * Consider providing a ROSE whitepages server * Consider providing separate SMTP/BBS rewrite files