Exim version 4.23 ----------------- 1. Typo in the src/EDITME file: it referred to HEADERS_DECODE_TO instead of HEADERS_CHARSET. 2. Change 4.21/73 introduced a bug. The pid file path set by -oP was being ignored. Though the use of -oP was forcing the writing of a pid file, it was always written to the default place. 3. If the message "no IP address found for host xxxx" is generated during incoming verification, it is now followed by identification of the incoming connection (so you can more easily find what provoked it). 4. Bug fix for Sieve filters: "stop" inside a block was not working properly. 5. Added some features to "harden" Exim a bit more against certain attacks: (a) There is now a build-time option called FIXED_NEVER_USERS that can be put in Local/Makefile. This is like the never_users runtime option, but it cannot be overridden. The default setting is "root". (b) If ALT_CONFIG_PREFIX is defined in Local/Makefile, it specifies a prefix string with which any file named in a -C command line option must start. (c) If ALT_CONFIG_ROOT_ONLY is defined in Local/Makefile, root privilege is retained for -C and -D only if the caller of Exim is root. Without it, the exim user may also use -C and -D and retain privilege. (d) If DISABLE_D_OPTION is defined in Local/Makefile, the use of the -D command line option is disabled. 6. Macro names set by the -D option must start with an upper case letter, just like macro names defined in the configuration file. 7. Added "dereference=" facility to LDAP. 8. Two instances of the typo "uknown" in the source files are fixed. 9. If a PERL_COMMAND setting in Local/Makefile was not at the start of a line, the Configure-Makefile script screwed up while processing it. 10. Incorporated PCRE 4.4. 11. The SMTP synchronization check was not operating right at the start of an SMTP session. For example, it could not catch a HELO sent before the client waited for the greeting. There is now a check for outstanding input at the point when the greeting is written. Because of the duplex, asynchronous nature of TCP/IP, it cannot be perfect - the incorrect input may be on its way, but not yet received, when the check is performed. 12. Added tcp_nodelay to make it possible to turn of the setting of TCP_NODELAY on TCP/IP sockets, because this apparently causes some broken clients to timeout. 13. Installed revised OS/Makefile-CYGWIN and OS/os.c-cygwin (the .h file was unchanged) from the Cygwin maintainer. 14. The code for -bV that shows what is in the binary showed "mbx" when maildir was supported instead of testing for mbx. Effectively a typo. 15. The spa authenticator server code was not checking that the input it received was valid base64. 16. The debug output line for the "set" modifier in ACLs was not showing the name of the variable that was being set. 17. Code tidy: the variable type "vtype_string" was never used. Removed it. 18. Previously, a reference to $sender_host_name did not cause a DNS reverse lookup on its own. Something else was needed to trigger the lookup. For example, a match in host_lookup or the need for a host name in a host list. Now, if $sender_host_name is referenced and the host name has not yet been looked up, a lookup is performed. If the lookup fails, the variable remains empty, and $host_lookup_failed is set to "1". 19. Added "eqi" as a case-independent comparison operator. 20. The saslauthd authentication condition could segfault if neither service nor realm was specified. 21. If an overflowing value such as "2048M" was set for message_size_limit, the error message that was logged was misleading, and incoming SMTP connections were dropped. The message is now more accurate, and temporary errors are given to SMTP connections. 22. In some error situations (such as 21 above) Exim rejects all SMTP commands (except RSET) with a 421 error, until QUIT is received. However, it was failing to send a response to QUIT. 23. The HELO ACL was being run before the code for helo_try_verify_hosts, which made it impossible to use "verify = helo" in the HELO ACL. The HELO ACL is now run after the helo_try_verify_hosts code. 24. "{MD5}" and "{SHA1}" are now recognized as equivalent to "{md5"} and "{sha1}" in the "crypteq" expansion condition (in fact the comparison is case-independent, so other case variants are also recognized). Apparently some systems use these upper case variants. 25. If more than two messages were waiting for the same host, and a transport filter was specified for the transport, Exim sent two messages over the same TCP/IP connection, and then failed with "socket operation on non- socket" when it tried to send the third. 26. Added Exim::debug_write and Exim::log_write for embedded Perl use. 27. The extern definition of crypt16() in expand.c was not being excluded when the OS had its own crypt16() function. 28. Added bounce_return_body as a new option, and bounce_return_size_limit as a preferred synonym for return_size_limit, both as an option and as an expansion variable. 29. Added LIBS=-liconv to OS/Makefile-OSF1. 30. Changed the default configuration ACL to relax the local part checking rule for addresses that are not in any local domains. For these addresses, slashes and pipe symbols are allowed within local parts, but the sequence /../ is explicitly forbidden. 31. SPA server authentication was not clearing the challenge buffer before using it. 32. log_message in a "warn" ACL statement was writing to the reject log as well as to the main log, which contradicts the documentation and doesn't seem right (because no rejection is happening). So I have stopped it. 33. Added Ard Biesheuvel's lookup code for accessing an Interbase database. However, I am unable to do any testing of this. 34. Fixed an infelicity in the appendfile transport. When checking directories for a mailbox, to see if any needed to be created, it was accidentally using path names with one or more superfluous leading slashes; tracing would show up entries such as stat("///home/ph10", 0xFFBEEA48). 35. If log_message is set on a "discard" verb in a MAIL or RCPT ACL, its contents are added to the log line that is written for every discarded recipient. (Previously a log_message setting was ignored.) 36. The ${quote: operator now quotes the string if it is empty. 37. The install script runs exim in order to find its version number. If for some reason other than non-existence or emptiness, which it checks, it could not run './exim', it was installing it with an empty version number, i.e. as "exim-". This error state is now caught, and the installation is aborted. 38. An argument was missing from the function that creates an error message when Exim fails to connect to the socket for saslauthd authentication. This could cause Exim to crash, or give a corrupted message. 39. Added isip, isip4, and isip6 to ${if conditions. 40. The ACL variables $acl_xx are now saved with the message, and can be accessed later in routers, transports, and filters. 41. The new lookup type nwildlsearch is like wildlsearch, except that the key strings in the file are not string-expanded. 42. If a MAIL command specified a SIZE value that was too large to fit into an int variable, the check against message_size_limit failed. Such values are now forced to INT_MAX, which is around 2Gb for a 32-bit variable. Maybe one day this will have to be increased, but I don't think I want to be around when emails are that large. ****