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.
****