Upgrading TNOS to release 1.14 http://www.lantz.com/Update1.14.html TNOS 1.14 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. * Changed the BBS quickscan command description It did say that "QUI" was the abbreviation, but (of course) that is the abbreviation for "quit". This is changed to "QUICkscan"... * Also changed the BBS user command description - to "USEr" * Fixed two potential null pointer dereferences in rspf.c * A potential null deference in 'domain addserver' fixed * Fixed a problem with serial device lock files This only occurred if the lock file existed and you did NOT have READ permissions on that lock file. * Several assorted minor null pointer deferences * Changes to avoid FLEXNET packets from being dumped as ARP packets This should avoid the crashes when tracing an interface using FlexNet * Long-time 'ax25 flush' bug found.... Thanks to Christine Rial for giving me enough info to get this one...... I have had one or two of you send me cryptic email about having crashes with the heard lists. Never had enough info, till now. Really didn't need much, but couldn't understand having problems with heard lists, when I use the 'ax heard' all the time. Well, the problem was in FLUSHING the heard lists, IF you were using POLLED memory, which is the default. Well, it was ALWAYS freeing memory like you would for un-POOLED memory, causing crashes. * Fixed an SMTP bug with LZW This was a typo that crept in with release 1.13 * A workaround for a GCC optimization bug in 2.6.x There was a BIG problem compiling with 2.6.x that would eat up ALL available CPU cycles!?! A look with 'top' usually shows 90+ % :-( The cause is a bug in GCC in the optimizer, that incorrectly optimizes the portion of code that calculates the minimum time that the system can wait to I/O, if no processes are active. The bug makes it THINK that it can NEVER do a blocking wait for I/O, so the idle routine is CONTINUALLY calling the I/O routine (ding()) in a process devouring loop! I've tried several workarounds, and they ALL optimize incorrectly, so the workaround for the moment is to NOT allow the compiler to optimize unix.c. The Makefile was changed for this purpose. * Fixed an problem with disabled interrupts One process INCORRECTLY masks interrupts at the WRONG place. DOS doesn't SEEM to be affected, but who knows what it MAY have done to efficiency. BUT the Linux processes had their 'heartbeat' timer COMPLETELY disabled because of this, causing sluggishness during non-idle times. * Fixed a bug in the EXPIRE routine This bug didn't release 'mbox maintenence' mode if the expire.dat file didn't exist. * Fixed a bug with POLLED forwarding * Fixed a bug with AXUI and added selective timestamping * Elusive 'trace 211' output bug found. The bug occurred if you used trace mode 211. EVENTUALLY you crash. A look at the output showed occasional weird things in the ASCII portion, which looked like floating point numbers. All fixed now! Awful simple when you know what you're looking at ;-) * * 'Ron' bug discovered ;-) There was a buglet in using the 'mbox newmotdfile' command, in that it would wipe out the FIRST 'R' in each line, not necessarily the 'R' attribute! The result was anyone that had a name starting with 'R', ended up with it changed to a space. 'Ron' became ' on'. This is now fixed * Fixed a bug in POOLED memory usage, which left unused entries It was leaving one unused entry per pool block. * Fixed a bug in the BBS 'read' command with non-PBBS message-ids This would abort if given a bid from a mailer like Pine or Chameleon. ------------------------------------------------------------ Improvements: The following optimizations and improvements have occurred. * Added to the REQUEST SERVER the ability to use external Callbook Server Previously, the Request Server would only grant 'QTH' requests if it was running a SAM callbook (MSDOS, only). Now, as long as you can manually retrieve from a configured Internet Callbook server, you can also grant 'QTH' requests from that same server. * Added a Conference Bridge '/cstat' command This gives the output from the '/links' command, followed by the output of the '/dest' command. * Made the netrom nodes broadcast more CPU-friendly The regular broadcast of netrom nodes was setup as a regular timer event, but now the timer event spawns off a separate process to do the broadcasting. This is too allow placing delays between the broadcasting of the different interfaces. When using this with axip over the Internet, ALL those axip interfaces go out the same port, and this not only hogged a slow dialup SLIP or PPP line, but also made the rest of the TNOS session brain-dead until the node broadcast was complete. While my 29 interfaces is NOT the normal situation, it SHOULD handle it better. So now there is 5 seconds pause between interface broadcasts, which fixes the above problems quite well. When all of the netrom interfaces are complete, then the 'NETROM broadcast' process dies. * Number of AXIP links now selectable from command line There is now a '-a xx' option to TNOS to allow you select the number of AXIP links available for use. Increasing the number of AXIP links USED to require re-compiling the program after changing a constant value set in one of the header files. Now it can be changed easily. The default for number of AXIP links has gone back to 16. The only overhead that is used by a non-used-but-allocated AXIP link is 4 bytes per interface. The Command Session 'status' command now also shows how many AXIP interfaces are available. * Added a new maintainence mode command Added a 'mbox maintclear [on|off]' command, which determines whether or not the system will bump users off the system or not, when it is time for maintenence. If set to on, the when maintenence mode time comes, it will bump users off with the 'mbox maintstr' message, then start maintenence. If this is off, then it will work like before, and simply WAIT until the last user has logged off before starting maintenence. * Added a way to generate PBBS 'export' files This has been done in a seemless way. You add an entry to your forward.bbs file, with a connection method of 'export'. All messages going to this special export BBS, go into the 'spool/export/current.exp' file. At regular intervals, you can 'export now' (or 'export '), which renames the 'current.exp' file to a unique name of the form 'MMDDHHMM.exp', also located in the 'spool/export' directory. * Added a way to accept PBBS 'import' files This also has been made as painless as possible. All "*.imp" files in the 'spool/import' directory are imported when you 'import now' (or 'import '). The original file is deleted after the import is complete. Another way of doing this WITH A WARNING is to send a message to 'import@host'. This will be immediately processes and imported. **THE WARNING** The import/export files end each message with a '/EX'. Before sending mail to 'import', you must run the file through a program and change all '/EX's to '//EX's, otherwise, NO MESSAGES will get imported, since the import routine feeds the data into the BBS as if it was being received. The '/EX's in the import file are used to complete each message. YOU WERE WARNED! ;-) * Added the 'icmp timeexceed' command, from JNOS This allow you to PREVENT the sending of ICMP Time Exceeded messages, to make the system invisible to traceroutes. Good to help secure gateways on the Internet. * Added the 'icmp quench' command, from JNOS, for MSDOS version This allow you to PREVENT the sending of ICMP Source Quench messages when memory goes low. Only for MSDOS version. * Added the 'iface rxecho' command, via JNOS, from Johan From the JNOS 1.10j release files: Johan WG7J also provided changes to iface.c and config.c that permit (if RXECHO is defined) packets received on one interface to be sent out another interface, provided they are of the same type. This is set by: ifconfig rxecho {off | } Johan cites two interesting applications: Case 1: You have two machines connected to each other via a kiss link. Only pc1 has radio's. You want to 'listen' to a radio channel on pc2. Thus, on pc1, you add: ifconfig rxecho Now on pc2's kiss interface to pc1, you will receive all packets heard on pc1's . If you then add to pc1: ifconfig rxecho all packets received by pc1 on kiss-interface (ie. coming from pc2) will be send out on radio-interface. Ie. for pc2 it looks like it is directly connected to radio-interface, as if pc1 isn't there ! Case 2: Say you have a gateway pc with radio's, and another pc with ethernet connected. You can monitor radio channels on the ethernet pc by setting up an axip link between the gateway and the pc ('attach axip ...' and then use the scheme above between the radio port and the axip port on the gateway machine. Note that you can monitor multi ports, although you will not be able to know what port a certain packet originated from. You can NOT go transparent to more then one port, since an interface can only forward received data to one interface. Note also that you can monitor frames on fast ports (eg. Ethernet) but NOS might become more unstable when doing so, because of the large workload. * Added the 'smtp dtimeout' command, from JNOS This implements a way of returning to sender those messages that stay in mqueue longer than a specified interval. 'smtp dtimeout [hours]' is used to specify how long the msg stays in the queue, being retried at 'smtp timer' intervals (unless low on memory, or maxclients is too constraining, etc.) Setting hours to zero (the default) disables this capability. This is one way of solving the misaddressed email problem! It does have the drawback that if an alias is used to copy bulletins to an smtp destination, that becomes unreachable, the bulletin author may receive his msg back! * Added code from JNOS for use of multiple MX entries I also added Selcuk's resolve_amx() to try multiple MX destinations in the order of preference. * Added code from JNOS for 'domain maxclients' I added in Andrew G8FSL's "domain maxclients N" code to domain.c, so as to limit the maximum number of simultaneous DNS server processes. Default maximum is 6. * Added the 'ifconfig tcp' commands from JNOS No minor task here ;-) This allows you to have separate TCP parameters per interface, such as blimit, irtt, maxwait, mss, retries, syndata, timertype and window. The regular 'tcp' commands set the DEFAULTS that are given to a new interface. NOTE: Make sure to set the 'tcp' defaults BEFORE attaching your interfaces. These could be done AFTER with prior versions of TNOS, but should be done BEFORE for 1.14 and up. * Made 'tcp stat' mods, which shortens display This mod (made also to the 'tcp connections' command) by default only displays ACTIVE tcp connections, and NOT the waiting servers. To view the waiting servers, also, give the commands a parameter of "all". This mod based on the JNOS mods by Doug Crompton, wa3dsp. * Added the 'ifconfig ax25' commands from JNOS No minor task here, either ;-) This allows you to have separate AX25 parameters per interface, such as bctext, blimit, irtt, maxwait, maxwait, paclen, pthresh, retries, timertype, t3, t4, version and window. The regular 'ax25' commands set the DEFAULTS that are given to a new interface. NOTE: Make sure to set the 'ax25' defaults BEFORE attaching your interfaces. These could be done AFTER with prior versions of TNOS, but should be done BEFORE for 1.14 and up. Also note, that the JNOS bbscall and cdigi are NOT included, since there are TNOS equivalents that perform the tasks better. * Added the ability to remotely trace an interface. While the idea comes from JNOS 1.10j, this one I re-invented, since the original design had a very basic problem, it would not allow a remote user to restore a trace to the state that it was found. From JNOS docs: Johan WG7J submitted changes to do all tracing to a socket rather than a file, so as to permit tracing to (1) the sysop's stdout stream while connected to the mailbox, (2) a tcp connection to port 1236 if TRACESERVER was defined and started, or (3) to a local disk file (or the console trace window) as before. In all cases, the trace command must be issued to begin tracing. And, since tracing produces more characters than in the packets being traced, the trace socket MUST be faster than the interface being traced, or you will run out of memory and crash! To trace an interface to the current socket, use: trace ! The '!' tells it to attach the output to the current session. * Added a 'mbox scan' command This allows the sysop to choose whether or not the defaults given to new users will have them scan for new messages on login. This has no effect on any users currently in the users.dat file. * **MAJOR CHANGE** Moved some 'mbox' commands to the 'forward' command If you DON'T change these, you WILL be asking for help ;-) The following commands (which were concerning forwarding) WERE located in the 'mbox' command, and they have been moved to the 'forward' command. Nothing else about them changed. Commands moved: bid, bidsuffix, fwdinfo, haddress, kick, mid, qth, rcall, rsample, rstyle, smtptoo, subchannel, timer, trace, utc and zipcode * **MAJOR CHANGE** Moved some 'mbox' subcommands to a new 'mbox newuser' command. If you DON'T change these, you WILL be asking for help ;-) The following commands (which concerned default settings given to new users) are now moved to a separate subcommand, 'mbox newuser'. Nothing else about them changed. Commands moved: nrid, and scan * Added a new attribute to the 'users.dat' file entries for mail holding There are times when one user or another needs a little hand-holding, and SHOULD have their mail reviewed before allowing it to be forwarded on. There is now an attribute 'H' for each user, which if enabled, will cause all mail generated by them to be held for review of a sysop. * Added a new permission to the ftpusers files for mail holding Same reasoning as above. Permission is: hold_mail 16777216 0x01000000 * Added a new 'mbox newuser hold' command This allows you to choose whether or not to hold all mail generated by new users for review by a SYSOP. * Added a new 'mbox newuser area' command This allows you to choose whether or not to display the area indicator to new users. * Added a BBS 'edituser user' command This command displays the current attributes for the user from the 'users.dat' file, and allows you to change them. A menu is displayed. * And removed 'icmp quench', after thought (and arm twisting ;-) TNOS will no longer (in any version) send a source quench in cases of low memory. The 'icmp quench' command mentioned earlier as being added to 1.14, has been removed. * Added a command for starting forwarding to a single BBS The command 'forward kickone [poll]' will start a single forwarding session. If the 'poll' parameter is given, it will do a polling connect, even if the forward.bbs file is NOT set for polling. * Added handling of bid history in memory A new command, 'bid memory [on|off]' will allow you to access the data from the 'history' file from memory. You MUST have POOLED memory compiled for this option to be available. Each entry only takes 22 bytes, so 1024 bids can be kept in only 22K. The data from the history file is read into memory, and all searches for known bids are done in memory. When bids are added, they are added to memory AND to the file. Bid deletes are done against the memory array. When you 'bid kick', the 'history' file is recreated from the memory data. All deleted bids are discarded, as are the bids that have expired. This is fast, and should have no side effects if the machine is busy doing other things. Once the 'history' file is rewritten, the memory image is reloaded. I recommend setting the 'bid timer' to a fairly low number, to keep the memory array flushed out. * Added 'bid count' command, that works with the 'bid memory' command If you have the 'bid memory' command on, you can use the 'bid count' command to see how many bids are in memory. ------------------------------------------------------------ Minor Changes: The following minor changes have occurred. * Several more Conference Bridge changes for TPP compatibility * Changed the Linux version to NOT support the screen saver Since Linux has a screen blanker built-in, I didn't see the need to throw away the time. * Modified the delegation server Made this only send ONE notification per email address per delegation period. * MANY, MANY, MANY minor changes Some to prevent possible null pointer dereferences, some to merely clean-up dirty code. * The displays for all debug tracing routines cleaned up for Linux Command such as 'mb trace' now have their display formatted correctly. * Added a sanity check in rewrite file processing This prevents infinite recursion with improperly written rewrite conditions. The hard coded limit is currently set to 10. Any address that requires more than 10 recursions through the rewrite file will abort the process and log the error to the logfile. * Added code and a compiler flag to make BBS ping command secured If the 'PING_SECURE' flag is enabled, then the BBS ping command will only be allowed by users that either have ampr or non-ampr telnet permissions. * Changed the BBS 'S ' command so it is NOT always a personal message If you send a message as 'S name', then IF the name resolves to a public area, it will be treated as if it was sent with 'SB'. Otherwise, it will be treated the old way, and handled as a personal message. * The BBS 'AN ALL' and 'AS ALL' now show held messages for personal areas * Added the FTPserver NOOP and HELP commands - Removed unused NAME command * Minor changes in mbxrecline() These properly bit-bucket NULL characters received. Also there was a problem with the handling of backspaces within the data of messages. This problem was caused by trying to allow a greater deal of data transparency in messages being forwarded via PBBS. The problem was it was not limited in scope to ONLY a PBBS-entered message. This is fixed. * Formatting of entries for 'users.dat' file simplified Removed unneeded spaces and correctly remove any haddress from home BBS names. Included with 1.14 will be an executable 'cleanup', which can be used to cleanup your existing 'users.dat' files. While not required, it may be desired. * The code for the forward commands moved from forward.c to fwdcmd.c * The code for bid and wpages expiring moved from expire.c to bid_wp.c * Minor change to the mbox status display... For consistency, I changed the Netrom display to make it consistent with the rest. AX25 (user on port xxxx) LOCAL (user @ hostname) INET (user @ hostname) NETROM (user @ alias:call) The netrom display USED to be (alias:call user), and was the ONLY one of the types that the user was displayed LAST. * Added to the smtpserver the VRFY command This does basically the same thing as the EXPN function. ------------------------------------------------------------ Known Bugs: The following are known bugs that are being worked on during the development of release 1.14. These may or may not be fixed in release 1.14. * TCPGATE won't compile in DOS version Missing some references in the source. Will be fixed soon... ------------------------------------------------------------ To-Do List: The following are things on my 'to-do' list that may eventually be done, but not necessarily by the next release. * Linux kernel AX25 devices available from TNOS/Linux This would allow the PI card to be used.... * Bypass internet SMTPClient->SMTPServer for local mail Find a way to do all that is being done, without the overhead of two separate processes, and two different temp files. * FBB-style forwarding No, I didn't give up on this.... Jack/KF5MG is working on this. * HTTP daemon??? Who knows! * Add capability to TScript to allow starting of OS commands This MAY or MAY NOT be limited to Linux 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. * Better capability internally or externally to generate statistics Use the log files to show patterns of traffic, usage, etc. * Color support output to Linux console The various color commands don't work with the Linux kernel and curses. Annoying, but just possible unexpected output. No crashes. * Add a command to allow a sysop to edit the header of a message * 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... * Add info to the *.ctl files for forwarding Place a counter in each message entry that tells how many stations remain that require forwarding of the message (-1 if none needed it forwarded). Don't allow deletion of the message during expiry unless this number is <= zero. Display a 'F' in the 'list' command if the message has completed forwarding. Add commands to display stations remaining to forward to, given a message number/area. * Put in special case code to better handle message number rollover This is a far less frequent problem in TNOS, with the separate message sequence and temp sequence numbers, but the problem will STILL occur when the message sequence number wraps around past 65535 for MIDs (or 99999998 for temp sequence numbers). A special flag to indicate that the message scan detected a rollover should be added, and special case code added to alter the last message read and number of messages based on whether a rollover is in that area.