Exim version 4.40 ----------------- 1. If "drop" was used in a DATA ACL, the SMTP output buffer was not flushed before the connection was closed, thus losing the rejection response. 2. Commented out the definition of SOCKLEN_T in os.h-SunOS5. It is needed for some early Solaris releases, but causes trouble in current releases where socklen_t is defined. 3. When std{in,out,err} are closed, re-open them to /dev/null so that they always exist. 4. Minor refactoring of os.c-Linux to avoid compiler warning when IPv6 is not configured. 5. Refactoring in expand.c to improve memory usage. Pre-allocate a block so that releasing the top of it at the end releases what was used for sub- expansions (unless the block got too big). However, discard this block if the first thing is a variable or header, so that we can use its block when it is dynamic (useful for very large $message_headers, for example). 6. Lookups now cache *every* query, not just the most recent. A new, separate store pool is used for this. It can be recovered when all lookup caches are flushed. Lookups now release memory at the end of their result strings. This has involved some general refactoring of the lookup sources. 7. Some code has been added to the store_xxx() functions to reduce the amount of flapping under certain conditions. 8. log_incoming_interface used to affect only the <= reception log lines. Now it causes the local interface and port to be added to several more SMTP log lines, for example "SMTP connection from", and rejection lines. 9. The Sieve author supplied some patches for the doc/README.SIEVE file. 10. Added a conditional definition of _BSD_SOCKLEN_T to os.h-Darwin. 11. If $host_data was set by virtue of a hosts lookup in an ACL, its value could be overwritten at the end of the current message (or the start of a new message if it was set in a HELO ACL). The value is now preserved for the duration of the SMTP connection. 12. If a transport had a headers_rewrite setting, and a matching header line contained an unqualified address, that address was qualified, even if it did not match any rewriting rules. The underlying bug was that the values of the flags that permit the existence of unqualified sender and recipient addresses in header lines (set by {sender,recipient}_unqualified_hosts for non-local messages, and by -bnq for local messages) were not being preserved with the message after it was received. 13. When Exim was logging an SMTP synchronization error, it could sometimes log "next input=" as part of the text comprising the host identity instead of the correct text. The code was using the same buffer for two different strings. However, depending on which order the printing function evaluated its arguments, the bug did not always show up. Under Linux, for example, my test suite worked just fine. 14. Exigrep contained a use of Perl's "our" scoping after change 4.31/70. This doesn't work with some older versions of Perl. It has been changed to "my", which in any case is probably the better facility to use. 15. A really picky compiler found some instances of statements for creating error messages that either had too many or two few arguments for the format string. 16. The size of the buffer for calls to the DNS resolver has been increased from 1024 to 2048. A larger buffer is needed when performing PTR lookups for addresses that have a lot of PTR records. This alleviates a problem; it does not fully solve it. 17. A dnsdb lookup for PTR records that receives more data than will fit in the buffer now truncates the list and logs the incident, which is the same action as happens when Exim is looking up a host name and its aliases. Previously in this situation something unpredictable would happen; sometimes it was "internal error: store_reset failed". 18. If a server dropped the connection unexpectedly when an Exim client was using GnuTLS and trying to read a response, the client delivery process crashed while trying to generate an error log message. 19. If a "warn" verb in an ACL added multiple headers to a message in a single string, for example: warn message = H1: something\nH2: something the text was added as a single header line from Exim's point of view though it ended up OK in the delivered message. However, searching for the second and subsequent header lines using $h_h2: did not work. This has been fixed. Similarly, if a system filter added multiple headers in this way, the routers could not see them. 20. Expanded the error message when iplsearch is called with an invalid key to suggest using net-iplsearch in a host list. 21. When running tests using -bh, any delays imposed by "delay" modifiers in ACLs are no longer actually imposed (and a message to that effect is output). 22. If a "gecos" field in a passwd entry contained escaped characters, in particular, if it contained a \" sequence, Exim got it wrong when building a From: or a Sender: header from that name. A second bug also caused incorrect handling when an unquoted " was present following a character that needed quoting. 23. "{crypt}" as a password encryption mechanism for a "crypteq" expansion item was not being matched caselessly. 24. Arranged for all hyphens in the exim.8 source to be escaped with backslashes. 25. Change 16 of 4.32, which reversed 71 or 4.31 didn't quite do the job properly. Recipient callout cache records were still being keyed to include the sender, even when use_sender was set false. This led to far more callouts that were necessary. The sender is no longer included in the key when use_sender is false. 26. Added "control = submission" modifier to ACLs. 27. Added the ${base62d: operator to decode base 62 numbers. 28. dnsdb lookups can now access SRV records. 29. CONFIGURE_OWNER can be set at build time to define an alternative owner for the configuration file. 30. The debug message "delivering xxxxxx-xxxxxx-xx" is now output in verbose (-v) mode. This makes the output for a verbose queue run more intelligible. 31. Added a use_postmaster feature to recipient callouts. 32. Added the $body_zerocount variable, containing the number of binary zero bytes in the message body. 33. The time of last modification of the "new" subdirectory is now used as the "mailbox time last read" when there is a quota error for a maildir delivery. 34. Added string comparison operators lt, lti, le, lei, gt, gti, ge, gei. 35. Added +ignore_unknown as a special item in host lists. 36. Code for decoding IPv6 addresses in host lists is now included, even if IPv6 support is not being compiled. This fixes a bug in which an IPv6 address was recognized as an IP address, but was then not correctly decoded into binary, causing unexpected and incorrect effects when compared with another IP address. ****