CHANGES IN THE 3.1.28 RELEASE Changes in this release * Add retry file lock timeouts, so that one process getting a lock when another process has a retry file lock will not wait forever. This is important for preventing blocking of queue-runs as a result of a single message transfer waiting for an extended time out. This was contributed by Chip Salzenberg, as an extension to his original host retry management support. * New router driver: rerouter, submitted by Uwe Doering. This new router can reroute UUCP-zone paths for greater efficiency, or to correct known routing defects. It can also be used, in a limited mode, for rerouting bounce messages. See the driver source, and the smail(5) man page for details. This code is experimental, and I have some reservations concerning some of its semantics, so use at your own risk. * Changed the format for log entries generated by smail. The new log entry formats are courtesy of Uwe Doering. I am not quite sure if I like them, but they are quite a lot more readable than the old ones. However, grepping is more difficult, given that the entries now take several lines. * Finally changed write_log and panic functions to use ANSI C-style variable-argument declarations, rather than traditional C. The particular usage of variable-argument functions in smail was causing problems with some C compilers. * Add INCLUDE_UTIME_H to the sun_os4 configuration file. This is needed to get struct utimbuf. * Add seteuid/setegid for HP-UX 8.0 as macros that use setresuid/setresgid. This allows use of shared NFS mounted mailbox directories. * Add SETEUID to HAVE list for sys5.4. * Add CPPFLAGS of "-systype bsd43" to mips-bsd43 configuration file, which is needed to get correct include files for BSD-universe compilation. * Fix spelling of tm_zone structure tag for use with MIPS and NeXT machines, or other machines that can get the timezone from struct tm. * Removed C++/G++ support from the sdbm.h include file. This was causing problems compiling on some systems, and is uneeded in the smail build environment, in any case. CONTRIBUTORS TO RELEASE 3.1.28 Contributors to this release include Knut-Hevard Aksnes, Neal Becker, Kevin Darcy, Uwe Doering, Hillel Markowitz, and Chip Salzenberg. ---------------------------------------------------------------------------- CHANGES IN THE 3.1.27 RELEASE Release 3.1.27 is a patch release to smail3.1.26. This release is primarily a bug fix, portability-enhancement release. The total size of the patch is larger than I expected it to be, based on the number of bugs fixed, but the changes aren't very intrusive, so users with custom enhancements should not have too many problems integrating them into this release. Also, at the time of the 3.1.27 release, I have a reasonably large backlog of changes that I intend to include in a near-term release. However, some of the fixes in this release are of sufficiently high priority that I don't want to delay the release further to include any more changes. Changes in this release: * A bug in the DNS lookup routines was fixed which was causing core dumps in dn_expand(). * The SHELL variable can now be set on the make command line. This allows the use of alternate, /bin/sh-compatible shells. Some systems (notably Ultrix and Xenix) have /bin/sh bugs which can be worked around by using a different shell. I have also tried to reduce the complexity of some shell scripts, in hopes that more native shells will work correctly without needing to introduce workarounds. * Add an AUTH_DOMAINS list to the EDITME file (alternately, auth_domains in the config file) for setting a list of domains for which your machine is authoritative. This prevents the smarthost router from matching non-existing hosts in domains for which your host has complete routing information. I included this in this release, despite the fact that it is an enhancement, because the change is small and because interactions with the smarthost router have caused significant confusion lately. paths files can be used for similar purposes, but smail has come to be used more extensively on pure Internet machines, which often lack paths files. Explaining why paths files must be used has become more trouble for me than it is worth. * The visible_domains and more_hostnames config file variables can now be set with the names "domains" and "gateway_names" for compatibility with the EDITME file. Again, explaining the differences here were becoming more trouble than the trouble of just making this change. * Some problems with uses of the tolower() function have (I hope) been fixed. Unfortunately (I guess), I don't have any non-POSIX systems any more, so I can't tell if my fixes are sufficient. * Some changes to the motorolla delta system configuration file were contributed by Francesco Potorti` . * Updates to the A/UX samples and conf/os files were added, as contributed by Bob Denny. * A typo in the next2.0 configuration file was fixed. Contributors working on NeXT systems have been driving me a bit nuts, given that their editor appears to add newlines and blank lines in the middle of patch files. I usually have to apply their patch files by hand and I haven't always managed to compensate. * A typo in the sun_os4 configuration file was fixed. This one was purely my fault; I can't blame it on anyone else. * Nigel Metheringham contributed conf/os/mips-bsd4.3. * Some problems with timezones were (hopefully) corrected for NeXT machines. * I completely rewrote conf/os/isc2.2.1. I ripped out all of the POSIX features. Attempts to use POSIX features ran into too many header file problems. Also, what worked with the version of ISC that I have access to didn't work with isc3.0. The new file should be sufficiently generic to work with most recent releases of Interactive. I have NOT tested this with gcc. If this configuration file doesn't work with gcc, then don't use gcc. * For systems that have the dbm.h or ndbm.h file in an awkward location, the MISC_DEFINES variables DBM_INCLUDE and NDBM_INCLUDE can be set to indicate the include paths to use. See conf/os/template for details. * A size_t reference in string.c, which was causing problems compiling on a number of systems, was changed to an "int". * The Date header now indicates (by default) the time that the spool file was created, rather than the time of message delivery. * Some typos in the smail(5) man page, with respect to UK-only bind attributes, were fixed. The attribute names should now appear when you format the man page. * I changed some of the scripts in samples/bsmtp to work better in the face of queue directories that exceed ARGMAX. Some alternate scripts were contributed which I may use instead, in a future release. * I changed the sender_proto (the name supplied after the "with" keyword in Received lines) for batched-SMTP input to "bsmtp". Compressed, batched input is now "cbsmtp". * Several bugs were fixed in the samples/generic/* file. In particular, for directors a missing ':' was added and a comment in the "lists" entry describing sender_okay was corrected. For transports, notify_comsat was added to the default "local" transport. * The program invocation caused by invoking smail as "newaliases" or with the "-bi" option, was changed to reset the effective user and group IDs to the real user and group IDs. The previous release did (correctly) reset the uid and gid if -oA was used to specify an alternate aliases file, but it probably allowed any user to rebuild the regular alias file. I say probably, because a bug was causing the uid and gid to be set to random stack garbage, which must have been 0 on most systems that tried the feature. * The accept() call on some systems (notably some SVR4 variants, though not the one I use) fail if descriptors 0 and 1 aren't in use. Smail now opens /dev/null on descriptors 0 and 1, when operating as a daemon. * The spool file format was changed (in an upward compatible, though not backward-compatible fashion) so that blank arguments do not screw up the argument list stored in spool files. In earlier releases, a blank argument, such as -F "", could corrupt the spool file, since it used a blank line to separate an argument list from the header list. I am rather surprised that this bug has managed to stay around so long. It is an original design flaw. * The HELO, RCPT TO, and MAIL FROM requests in SMTP now require a non-empty argument. However, the argument to HELO is still not checked for validity. * An extraneous utimbuf declaration was removed from src/sysdep.c that was causing difficulties with compilation on some systems. * The files contrib/micnet/*.dif were removed. These patch files were no longer relevent, since the files that they were relative to have changed substantially. * Split changes into a separate file from the README file. It is likely that the README file will split further in future releases. Some users have commented the the README file has become a bit unwieldy. A short list of changes not included in 3.1.27, which will likely be included in 3.1.28: * Some authentication of the sending hostname, based on IP addresses versus the name supplied in the HELO line to SMTP. * Some enhancements to the message-retry/message-timeout logic, including logic to remove stale files. For now, the following shell command can be used periodically to remove stale files: find /usr/spool/smail/retry -type -f -mtime +7 -exec rm {} \; Removing files older than the message-retry interval is reasonably safe, since message-timeout logic is based on the modify time of a message spool file, not on retry files. * A rerouter driver, submitted by Uwe Doering. To remain consistent with previous statements, I must restate that I dislike hosts that do auto-rerouting. However, this appears to be necessary on the European continent, given the rather arbitrary and beaurocratic nature of goings on there. * Significant changes to the logging code, to make log entries much more readable, if less grep-able. The changes were submitted by Uwe Doering. It will be relatively trivial to convert log files for use with grep. Perl scripts should have little problem with the new format, although be warned that all existing perl scripts will have to be rewritten for use with the next release. The smaillog program will be modified to account for the new format, since it is included in the release. CONTRIBUTORS TO RELEASE 3.1.27 Contributors to this release include Bob Denny, Uwe Doering, Greg Hackney, Philip Hazel, Ron Heiby, Nigel Metheringham, Jim O'Connor, Chip Salzenberg, Brian Taylor, Bill Trost, and Stephen J. Walick. ---------------------------------------------------------------------------- CHANGES IN THE 3.1.26 RELEASE Release 3.1.26 is a patch release to smail3.1.25. This release is primarily a functionality enhancement release. A number of bugs have been fixes as well. The total number of changes is quite large. As a result, people with customizations which were not included in 3.1.26 may have a fair amount of work to do. Important enhancements in this release: * Greatly enhanced expansion strings, with conditionals and file lookups. The original version of this code was written by Chip Salzenberg. * Per-transport-configurable header insertion and removal based on the new expansion code. In addition, the "From:" header can now be configured, including the ability to use a file to find a long form for local users (e.g, to get ronald.s.karr). The configurable header insertion/removal support can be used to support the Content-Length field, by adding the following generic attributes to the local transport: remove_header="Content-Length", append_header="Content-Length: $body_size" Of some value with SVR4, you can also add a Content-Type header field, if no Content-Type field already exists, with: append_header="${if !header:Content-Type Content-Type: text}" * The default Received: header now contains the "from" and "with" keywords, where such information is available. Information is determined from the HELO line in SMTP, the From_ line in regular uucp mail, or it can be set using the -oMr and -oMs options, for compatibility with sendmail. * Smail can now limit connections to the SMTP server, as long as a standalone smail SMTP daemon is used, rather than using inetd to start smtpd per connection attempt. Two levels are provided: a maximum number of connections that yield immediate message delivery, and a maximum number of allowed connections. This can greatly help the maximum load that smail places on a server, while allowing fast delivery if the server has light mail activity. This code was contributed by Chip Salzenberg. * Smail now tracks host accessibility for SMTP delivery. If a host is down, then mail to that host will be deferred immediately (rather than waiting for a connection timeout) until a definable time period expires. In addition, mail that is undeliverable for a definable time period will be bounced, rather than hanging around in the smail queues forever. The parameters for retry times and message timeouts are configurable on a per-host or per-domain basis. Several implementations of these capabilities were submitted, including implementations by Syd Weinstein and Dan Danz. I decided on a version by Chip Salzenberg, which included per-host configurability, and which (eventually) supported the host accessibility tracking. * Interactive SMTP receive processes can now timeout. By default, SMTP command receipt times out after 5 minutes, and receipt of a message after a DATA statement times out after 2 hours. This was added after an urgent, but gentle, request of Heiko Schlichting, who had 100 receiver processes hanging around waiting forever for SMTP input. The specific timeouts can be modified in the run-time config file by setting smtp_receive_command_timeout (default 5m) and smtp_receive_message_timeout (default 2h). * Support was added for JANET reverse-order domain lookups in the bind router. Contact Philip Hazel for complete support. The smail3 release contains only that code that needs to be within the smail binary itself. * Added support for NeXT netinfo databases (from Dan Danz). * The DNS can now be queried within the tcpsmtp transport, without involving the bind router driver. In previous releases, MX records could be used only if addresses were resolved by the bind router. Now, under configuration control, the tcpsmtp transport driver can locate MX records itself, such as for mail routed by a local paths file or by a queryprogram router. This support was added, at my request, by Chip Salzenberg. * Added a -oX flag to smail that sets the TCP port number used to listen for SMTP connections. This is helpful in testing, because this (along with the "service" attribute to the tcpsmtp driver) can be used to setup a test network that operates independently of an existing SMTP network. This can be used to make sure that smail works on your network before replacing an existing mailer. * The smail installation process now attempts to preserve replaced binaries from your original operating system in .SAV files. Thus, your existing /bin/rmail and /usr/lib/sendmail will not be removed, even if smail is reinstalled several times. Previous releases would (sometimes) keep one backup version (with a .O suffix), which would then be removed on the next install. The new process makes a .SAV backup file, if one does not exist already, allowing a one-time backup copy on the first installation of smail. .SAV backup files are made only for files that are considered likely to provided in the base operating system. * The uuwho utility now uses searches for domain information, if a full hostname match is not found. For example, the command: uuwho mitsu.veritas.com will find the entry for .veritas.com, which does exist while no entry for mitsu.veritas.com exists. This was added by Chip Salzenberg. * By "popular demand" :include: in mailing list and alias files can now be followed by white-space. This is for compatibility with sendmail. Comments are NOT allowed after :include:. For example, the following line: :include: /list-directory/mailing-list would previously have resulted in errors, but will now result in inclusion of addresses in the file /list-directory/mailing-list. * The -bi option from sendmail is now supported, and newaliases is now yet another link to smail. This support was added to allow existing YP makefiles (which call /usr/lib/sendmail to rebuild the YP mail.aliases dbm file) to use smail3 replacing sendmail. The original version of this enhancement was submitted by Bruce Jerrick. * The sdbm library is now integrated in the smail release. Systems that do not have a native ndbm library now use the sdbm functions to provide multiple DBM-like files. Native dbm (not ndbm) libraries can be used only if they support the dbmclose() function. This was added by Chip Salzenberg, who was planning to use this in association with his host status monitoring code, but later realized the error of his ways. But, the changes were left in because they seemed reasonable. * The comsat daemon is now supported in the appendfile driver, and is enabled, by default, in the "local" transport. * Mail which results in all recipients being eliminated (such as through duplicate elimination or sender elimination within a mailing list), will generate a bounce message. Some other changes: * The sender_okay flag (for configuring removal of the sender from aliasing and mailing list expansion) can now be configured from the EDITME file. * Pathalias was updated to match the most recent release available on uunet. * The compile process now echoes the results of variable substitition. The previous release would generate lines such as: . ./defs.sh; $CC $CFLAGS $INCLUDES -c foo.c now, compiles will generate something like: gcc -O -I/usr/include -c foo.c make -n will still yield annoyingly small amounts of real information. * A sufficiently high debugging level will now enable debugging in the resolver library. * Included some minor revisions to the bind router by Syd Weinstein, to fetch A records as a second pass after fetching MX records. Apparently, there are differences in what different servers return in a request for MX records (some return A records, too, some don't). * Sytems that require an alternate set of #include files to compile programs that use TCP/IP and sockets can define those #include files in the conf/os files or in the EDITME file. See conf/os/template for details. * Added some AUX support contributed by Robert B. Denny, which can be found in samples/AUX-support. Most of the changes relate to printing documentation. Some sample configuration files are also included. * Smail now uses SO_REUSEADDR and some appropriate descriptor closes, to allow the smtp/queue-run daemon to be restarted cleanly even if a receiver process has been forked. Previous releases could get errors in the bind() call indicating an address already in use. * A new attribute was added to the gethostbyname router (only_local_domain) that disables matching of hosts outside of the local domain. This was addedy by Dan Danz. * Man pages were previously installed with mode 555. They are now installed with mode 444. * Added a NOTES directory containing messages that I have sent or received that illustrate various points of interest. * Building of uuwho databases now differentiates between a #N line introducing a hostname, and a #NOTE, or #North America line introducing a random comment. Recent map entries caused extra, bogus, entries to be added to uuwho databases. * "A" records are now used in the order returned by DNS resolver lookups. Previously releases would reverse the A records, due to the way these records were being added to a list, internally. The RFCs require that A records be used in order, since they may be sorted by network preference. * The local-* transports for local-form delivery to remote hosts now does proper hop-count checking. These transports use the new local_xform attribute which does local-form transformations without indicating that delivery is actually local. Some bug fixes: * Mail to systems with no MX records, but an A record, will now be handled correctly by the bind router. I have regular posted a patch for this to various newsgroups and mailing lists, but did not include the fix in an earlier official patch release. * Fixed some minor problems with bounce-message generation. Bounce messages are generated by reinvoking smail and sending the bounce messages as a batched SMTP script. The sender was specified as <>, in accordance with RFC822, which smail considered a remote address. However, treating this as mail from a remote system was inappropriate, so an alternate sender token <+>, is now used to indicate a locally-generated bounce message. * Nul-terminated some generated strings that were not consistently nul terminated. * Fixed some problems resulting from routers that resolve to the local host, requiring further routing of the remainder address. * Fixed some problems in the trusted-code logic that was running into problems with the SMTP interaction generated by MH. * Errors in .forward files now generate bounces to real- rather than to the postmaster. * NEWS_SPOOL_DIR was not being stored in the defs.h file, yielding incorrect behavior from uuwho. * Fixed some problems with interactions between the -t and -f options. * Fixed some problems with varargs usage in log.c. * Include for Suns, to avoid a problem interacting with -O on Sun4's that could generate core dumps. * Fixed some segmentaion violations caused by bogus @foo addresses. * Fixed most (all?) places where smail was using a value immediately after it was freed. This allows smail to work, unmodified, with the SVR3 -lmalloc library, or other versions of malloc that don't leave data from the last free unmodified. * get_sender_addr(), which generates the sender address in various important contexts, was returning the same data between multiple calls, when it should have been returning different data. CONTRIBUTORS TO RELEASE 3.1.26 This patch was made possible primarily through the work of Chip Salzenberg, who contributed the first version of the enhanced string expansion code (though I extended it rather a lot), the SMTP connection limiting code, the reorganized bind code, plus the changes for the retry file. He also contributed a large number of minor enhancements and bug fixes. I don't have a good record of who else contributed code, fixes and suggestions for this patch, but here is a partial list: Tomas Ahl, Jack Bailey, Alan P Barrett, Mark Bixby, Randy Bush, Dan Danz, Bob Denny, Jon Diekema, Michael Faurot, David J. Fiander, Bill Hargen, Philip Hazel, Bill Heiser, Peter Honeyman, Bruce Jerrick, Patrick Lee, Simon Leinen, Hillel Markowitz, Bill Masek, Jan-Piet Mens, Les Mikesell, Lyndon Nerenberg, Jim O'Connor, Jim Pickering, Steve Piette, Francesco Potorti`, Heiko Schlichting, David Schmidt, Monty Solomon, Brian Taylor, Bill Trost, Gary S. Trujillo, Stephen J. Walick, Lauren Weinstein, Syd Weinstein, and Andreas Wettengel.