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.

****
