Exim version 4.43 ----------------- 1. Fixed a longstanding but relatively impotent bug: a long time ago, before PIPELINING, the function smtp_write_command() used to return TRUE or FALSE. Now it returns an integer. A number of calls were still expecting a T/F return. Fortuitously, in all cases, the tests worked in OK situations, which is the norm. However, things would have gone wrong on any write failures on the smtp file descriptor. This function is used when sending messages over SMTP and also when doing verify callouts. 2. When Exim is called to do synchronous delivery of a locally submitted message (the -odf or -odi options), it no longer closes stderr before doing the delivery. 3. Implemented the mua_wrapper option. 4. Implemented mx_fail_domains and srv_fail_domains for the dnslookup router. 5. Implemented the functions header_remove(), header_testname(), header_add_at_position(), and receive_remove_recipient(), and exported them to local_scan(). 6. If an ACL "warn" statement specified the addition of headers, Exim already inserted X-ACL-Warn: at the start if there was no header name. However, it was not making this test for the second and subsequent header lines if there were newlines in the string. This meant that an invalid header could be inserted if Exim was badly configured. 7. Allow an ACL "warn" statement to add header lines at the start or after all the Received: headers, as well as at the end. 8. Added the rcpt_4xx retry error code. 9. Added postmaster_mailfrom=xxx to callout verification option. 10. Added mailfrom=xxxx to the callout verification option, for verify= header_sender only. 11. ${substr_1_:xxxx} and ${substr__3:xxxx} are now diagnosed as syntax errors (they previously behaved as ${substr_1_0:xxxx} and ${substr:_0_3:xxxx}). 12. Inserted some casts to stop certain compilers warning when using pointer differences as field lengths or precisions in printf-type calls (mostly affecting debugging statements). 13. Added optional readline() support for -be (dynamically loaded). 14. Obscure bug fix: if a message error (e.g. 4xx to MAIL) happened within the same clock tick as a message's arrival, so that its received time was the same as the "first fail" time on the retry record, and that message remained on the queue past the ultimate address timeout, every queue runner would try a delivery (because it was past the ultimate address timeout) but after another failure, the ultimate address timeout, which should have then bounced the address, did not kick in. This was a "< instead of <=" error; in most cases the first failure would have been in the next clock tick after the received time, and all would be well. 15. The special items beginning with @ in domain lists (e.g. @mx_any) were not being recognized when the domain list was tested by the match_domain condition in an expansion string. 16. Added the ${str2b64: operator. 17. Exim was always calling setrlimit() to set a large limit for the number of processes, without checking whether the existing limit was already adequate. (It did check for the limit on file descriptors.) Furthermore, errors from getrlimit() and setrlimit() were being ignored. Now they are logged to the main and panic logs, but Exim does carry on, to try to do its job under whatever limits there are. 18. Imported PCRE 5.0. 19. Trivial typo in log message " temporarily refused connection" (the leading space). 20. If the log selector return_path_on_delivery was set and an address was redirected to /dev/null, the delivery process crashed because it assumed that a return path would always be set for a "successful" delivery. In this case, the whole delivery is bypassed as an optimization, and therefore no return path is set. 21. Internal re-arrangement: the function for sending a challenge and reading a response while authentication was assuming a zero-terminated challenge string. It's now changed to take a pointer and a length, to allow for binary data in such strings. 22. Added the cyrus_sasl authenticator (code supplied by MBM). 23. Exim was not respecting finduser_retries when seeking the login of the uid under which it was called; it was always trying 10 times. (The default setting of finduser_retries is zero.) Also, it was sleeping after the final failure, which is pointless. 24. Implemented tls_on_connect_ports. 25. Implemented acl_smtp_predata. 26. If the domain in control=submission is set empty, Exim assumes that the authenticated id is a complete email address when it generates From: or Sender: header lines. 27. Added "#define SOCKLEN_T int" to OS/os.h-SCO and OS/os.h-SCO_SV. Also added definitions to OS/Makefile-SCO and OS/Makefile-SCO_SV that put basename, chown and chgrp in /bin and hostname in /usr/bin. 28. Exim was keeping the "process log" file open after each use, just as it does for the main log. This opens the possibility of it remaining open for long periods when the USR1 signal hits a daemon. Occasional processlog errors were reported, that could have been caused by this. Anyway, it seems much more sensible not to leave this file open at all, so that is what now happens. 29. The long-running daemon process does not normally write to the log once it has entered its main loop, and it closes the log before doing so. This is so that log files can straightforwardly be renamed and moved. However, there are a couple of unusual error situations where the daemon does write log entries, and I had neglected to close the log afterwards. 30. The text of an SMTP error response that was received during a remote delivery was being truncated at 512 bytes. This is too short for some of the long messages that one sometimes sees. I've increased the limit to 1024. 31. It is now possible to make retry rules that apply only when a message has a specific sender, in particular, an empty sender. 32. Added "control = enforce_sync" and "control = no_enforce_sync". This makes it possible to be selective about when SMTP synchronization is enforced. 33. Added "control = caseful_local_part" and "control = "caselower_local_part". 32. Implemented hosts_connection_nolog. 33. Added an ACL for QUIT. 34. Setting "delay_warning=" to disable warnings was not working; it gave a syntax error. 35. Added mailbox_size and mailbox_filecount to appendfile. 36. Added control = no_multiline_responses to ACLs. 37. There was a bug in the logic of the code that waits for the clock to tick in the case where the clock went backwards by a substantial amount such that the microsecond fraction of "now" was more than the microsecond fraction of "then" (but the whole seconds number was less). 38. Added support for the libradius Radius client library this is found on FreeBSD (previously only the radiusclient library was supported). ****