Exim version 4.42 ----------------- 1. When certain lookups returned multiple values in the form name=value, the quoting of the values was not always being done properly. Specifically: (a) If the value started with a double quote, but contained no whitespace, it was not quoted. (b) If the value contained whitespace other than a space character (i.e. tabs or newlines or carriage returns) it was not quoted. This fix has been applied to the mysql and pgsql lookups by writing a separate quoting function and calling it from the lookup code. The fix should probably also be applied to nisplus, ibase and oracle lookups, but since I cannot test any of those, I have not disturbed their existing code. 2. A hit in the callout cache for a specific address caused a log line with no reason for rejecting RCPT. Now it says "Previous (cached) callout verification failure". 3. There was an off-by-one bug in the queryprogram router. An over-long return line was truncated at 256 instead of 255 characters, thereby overflowing its buffer with the terminating zero. As well as fixing this, I have increased the buffer size to 1024 (and made a note to document this). 4. If an interrupt, such as the USR1 signal that is send by exiwhat, arrives when Exim is waiting for an SMTP response from a remote server, Exim restarts its select() call on the socket, thereby resetting its timeout. This is not a problem when such interrupts are rare. Somebody set up a cron job to run exiwhat every 2 minutes, which is less than the normal select() timeout (5 or 10 minutes). This meant that the select() timeout never kicked in because it was always reset. I have fixed this by comparing the time when an interrupt arrives with the time at the start of the first call to select(). If more time than the timeout has elapsed, the interrupt is treated as a timeout. 5. Some internal re-factoring in preparation for the addition of Sieve extensions (by MH). In particular, the "personal" test is moved to a separate function, and given an option for scanning Cc: and Bcc: (which is not set for Exim filters). 6. When Exim created an email address using the login of the caller as the local part (e.g. when creating a From: or Sender: header line), it was not quoting the local part when it contained special characters such as @. 7. Installed new OpenBSD configuration files. 8. Reworded some messages for syntax errors in "and" and "or" conditions to try to make them clearer. 9. Callout options, other than the timeout value, were being ignored when verifying sender addresses in header lines. For example, when using verify = header_sender/callout=no_cache the cache was (incorrectly) being used. 10. Added a missing instance of ${EXE} to the exim_install script; this affects only the Cygwin environment. 11. When return_path_on_delivery was set as a log selector, if different remote addresses in the same message used different return paths and parallel remote delivery occurred, the wrong values would sometimes be logged. (Whenever a remote delivery process finished, the return path value from the most recently started remote delivery process was logged.) 12. RFC 3848 specifies standard names for the "with" phrase in Received: header lines when AUTH and/or TLS are in use. This is the "received protocol" field. Exim used to use "asmtp" for authenticated SMTP, without any indication (in the protocol name) for TLS use. Now it follows the RFC and uses "esmtpa" if the connection is authenticated, "esmtps" if it is encrypted, and "esmtpsa" if it is both encrypted and authenticated. These names appear in log lines as well as in Received: header lines. 13. Installed MH's patches for Sieve to add the "copy" and "vacation" extensions, and comparison tests, and to fix some bugs. 14. Changes to the "personal" filter test: (1) The test was buggy in that it was just doing the equivalent of "contains" tests on header lines. For example, if a user's address was anne@some.where, the "personal" test would incorrectly be true for To: susanne@some.where This test is now done by extracting each address from the header in turn, and checking the entire address. Other tests that are part of "personal" are now done using regular expressions (for example, to check local parts of addresses in From: header lines). (2) The list of non-personal local parts in From: addresses has been extended to include "listserv", "majordomo", "*-request", and "owner-*", taken from the Sieve specification recommendations. (3) If the message contains any header line starting with "List-" it is treated as non-personal. (4) The test for "circular" in the Subject: header line has been removed because it now seems ill-conceived. 15. Minor typos in src/EDITME comments corrected. 16. Installed latest exipick from John Jetmore. 17. If headers_add on a router specified a text string that was too long for string_sprintf() - that is, longer than 8192 bytes - Exim panicked. The use of string_sprintf() is now avoided. 18. $message_body_size was not set (it was always zero) when running the DATA ACL and the local_scan() function. 19. For the "mail" command in an Exim filter, no default was being set for the once_repeat time, causing a random time value to be used if "once" was specified. (If the value happened to be <= 0, no repeat happened.) The default is now 0s, meaning "never repeat". The "vacation" command was OK (its default is 7d). It's somewhat surprising nobody ever noticed this bug (I found it when inspecting the code). 20. There is now an overall timeout for performing a callout verification. It defaults to 4 times the callout timeout, which applies to individual SMTP commands during the callout. The overall timeout applies when there is more than one host that can be tried. The timeout is checked before trying the next host. This prevents very long delays if there are a large number of hosts and all are timing out (e.g. when the network connections are timing out). The value of the overall timeout can be changed by specifying an additional sub-option for "callout", called "maxwait". For example: verify = sender/callout=5s,maxwait=20s 21. Add O_APPEND to the open() call for maildirsize files (Exim already seeks to the end before writing, but this should make it even safer). 22. Exim was forgetting that it had advertised PIPELINING for the second and subsequent messages on an SMTP connection. It was also not resetting its memory on STARTTLS and an internal HELO. 23. When Exim logs an SMTP synchronization error within a session, it now records whether PIPELINING has been advertised or not. 24. Added 3 instances of "(long int)" casts to time_t variables that were being formatted using %ld, because on OpenBSD (and perhaps others), time_t is int rather than long int. 25. Installed the latest Cygwin configuration files from the Cygwin maintainer. 26. Added the never_mail option to autoreply. ****