New Features in Exim
--------------------

This file contains descriptions of new features that have been added to Exim,
but have not yet made it into the main manual (which is most conveniently
updated when there is a relatively large batch of changes). The ChangeLog file
contains a brief listing of *all* changes, including bug fixes.

When the manual is up-to-date with the code and there have been a lot of recent
changes, the more important ones may be listed here for convenient reference.
Otherwise this file will contain just these two introductory paragraphs.


Version 1.62
------------

1. When a domain in a rewriting rule is looked up using a partial search, in
addition to setting the wild part of the domain in the next numerical variable,
the fixed part of the domain is now also placed in the succeeding variable.
Thus, for example, if the address foo@bar.baz.com is processed by a rewriting
rule of the form

*@partial-dbm;/some/dbm/file    <replacement string>

and the key in the file that matches the domain is *.baz.com, then

  $1 = foo
  $2 = bar
  $3 = baz.com

If the address foo@baz.com is looked up, this matches the same wildcard file
entry, and in this case $2 is set to the empty string, but $3 is still set to
"baz.com". If a non-wild key is matched in a partial lookup, then again $2 is
set to the empty string and $3 is set to the whole domain. For non-partial
lookups, no numerical variables are set.

2. When a partial search is used in a ${lookup} expansion, the variables $1 and
$2 contain the wild and non-wild parts of the key during the expansion of the
replacement text. They return to their previous values at the end of the
${lookup} item.

3. Leading and trailing space removed from items in string lists. This is to
help with IPv6 addresses, but does mean that lists can be spaced to improve the
layout.

4. Experimental IPv6 support added. When Exim is built with HAVE_IPV6 is set,
it uses the IPv6 API for TCP/IP input and output. IP addresses can be given in
IPv6 notation; incoming IPv4 calls use the embedded IPv6 address notation.
Currently, Exim cannot discover for itself the addresses of the host's IPv6
interfaces (at least, not on Solaris 2) so local_interfaces must always be used
to list them, to prevent mail looping. Ident callbacks are also not available
for IPv6.

Lists that may contain IP addresses can contain a mixture of IPv4 and IPv6
addresses. The presence of a colon in a string is taken as an indication that
it is an IPv6 address.

Listing IPv6 addresses in string lists such as local_interfaces is a pain,
because they contain colons, and colon is the item separator. The colons in the
address must therefore be doubled. Another problem is that IPv6 addresses
sometimes start with a colon and such addresses can therefore not be
immediately juxtaposed with the previous colon separator. White space (which is
now ignored at the start and end of list items) must be inserted. For example:

local_interfaces = "127.0.0.1: \
                    ::::1"

If a host that is looked up in the DNS has both A and AAAA records, all the
addresses will be used. See README.IPV6 for general information about IPv6
support.

5. The debug level can be set by debug_level in the configuration file, thus
enabling it to be set when calling Exim from an MUA.

6. The forwardfile director now has an option called check_ancestor, which is
off by default, but which is set in the default configuration file for handling
users' .forward files. It is recommended for this use of forwardfile. When set,
if a generated address is the same as *any* ancestor of the current address,
then it is not used, but instead the current address gets passed on to
subsequent directors. This covers the case where address A is aliased to B, and
then B has a .forward file pointing back to A. Common example: Joe.Bloggs is
aliased to jb and ~jb/.forward contains:

\Joe.Bloggs, some.other.address

Without the check_ancestor setting, either address (jb or joe.bloggs) gets
processed once by each director and so ends up as it was originally. If jb is
the real mailbox name, then mail to jb gets delivered, while mail to joe.bloggs
fails. Setting check_ancestor on the forwardfile director prevents it from
turning jb into joe.bloggs when the original address was joe.bloggs.

7. By default, if relaying controls are specified on both the remote host and
the sender address, a message is accepted only if both conditions are met. If
the new option relay_match_host_or_sender is set, then either condition is good
enough.

End
