Exim version 4.10 ----------------- 1. Added HAVE_SA_LEN=YES to the OS/Makefile-Darwin file, because it needs it (unsurprising, as it's based on FreeBSD). 2. Removed the HTML versions of the PCRE and pcretest documentation from the distribution tarbundle, and instead included them in the HTML tarbundle, linked to the overall index file. 3. The code for computing load averages was broken in 64-bit Solaris. 4. Make the default ACL refuse local parts that start with a dot. 5. LDAP binds with an empty password are considered anonymous regardless of the username and will succeed in most configurations. Exim has been changed so that the LDAP authentication (the ${if ldapauth... condition) always fails when an empty password is used. 6. Remove quoting from rbl_domains when used in an ACL by the convert4r4 script. 7. A lookup entry in a list that had spaces after the lookup type, e.g. "lsearch; /etc/relaydomains" was including the space as part of the file name. 8. Give an error if EXIM_USER or EXIM_GROUP contains control characters (it happened when somebody had CRLF terminations in Local/Makefile, which messed up the "unknown user" error message). 9. Ensure recipient address appears in log line for internal pipe problems during redirection. 10. Tidies to code for calls to fork(): (a) 3 typos of "<=" that should have been "<" (but would have no actual effect). (b) 2 cases of fork() failures not being logged: during -M for multiple messages, and for auto-delivery of incoming messages. 11. A reference to any header line that contains addresses (e.g. $h_to:) caused a crash if the header was empty. Change 46 for 4.05 introduced this bug. 12. If a system filter file was defined as a non-absolute path, but system_ filter_user was undefined, Exim's behaviour was undefined. It could, for example, discard all deliveries, thinking the system filter had overridden them all. Delivery is now deferred, with a message written to the panic log. 13. If a redirection file (or system filter file when system_filter_user was set) was defined as a non-absolute path containing no slash characters, Exim crashed. 14. Added $rcpt_count, containing the number of RCPT commands received during an SMTP transaction. This differs from $recipients_count when some of the RCPTs are rejected. 15. Added $pid, containing the pid of the current process. 16. Fixed uninitialized variable warning in eximstats for relayed messages when there was no sending host name (logged as H=[n.n.n.n]). There's no change of output. 17. The exiqusumm script failed horribly if it encountered a message that had been on the queue for 100 days or more. 18. Added the message_logs option for suppressing the writing of message logs. 19. Allow local_scan() to change the errors_to setting on recipient addresses. (This was made trivially possible because of change 10 in 4.03.) 20. Convert4r4 changed: if forbid_pipe is set on a forwardfile director, also set forbid_filter_run on the generated redirect router. 21. In the Makefile, $(INCLUDE) was preceding the -I. item that refers to Exim's own include files. This caused a conflict with an external library that also happened to have a config.h file. Exim saw the wrong file, and chaos ensued. I've moved the -I. item in the relevant lines so that it comes before $(INCLUDE). 22. Added $acl_verify_message to contain any existing user message when expanding the "message" modifier in an ACL. 23. Changed the default argument for egrep when called in exiwhat to find Exim processes. It is now ' exim( |$$|-)' instead of ' exim( |$$)' so that it works on OS where the true file name appears. 24. In the plaintext authenticator, server_prompts was not being expanded, as documented. It now is. 25. The exinext script was outputting in an incorrect format for routing delays. It said "deliver" when it should have said "route", and the layout of the text was screwed up. In fact, "deliver" is not the right word anyway. I've changed it to "transport". Also removed redundant code for "directing" delays, because these can't occur in Exim 4. 26. Fixed some problems concerned with retrying address errors in remote deliveries: (a) I'd overlooked temporary address errors, and assumed that all the retry items would be for host errors, and therefore on the first address when multiple RCPTs were involved. Consequently, no retry record was written for second and subsequent addresses if they received a 4xx error. Thus, these addresses wouldn't be delayed after such a delivery failure. (b) A temporary address error causes a routing delay; when the address is eventually tried again, and routing succeeds, the retry record is flagged for deletion. If the address gets another temporary error, the retry record got updated, and then deleted. Thus, temporary address errors were not being delayed and would be tried on every queue run. 27. A minor code tidy for the CRAM-MD5 authenticator. 28. Some OS have a command to select processes by the name of the command they are running, and send a signal to them. Linux and FreeBSD have "killall"; Solaris has "pkill" (it also has "killall", but that does something disastrously different). Using such a command makes "exiwhat" more efficient, and reduces the chances of it trying to signal a non-existent process. There are now two build-time parameters, EXIWHAT_MULTIKILL_CMD and EXIWHAT_MULTIKILL_ARG, which can be set to enable this feature to be used. They are defined in the OS-specific files for Linux, FreeBSD, and Solaris. See OS/Makefile-Default for more details. 29. As part of tidying up for 28, changed the name of the build-time parameter EXIWHAT_KILL_ARG to EXIWHAT_KILL_SIGNAL so that its name makes more sense when used in both kinds of exiwhat processing. 30. By default, the daemon doesn't write a pid file if -bd is not used (i.e. if only -q is used). The -oP didn't override this - it was ignored. It now overrides the default and causes a pid file to be written. 31. The values of $local_part, $domain, etc. were not being set during the expansion of shadow_condition in a local transport. 32. The convert4r4 script failed when macros that had continuation lines were present in the Exim 3 configuration file. It inserted junk lines into the output and gave uninitialized variable errors. 33. The convert4r4 script discards (with a comment) a setting of "rewrite" on a smartuser director that has no setting of new_address when it turns it into an "accept" router. 34. When an alias generated an address with a single-component domain, and routing that domain caused it to be widened, Exim remembered only that it had delivered to the widened domain. If any other addresses were deferred, so that another delivery attempt happened later, Exim re-delivered to the widened address, because it checked only the original address. When this kind of widening happens, Exim now checks for previous delivery. 35. A delivery was silently discarded under the following specific circumstances: . The original address is x@a.b.c, where a.b.c is the local host; . a.b.c is recognized as a local domain, and the address is redirected to x@a; . a is not recognized as a local domain, causing the address to be processed by a dnslookup router; . the router widens the address to a.b.c, routes it, and discovers it is the local host. Exim realized that because the domain had been widened, it might have become a local domain, so it arranged to re-route from scratch, using the new domain. However, because the original address was the same address, it thought it had already dealt with it. 36. A space at the start of an LDAP query in an expansion (after the opening curly) was provoking a syntax error. 37. A syntax error in the data of an ldapauth expansion caused the condition to be false without an LDAP query even being tried. Now it causes the expansion to fail. 38. Ensure that an incomplete config.h is removed when the buildconfig program gives an error. Otherwise, if the error is a non-existent Exim user, and the admin fixes this by creating the user (and not modifying any files), Exim will try to use the broken config.h next time. 39. A call with an argument of the form "-D=xxxx" (i.e. omitting the macro name) caused Exim to loop. It now reports an error. 40. If an ACL tested an address for being in a named domain list (e.g. +relay_domains) and then called for recipient verification, and the recipient was rewritten, the cache for remembering matching domain lists was not being cleared after the rewrite, leading to potential routing (and therefore verification) errors. Furthermore, the rewritten address would (incorrectly) have been used for any subsequent address checking within the ACL. 41. If an address such as a%b@c was processed using the "percent hack" and then transmitted over SMTP, Exim was sending "RCPT TO:" instead of "RCPT TO:". 42. A revised Makefile-CYGWIN file from Pierre Humblet. 43. If local_scan() rejected a -bS message, it wasn't handling the error in the way -bS errors should be handled. ****