Exim version 4.32 ----------------- 1. Added -C and -D options to the exinext utility, mainly to make it easier to include in the automated testing, but these could be helpful when multiple configurations are in use. 2. The exinext utility was not formatting the output nicely when there was an alternate port involved in the retry record key, nor when there was a message id as well (for retries that were specific to a specific message and a specific host). It was also confused by IPv6 addresses, because of the additional colons they contain. I have fixed the IPv4 problem, and patched it up to do a reasonable job for IPv6. 3. When there is an error after a MAIL, RCPT, or DATA SMTP command during delivery, the log line now contains "pipelined" if PIPELINING was used. 4. An SMTP transport process used to panic and die if the bind() call to set an explicit outgoing interface failed. This has been changed; it is now treated in the same way as a connect() failure. 5. A reference to $sender_host_name in the part of a conditional expansion that was being skipped was still causing a DNS lookup. This no longer occurs. 6. The def: expansion condition was not recognizing references to header lines that used bh_ and bheader_. 7. Added the _cache feature to named lists. 8. The code for checking quota_filecount in the appendfile transport was allowing one more file than it should have been. 9. For compatibility with Sendmail, the command line option -prval:sval is equivalent to -oMr rval -oMs sval and sets the incoming protocol and host name (for trusted callers). The host name and its colon can be omitted when only the protocol is to be set. Note the Exim already has two private options, -pd and -ps, that refer to embedded Perl. It is therefore impossible to set a protocol value of "p" or "s", but I don't think that's a major issue. 10. A number of refactoring changes to the code, none of which should affect Exim's behaviour: (a) The number of logging options was getting close to filling up the 32-bit word that was used as a bit map. I have split them into two classes: those that are passed in the argument to log_write(), and those that are only ever tested independently outside of that function. These are now in separate 32-bit words, so there is plenty of room for expansion again. There is no change in the user interface or the logging behaviour. (b) When building, for example, log lines, the code previously used a macro that called string_cat() twice, in order to add two strings. This is not really sufficiently general. Furthermore, there was one instance where it was actually wrong because one of the argument was used twice, and in one call a function was used. (As it happened, calling the function twice did not affect the overall behaviour.) The macro has been replaced by a function that can join an arbitrary number of extra strings onto a growing string. (c) The code for expansion conditions now uses a table and a binary chop instead of a serial search (which was left over from when there were very few conditions). Also, it now recognizes conditions like "pam" even when the relevant support is not compiled in: a suitably worded error message is given if an attempt is made to use such a condition. 11. Added ${time_interval:xxxxx}. 12. A bug was causing one of the ddress fields not to be passed back correctly from remote delivery subprocesses. The field in question was not being subsequently used, so this caused to problems in practice. 13. Added new log selectors queue_time and deliver_time. 14. Might have fixed a bug in maildirsizefile handling that threw up "unexpected character" debug warnings, and recalculated the data unnecessarily. In any case, I expanded the warning message to give more information. 15. Added the message "Restricted characters in address" to the statements in the default ACL that block characters like @ and % in local parts. 16. Change 71 for release 4.31 proved to be much less benign that I imagined. Three changes have been made: (a) There was a serious bug; a negative response to MAIL caused the whole recipient domain to be cached as invalid, thereby blocking all messages to all local parts at the same domain, from all senders. This bug has been fixed. The domain is no longer cached after a negative response to MAIL if the sender used is not empty. (b) The default behaviour of using MAIL FROM:<> for recipient callouts has been restored. (c) A new callout option, "use_sender" has been added for people who want the modified behaviour. ****