Exim version 4.30 ----------------- 1. The 3rd arguments to getsockname(), getpeername(), and accept() in exim.c and daemon.c were passed as pointers to ints; they should have been pointers to socklen_t variables (which are typically unsigned ints). 2. Some signed/unsigned type warnings in the os.c file for Linux have been fixed. 3. Fixed a really odd bug that affected only the testing scheme; patching a certain fixed string in the binary changed the value of another string that happened to be identical to the end of the original first string. 4. When gethotbyname() (or equivalent) is passed an IP address as a "host name", it returns that address as the IP address. On some operating systems (e.g. Solaris), it also passes back the IP address string as the "host name". However, on others (e.g. Linux), it passes back an empty string. Exim wasn't checking for this, and was changing the host name to an empty string, assuming it had been canonicized. 5. Although rare, it is permitted to have more than one PTR record for a given IP address. I thought that gethostbyaddr() or getipnodebyaddr() always gave all the names associated with an address, because they do in Solaris. However, it seems that they do not in Linux for data that comes from the DNS. If an address in /etc/hosts has multiple names, they _are_ all given. I found this out when I moved to a new Linux workstation and tried to run the Exim test suite. To get round this problem I have changed the code so that it now does its own call to the DNS to look up PTR records when searching for a host name. If nothing can be found in the DNS, it tries gethostbyaddr(), so that addresses that are only in /etc/hosts are still found. This behaviour is, however, controlled by an option called host_lookup_ order, which defaults to "bydns:byaddr". If people want to use the other order, or indeed, just use one or the other means of lookup, they can specify it in this variable. 6. If a PTR record yields an empty name, Exim treats it as non-existent. In some operating systems, this comes back from gethostbyaddr() as an empty string, and this is what Exim used to test for. However, it seems that in other systems, "." is yielded. Exim now tests for this case too. 7. The values of check_spool_space and check_log_space are now held internally as a number of kilobytes instead of an absolute number of bytes. If a numbers is specified without 'K' or 'M', it is rounded up to the nearest kilobyte. This means that much larger values can be stored. 8. Exim monitor: an attempt to get the action menu when not actually pointing at a message produces an empty menu entitled "No message selected". This works on Solaris (OpenWindows). However, XFree86 does not like a menu with no entries in it ("Shell widget menu has zero width and/or height"). So I have added a single, blank menu entry in this case. 9. Added ${quote_local_part. 10. MIME decoding is now applied to the contents of Subject: header lines when they are logged. 11. Now that a reference to $sender_host_address automatically causes a reverse lookup to occur if necessary (4.13/18), there is no need to arrange for a host lookup before query-style lookups in lists that might use this variable. This has therefore been abolished, and the "net-" prefix is no longer necessary for query-style lookups. 12. The Makefile for SCO_SV contained a setting of LDFLAGS. This appears to have been a typo for LFLAGS, so it has been changed. 13. The install script calls Exim with "-C /dev/null" in order to find the version number. If ALT_CONFIG_PREFIX was set, this caused an error message to be output. Howeve, since Exim outputs its version number before the error, it didn't break the script. It just looked ugly. I fixed this by always allowing "-C /dev/null" if the caller is root. 14. Ignore overlarge ACL variable number when reading spool file - insurance against a later release with more variables having written the file. 15. The standard form for an IPv6 address literal was being rejected by EHLO. Example: [IPv6:2002:c1ed:8229:10:202:2dff:fe07:a42a]. Exim now accepts this, as well as the form without the "IPv6" on the front. 16. Added CHOWN_COMMAND=/usr/sbin/chown and LIBS=-lresolv to the OS/Makefile-Darwin file. 17. Fixed typo in lookups/ldap.c: D_LOOKUP should be D_lookup. This applied only to LDAP libraries that do not have LDAP_OPT_DEREF. 18. After change 4.21/52, "%ld" was used to format the contents of the $inode variable. However, some OS use ints for inodes. I've added cast to long int to get rid of the compiler warning. 19. I had forgotten to lock out "/../" in configuration file names when ALT_CONFIG_PREFIX was set. 20. Routers used for verification do not need to specify transports. However, if such a router generated a host list, and callout was configured, Exim crashed, because it could not find a port number from the (non-existent) transport. It now assumes port 25 in this circumstance. 21. Added the -t option to exigrep. 22. If LOOKUP_LSEARCH is defined, all three linear search methods (lsearch, wildlsearch, nwildlsearch) are compiled. LOOKUP_WILDLSEARCH and LOOKUP_ NWILDLSEARCH are now obsolete, but retained for compatibility. If either of them is set, LOOKUP_LSEARCH is forced. 23. "exim -bV" now outputs a list of lookups that are included in the binary. 24. Added sender and host information to the "rejected by local_scan()" log line; previously there was no indication of these. 25. Added .include_if_exists. 26. Change 3.952/11 added an explicit directory sync on top of a file sync for Linux. It turns out that not all file systems support this. Apparently some versions of NFS do not. (It's rare to put Exim's spool on NFS, but people do it.) To cope with this, the error EINVAL, which means that sync-ing is not supported on the file descriptor, is now ignored when Exim is trying to sync a directory. This applies only to Linux. 27. Added -DBIND_8_COMPAT to the CLFAGS setting for Darwin. 28. In Darwin (MacOS X), the PAM headers are in /usr/include/pam and not in /usr/include/security. There's now a flag in OS/os.h-Darwin to cope with this. 29. Added support for maildirsize files from supplied patch (modified a bit). 30. The use of :fail: followed by an empty string could lead Exim to respond to sender verification failures with (e.g.): 550 Verification failed for 550 Sender verify failed where the first response line was missing the '-' that indicates it is not the final line of the response. 31. The loop for finding the name of the user that called Exim had a hardwired limit of 10; it now uses the value of finduser_retries, which is used for all other user lookups. 32. Added $received_count variable, available in data and not_smtp ACLs, and at delivery time. 33. Exim was neglecting to zero errno before one call of strtol() when expanding a string and expecting an integer value. On some systems this resulted in spurious "integer overflow" errors. Also, it was casting the result into an int without checking. 34. Testing for a connection timeout using "timeout_connect" in the retry rules did not work. The code looks as if it has *never* worked, though it appears to have been documented since at least releast 1.62. I have made it work. 35. The "timeout_DNS" error in retry rules, also documented since at least 1.62, also never worked. As it isn't clear exactly what this means, and clearly it isn't a major issue, I have abolished the feature by treating it as "timeout", and writing a warning to the main and panic logs. 36. The display of retry rules for -brt wasn't always showing the error code correctly. 37. Added new error conditions to retry rules: timeout_A, timeout_MX, timeout_connect_A, timeout_connect_MX. 38. Rewriting the envelope sender at SMTP time did not allow it to be rewritten to the empty sender. 39. The daemon was not analysing the content of -oX till after it had closed stderr and disconnected from the controlling terminal. This meant that any syntax errors were only noted on the panic log, and the return code from the command was 0. By re-arranging the code a little, I've made the decoding happen first, so such errors now appear on stderr, and the return code is 1. However, the actual setting up of the sockets still happens in the disconnected process, so errors there are still only recorded on the panic log. 40. A daemon listener on a wildcard IPv6 socket that also accepts IPv4 connections (as happens on some IP stacks) was logged at start up time as just listening for IPv6. It now logs "IPv6 with IPv4". This differentiates it from "IPv6 and IPv4", which means that two separate sockets are being used. 41. The debug output for gethostbyname2() or getipnodebyname() failures now says whether AF_INET or AF_INET6 was passed as an argument. 42. Exiwhat output was messed up when time zones were included in log timestamps. 43. Exiwhat now gives more information about the daemon's listening ports, and whether -tls-on-connect was used. 44. The "port" option of the smtp transport is now expanded. 45. A "message" modifier in a "warn" statement in a non-message ACL was being silently ignored. Now an error message is written to the main and panic logs. 46. There's a new ACL modifier called "logwrite" which writes to a log file as soon as it is encountered. 47. Added $local_user_uid and $local_user_gid at routing time. 48. Exim crashed when trying to verify a sender address that was being rewritten to "<>". 49. Exim was recognizing only a space character after ".include". It now also recognizes a tab character. 50. Fixed several bugs in the Perl script that creates the exim.8 man page by extracting the relevant information from the specification. The man page no longer contains scrambled data for the -d option, and I've added a section at the front about calling Exim under different names. 51. Added "extra_headers" argument to the "mail" command in filter files. 52. Redirecting mail to an unqualified address in a Sieve filter caused Exim to crash. 53. Installed eximstats 1.29. 54. Added transport_filter_timeout as a generic transport option. 55. Exim no longer adds an empty Bcc: header to messages that have no To: or Cc: header lines. This was required by RFC 822, but it not required by RFC 2822. 56. Exim used to add From:, Date:, and Message-Id: header lines to any incoming messages that did not have them. Now it does so only if the message originates locally, that is, if there is no associated remote host address. When Resent- header lines are present, this applies to the Resent- lines rather than the non-Resent- lines. 57. Drop incoming SMTP connection after too many syntax or protocol errors. The limit is controlled by smtp_max_synprot_errors, defaulting to 3. 58. Messages for configuration errors now include the name of the main configuration file - useful now that there may be more than one file in a list (.included file names were always shown). 59. Change 4.21/82 (run initgroups() when starting the daemon) causes problems for those rare installations that do not start the daemon as root or run it setuid root. I've cut out the call to initgroups() if the daemon is not root at that time. 60. The Exim user and group can now be bound into the binary as text strings that are looked up at the start of Exim's processing. 61. Applied a small patch for the Interbase code, supplied by Ard Biesheuvel. 62. Added $mailstore_basename variable. 63. Installed patch to sieve.c from Michael Haardt. 64. When Exim failed to open the panic log after failing to open the main log, the original message it was trying to log was written to stderr and debug output, but if they were not available (the usual case in production), it was lost. Now it is written to syslog before the two lines that record the failures to open the logs. 65. Users' Exim filters run in subprocesses under the user's uid. It is possible for a "deliver" command or an alias in a "personal" command to provoke an address rewrite. If logging of address rewriting is configured, this fails because the process is not running as root or exim. There may be a better way of dealing with this, but for the moment (because 4.30 needs to be released), I have disabled address rewrite logging when running a filter in a non-root, non-exim process. ****