Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > 3d4d9cc28af00be9852b4cb3055b122e > files > 121

exim-doc-4.69-4.fc12.noarch.rpm

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style xmlns="" type="text/css">
div.added    { background-color: #ffff99; }
div.deleted  { text-decoration: line-through;
               background-color: #FF7F7F; }
div.changed  { background-color: #99ff99; }
div.off      {  }

span.added   { background-color: #ffff99; }
span.deleted { text-decoration: line-through;
               background-color: #FF7F7F; }
span.changed { background-color: #99ff99; }
span.off     {  }



pre.literallayout {
  background-color: #E8E8D0;
  padding-left: 0.5cm;
  padding-top:  5px;
  padding-bottom: 5px;
}

div[class=changed] pre.literallayout {
  background-color: #99ff99;
  padding-left: 0.5cm;
  padding-top:  5px;
  padding-bottom: 5px;
}

div.literallayout {
  background-color: #E8E8D0;
  padding-left: 0.5cm;
  padding-top:  5px;
  padding-bottom: 5px;
}

div[class=changed] div.literallayout {
  background-color: #99ff99;
  padding-left: 0.5cm;
  padding-top:  5px;
  padding-bottom: 5px;
}

</style><title>15. Generic options for routers</title><meta name="generator" content="DocBook XSL Stylesheets V1.72.0" /><link rel="start" href="index.html" title="Specification of the Exim Mail Transfer Agent" /><link rel="up" href="index.html" title="Specification of the Exim Mail Transfer Agent" /><link rel="prev" href="ch14.html" title="14. Main configuration" /><link rel="next" href="ch16.html" title="16. The accept router" /></head><body><div class="navheader">
<table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="ch14.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch16.html">Next</a></td></tr></table></div>
<div class="chapter" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a href="index.html#toc0186" id="CHAProutergeneric">15. Generic options for routers</a></h2></div></div>
</div>
<p>
<a id="IIDgenoprou1" class="indexterm"></a>
<a id="IIDgenoprou2" class="indexterm"></a>
This chapter describes the generic options that apply to all routers.
Those that are preconditions are marked with ‡ in the “<span class="quote">use</span>” field.
</p>
<p>
For a general description of how a router operates, see sections
<a href="ch03.html#SECTrunindrou" title="3.10 Running an individual router">3.10</a> and <a href="ch03.html#SECTrouprecon" title="3.12 Router preconditions">3.12</a>. The latter specifies the order in
which the preconditions are tested. The order of expansion of the options that
provide data for a transport is: <span><strong class="option">errors_to</strong></span>, <span><strong class="option">headers_add</strong></span>,
<span><strong class="option">headers_remove</strong></span>, <span><strong class="option">transport</strong></span>.
</p>
<p>
<a id="id559593" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">address_data</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id559678" class="indexterm"></a>
The string is expanded just before the router is run, that is, after all the
precondition tests have succeeded. If the expansion is forced to fail, the
router declines, the value of <span><strong class="option">address_data</strong></span> remains unchanged, and the
<span><strong class="option">more</strong></span> option controls what happens next. Other expansion failures cause
delivery of the address to be deferred.
</p>
<p>
<a id="id559708" class="indexterm"></a>
When the expansion succeeds, the value is retained with the address, and can be
accessed using the variable <em class="varname">$address_data</em> in the current router, subsequent
routers, and the eventual transport.
</p>
<p>
<span class="bold"><strong>Warning</strong></span>: If the current or any subsequent router is a <span><strong class="command">redirect</strong></span> router
that runs a user’s filter file, the contents of <em class="varname">$address_data</em> are accessible
in the filter. This is not normally a problem, because such data is usually
either not confidential or it “<span class="quote">belongs</span>” to the current user, but if you do
put confidential data into <em class="varname">$address_data</em> you need to remember this point.
</p>
<p>
Even if the router declines or passes, the value of <em class="varname">$address_data</em> remains
with the address, though it can be changed by another <span><strong class="option">address_data</strong></span> setting
on a subsequent router. If a router generates child addresses, the value of
<em class="varname">$address_data</em> propagates to them. This also applies to the special kind of
“<span class="quote">child</span>” that is generated by a router with the <span><strong class="option">unseen</strong></span> option.
</p>
<p>
The idea of <span><strong class="option">address_data</strong></span> is that you can use it to look up a lot of data
for the address once, and then pick out parts of the data later. For example,
you could use a single LDAP lookup to return a string of the form
</p>
<pre class="literallayout">uid=1234 gid=5678 mailbox=/mail/xyz forward=/home/xyz/.forward
</pre><p>
In the transport you could pick out the mailbox by a setting such as
</p>
<pre class="literallayout">file = ${extract{mailbox}{$address_data}}
</pre><p>
This makes the configuration file less messy, and also reduces the number of
lookups (though Exim does cache lookups).
</p>
<p>
<a id="id559826" class="indexterm"></a>
<a id="id559838" class="indexterm"></a>
The <span><strong class="option">address_data</strong></span> facility is also useful as a means of passing information
from one router to another, and from a router to a transport. In addition, if
<em class="varname">$address_data</em> is set by a router when verifying a recipient address from an
ACL, it remains available for use in the rest of the ACL statement. After
verifying a sender, the value is transferred to <em class="varname">$sender_address_data</em>.
</p>
<p>
<a id="id559870" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">address_test</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span>‡<span class="emphasis"><em></em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>true</em></span></td></tr></tbody></table></div>
<p>
<a id="id559954" class="indexterm"></a>
<a id="id559966" class="indexterm"></a>
If this option is set false, the router is skipped when routing is being tested
by means of the <span><strong class="option">-bt</strong></span> command line option. This can be a convenience when
your first router sends messages to an external scanner, because it saves you
having to set the “<span class="quote">already scanned</span>” indicator when testing real address
routing.
</p>
<p>
<a id="id559996" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">cannot_route_message</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id560081" class="indexterm"></a>
<a id="id560099" class="indexterm"></a>
This option specifies a text message that is used when an address cannot be
routed because Exim has run out of routers. The default message is
“<span class="quote">Unrouteable address</span>”. This option is useful only on routers that have
<span><strong class="option">more</strong></span> set false, or on the very last router in a configuration, because the
value that is used is taken from the last router that is considered. This
includes a router that is skipped because its preconditions are not met, as
well as a router that declines. For example, using the default configuration,
you could put:
</p>
<pre class="literallayout">cannot_route_message = Remote domain not found in DNS
</pre><p>
on the first router, which is a <span><strong class="command">dnslookup</strong></span> router with <span><strong class="option">more</strong></span> set false,
and
</p>
<pre class="literallayout">cannot_route_message = Unknown local user
</pre><p>
on the final router that checks for local users. If string expansion fails for
this option, the default message is used. Unless the expansion failure was
explicitly forced, a message about the failure is written to the main and panic
logs, in addition to the normal message about the routing failure.
</p>
<p>
<a id="id560174" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">caseful_local_part</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>false</em></span></td></tr></tbody></table></div>
<p>
<a id="id560257" class="indexterm"></a>
<a id="id560268" class="indexterm"></a>
By default, routers handle the local parts of addresses in a case-insensitive
manner, though the actual case is preserved for transmission with the message.
If you want the case of letters to be significant in a router, you must set
this option true. For individual router options that contain address or local
part lists (for example, <span><strong class="option">local_parts</strong></span>), case-sensitive matching can be
turned on by “<span class="quote">+caseful</span>” as a list item. See section <a href="ch10.html#SECTcasletadd" title="10.20 Case of letters in address lists">10.20</a> for
more details.
</p>
<p>
<a id="id560307" class="indexterm"></a>
<a id="id560319" class="indexterm"></a>
<a id="id560331" class="indexterm"></a>
The value of the <em class="varname">$local_part</em> variable is forced to lower case while a
router is running unless <span><strong class="option">caseful_local_part</strong></span> is set. When a router assigns
an address to a transport, the value of <em class="varname">$local_part</em> when the transport runs
is the same as it was in the router. Similarly, when a router generates child
addresses by aliasing or forwarding, the values of <em class="varname">$original_local_part</em>
and <em class="varname">$parent_local_part</em> are those that were used by the redirecting router.
</p>
<p>
This option applies to the processing of an address by a router. When a
recipient address is being processed in an ACL, there is a separate <span><strong class="option">control</strong></span>
modifier that can be used to specify case-sensitive processing within the ACL
(see section <a href="ch40.html#SECTcontrols" title="40.20 Use of the control modifier">40.20</a>).
</p>
<p>
<a id="id560388" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">check_local_user</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span>‡<span class="emphasis"><em></em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>false</em></span></td></tr></tbody></table></div>
<p>
<a id="id560473" class="indexterm"></a>
<a id="id560484" class="indexterm"></a>
<a id="id560499" class="indexterm"></a>
<a id="id560513" class="indexterm"></a>
When this option is true, Exim checks that the local part of the recipient
address (with affixes removed if relevant) is the name of an account on the
local system. The check is done by calling the <em class="function">getpwnam()</em> function rather
than trying to read <em class="filename">/etc/passwd</em> directly. This means that other methods of
holding password data (such as NIS) are supported. If the local part is a local
user, <em class="varname">$home</em> is set from the password data, and can be tested in other
preconditions that are evaluated after this one (the order of evaluation is
given in section <a href="ch03.html#SECTrouprecon" title="3.12 Router preconditions">3.12</a>). However, the value of <em class="varname">$home</em> can be
overridden by <span><strong class="option">router_home_directory</strong></span>. If the local part is not a local user,
the router is skipped.
</p>
<p>
If you want to check that the local part is either the name of a local user
or matches something else, you cannot combine <span><strong class="option">check_local_user</strong></span> with a
setting of <span><strong class="option">local_parts</strong></span>, because that specifies the logical <span class="emphasis"><em>and</em></span> of the
two conditions. However, you can use a <span><strong class="command">passwd</strong></span> lookup in a <span><strong class="option">local_parts</strong></span>
setting to achieve this. For example:
</p>
<pre class="literallayout">local_parts = passwd;$local_part : lsearch;/etc/other/users
</pre><p>
Note, however, that the side effects of <span><strong class="option">check_local_user</strong></span> (such as setting
up a home directory) do not occur when a <span><strong class="command">passwd</strong></span> lookup is used in a
<span><strong class="option">local_parts</strong></span> (or any other) precondition.
</p>
<p>
<a id="id560622" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">condition</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span>‡<span class="emphasis"><em></em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id560709" class="indexterm"></a>
This option specifies a general precondition test that has to succeed for the
router to be called. The <span><strong class="option">condition</strong></span> option is the last precondition to be
evaluated (see section <a href="ch03.html#SECTrouprecon" title="3.12 Router preconditions">3.12</a>). The string is expanded, and if the
result is a forced failure, or an empty string, or one of the strings “<span class="quote">0</span>” or
“<span class="quote">no</span>” or “<span class="quote">false</span>” (checked without regard to the case of the letters), the
router is skipped, and the address is offered to the next one.
</p>
<p>
If the result is any other value, the router is run (as this is the last
precondition to be evaluated, all the other preconditions must be true).
</p>
<p>
The <span><strong class="option">condition</strong></span> option provides a means of applying custom conditions to the
running of routers. Note that in the case of a simple conditional expansion,
the default expansion values are exactly what is wanted. For example:
</p>
<pre class="literallayout">condition = ${if &gt;{$message_age}{600}}
</pre><p>
Because of the default behaviour of the string expansion, this is equivalent to
</p>
<pre class="literallayout">condition = ${if &gt;{$message_age}{600}{true}{}}
</pre><p>
If the expansion fails (other than forced failure) delivery is deferred. Some
of the other precondition options are common special cases that could in fact
be specified using <span><strong class="option">condition</strong></span>.
</p>
<p>
<a id="id560805" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">debug_print</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id560889" class="indexterm"></a>
If this option is set and debugging is enabled (see the <span><strong class="option">-d</strong></span> command line
option), the string is expanded and included in the debugging output.
If expansion of the string fails, the error message is written to the debugging
output, and Exim carries on processing.
This option is provided to help with checking out the values of variables and
so on when debugging router configurations. For example, if a <span><strong class="option">condition</strong></span>
option appears not to be working, <span><strong class="option">debug_print</strong></span> can be used to output the
variables it references. The output happens after checks for <span><strong class="option">domains</strong></span>,
<span><strong class="option">local_parts</strong></span>, and <span><strong class="option">check_local_user</strong></span> but before any other preconditions
are tested. A newline is added to the text if it does not end with one.
</p>
<p>
<a id="id560939" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">disable_logging</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>false</em></span></td></tr></tbody></table></div>
<p>
If this option is set true, nothing is logged for any routing errors
or for any deliveries caused by this router. You should not set this option
unless you really, really know what you are doing. See also the generic
transport option of the same name.
</p>
<p>
<a id="id561028" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">domains</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span>‡<span class="emphasis"><em></em></span></td><td align="center">Type: <span class="emphasis"><em>domain list</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id561115" class="indexterm"></a>
<a id="id561130" class="indexterm"></a>
If this option is set, the router is skipped unless the current domain matches
the list. If the match is achieved by means of a file lookup, the data that the
lookup returned for the domain is placed in <em class="varname">$domain_data</em> for use in string
expansions of the driver’s private options. See section <a href="ch03.html#SECTrouprecon" title="3.12 Router preconditions">3.12</a> for
a list of the order in which preconditions are evaluated.
</p>
<p>
<a id="id561160" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">driver</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
This option must always be set. It specifies which of the available routers is
to be used.
</p>
<p>
<a id="id561247" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">errors_to</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id561332" class="indexterm"></a>
<a id="id561342" class="indexterm"></a>
If a router successfully handles an address, it may assign the address to a
transport for delivery or it may generate child addresses. In both cases, if
there is a delivery problem during later processing, the resulting bounce
message is sent to the address that results from expanding this string,
provided that the address verifies successfully. The <span><strong class="option">errors_to</strong></span> option is
expanded before <span><strong class="option">headers_add</strong></span>, <span><strong class="option">headers_remove</strong></span>, and <span><strong class="option">transport</strong></span>.
</p>
<p>
The <span><strong class="option">errors_to</strong></span> setting associated with an address can be overridden if it
subsequently passes through other routers that have their own <span><strong class="option">errors_to</strong></span>
settings, or if the message is delivered by a transport with a <span><strong class="option">return_path</strong></span>
setting.
</p>
<p>
If <span><strong class="option">errors_to</strong></span> is unset, or the expansion is forced to fail, or the result of
the expansion fails to verify, the errors address associated with the incoming
address is used. At top level, this is the envelope sender. A non-forced
expansion failure causes delivery to be deferred.
</p>
<p>
If an address for which <span><strong class="option">errors_to</strong></span> has been set ends up being delivered over
SMTP, the envelope sender for that delivery is the <span><strong class="option">errors_to</strong></span> value, so that
any bounces that are generated by other MTAs on the delivery route are also
sent there. You can set <span><strong class="option">errors_to</strong></span> to the empty string by either of these
settings:
</p>
<pre class="literallayout">errors_to =
errors_to = ""
</pre><p>
An expansion item that yields an empty string has the same effect. If you do
this, a locally detected delivery error for addresses processed by this router
no longer gives rise to a bounce message; the error is discarded. If the
address is delivered to a remote host, the return path is set to <code class="literal">&lt;&gt;</code>, unless
overridden by the <span><strong class="option">return_path</strong></span> option on the transport.
</p>
<p>
<a id="id561456" class="indexterm"></a>
If for some reason you want to discard local errors, but use a non-empty
MAIL command for remote delivery, you can preserve the original return
path in <em class="varname">$address_data</em> in the router, and reinstate it in the transport by
setting <span><strong class="option">return_path</strong></span>.
</p>
<p>
The most common use of <span><strong class="option">errors_to</strong></span> is to direct mailing list bounces to the
manager of the list, as described in section <a href="ch47.html#SECTmailinglists" title="47.2 Using Exim to handle mailing lists">47.2</a>, or to
implement VERP (Variable Envelope Return Paths) (see section <a href="ch47.html#SECTverp" title="47.6 Variable Envelope Return Paths (VERP)">47.6</a>).
</p>
<p>
<a id="id561504" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">expn</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span>‡<span class="emphasis"><em></em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>true</em></span></td></tr></tbody></table></div>
<p>
<a id="id561588" class="indexterm"></a>
<a id="id561602" class="indexterm"></a>
<a id="id561617" class="indexterm"></a>
<a id="id561631" class="indexterm"></a>
If this option is turned off, the router is skipped when testing an address
as a result of processing an SMTP EXPN command. You might, for example,
want to turn it off on a router for users’ <em class="filename">.forward</em> files, while leaving it
on for the system alias file.
See section <a href="ch03.html#SECTrouprecon" title="3.12 Router preconditions">3.12</a> for a list of the order in which preconditions
are evaluated.
</p>
<p>
The use of the SMTP EXPN command is controlled by an ACL (see chapter
<a href="ch40.html" title="40. Access control lists">40</a>). When Exim is running an EXPN command, it is similar to testing
an address with <span><strong class="option">-bt</strong></span>. Compare VRFY, whose counterpart is <span><strong class="option">-bv</strong></span>.
</p>
<p>
<a id="id561688" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">fail_verify</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>false</em></span></td></tr></tbody></table></div>
<p>
<a id="id561770" class="indexterm"></a>
Setting this option has the effect of setting both <span><strong class="option">fail_verify_sender</strong></span> and
<span><strong class="option">fail_verify_recipient</strong></span> to the same value.
</p>
<p>
<a id="id561797" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">fail_verify_recipient</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>false</em></span></td></tr></tbody></table></div>
<p>
If this option is true and an address is accepted by this router when
verifying a recipient, verification fails.
</p>
<p>
<a id="id561885" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">fail_verify_sender</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>false</em></span></td></tr></tbody></table></div>
<p>
If this option is true and an address is accepted by this router when
verifying a sender, verification fails.
</p>
<p>
<a id="id561973" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">fallback_hosts</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string list</em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id562055" class="indexterm"></a>
<a id="id562069" class="indexterm"></a>
String expansion is not applied to this option. The argument must be a
colon-separated list of host names or IP addresses. The list separator can be
changed (see section <a href="ch06.html#SECTlistconstruct" title="6.19 List construction">6.19</a>), and a port can be specified with
each name or address. In fact, the format of each item is exactly the same as
defined for the list of hosts in a <span><strong class="command">manualroute</strong></span> router (see section
<a href="ch20.html#SECTformatonehostitem" title="20.5 Format of one host item">20.5</a>).
</p>
<p>
If a router queues an address for a remote transport, this host list is
associated with the address, and used instead of the transport’s fallback host
list. If <span><strong class="option">hosts_randomize</strong></span> is set on the transport, the order of the list is
randomized for each use. See the <span><strong class="option">fallback_hosts</strong></span> option of the <span><strong class="command">smtp</strong></span>
transport for further details.
</p>
<p>
<a id="id562137" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">group</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>see below</em></span></td></tr></tbody></table></div>
<p>
<a id="id562222" class="indexterm"></a>
<a id="id562236" class="indexterm"></a>
<a id="id562251" class="indexterm"></a>
<a id="id562265" class="indexterm"></a>
When a router queues an address for a transport, and the transport does not
specify a group, the group given here is used when running the delivery
process.
The group may be specified numerically or by name. If expansion fails, the
error is logged and delivery is deferred.
The default is unset, unless <span><strong class="option">check_local_user</strong></span> is set, when the default
is taken from the password information. See also <span><strong class="option">initgroups</strong></span> and <span><strong class="option">user</strong></span>
and the discussion in chapter <a href="ch23.html" title="23. Environment for running local transports">23</a>.
</p>
<p>
<a id="id562304" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">headers_add</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id562388" class="indexterm"></a>
<a id="id562403" class="indexterm"></a>
This option specifies a string of text that is expanded at routing time, and
associated with any addresses that are accepted by the router. However, this
option has no effect when an address is just being verified. The way in which
the text is used to add header lines at transport time is described in section
<a href="ch44.html#SECTheadersaddrem" title="44.17 Adding and removing header lines in routers and transports">44.17</a>. New header lines are not actually added until the
message is in the process of being transported. This means that references to
header lines in string expansions in the transport’s configuration do not
“<span class="quote">see</span>” the added header lines.
</p>
<p>
The <span><strong class="option">headers_add</strong></span> option is expanded after <span><strong class="option">errors_to</strong></span>, but before
<span><strong class="option">headers_remove</strong></span> and <span><strong class="option">transport</strong></span>. If the expanded string is empty, or if
the expansion is forced to fail, the option has no effect. Other expansion
failures are treated as configuration errors.
</p>
<p>
<span class="bold"><strong>Warning 1</strong></span>: The <span><strong class="option">headers_add</strong></span> option cannot be used for a <span><strong class="command">redirect</strong></span>
router that has the <span><strong class="option">one_time</strong></span> option set.
</p>
<p>
<a id="id562490" class="indexterm"></a>
<a id="id562501" class="indexterm"></a>
<span class="bold"><strong>Warning 2</strong></span>: If the <span><strong class="option">unseen</strong></span> option is set on the router, all header
additions are deleted when the address is passed on to subsequent routers.
For a <span><strong class="option">redirect</strong></span> router, if a generated address is the same as the incoming
address, this can lead to duplicate addresses with different header
modifications. Exim does not do duplicate deliveries (except, in certain
circumstances, to pipes -- see section <a href="ch22.html#SECTdupaddr" title="22.7 Duplicate addresses">22.7</a>), but it is undefined
which of the duplicates is discarded, so this ambiguous situation should be
avoided. The <span><strong class="option">repeat_use</strong></span> option of the <span><strong class="option">redirect</strong></span> router may be of help.
</p>
<p>
<a id="id562549" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">headers_remove</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id562633" class="indexterm"></a>
<a id="id562648" class="indexterm"></a>
This option specifies a string of text that is expanded at routing time, and
associated with any addresses that are accepted by the router. However, this
option has no effect when an address is just being verified. The way in which
the text is used to remove header lines at transport time is described in
section <a href="ch44.html#SECTheadersaddrem" title="44.17 Adding and removing header lines in routers and transports">44.17</a>. Header lines are not actually removed until
the message is in the process of being transported. This means that references
to header lines in string expansions in the transport’s configuration still
“<span class="quote">see</span>” the original header lines.
</p>
<p>
The <span><strong class="option">headers_remove</strong></span> option is expanded after <span><strong class="option">errors_to</strong></span> and
<span><strong class="option">headers_add</strong></span>, but before <span><strong class="option">transport</strong></span>. If the expansion is forced to fail,
the option has no effect. Other expansion failures are treated as configuration
errors.
</p>
<p>
<span class="bold"><strong>Warning 1</strong></span>: The <span><strong class="option">headers_remove</strong></span> option cannot be used for a <span><strong class="command">redirect</strong></span>
router that has the <span><strong class="option">one_time</strong></span> option set.
</p>
<p>
<span class="bold"><strong>Warning 2</strong></span>: If the <span><strong class="option">unseen</strong></span> option is set on the router, all header
removal requests are deleted when the address is passed on to subsequent
routers, and this can lead to problems with duplicates -- see the similar
warning for <span><strong class="option">headers_add</strong></span> above.
</p>
<p>
<a id="id562753" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">ignore_target_hosts</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>host list</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id562838" class="indexterm"></a>
<a id="id562853" class="indexterm"></a>
Although this option is a host list, it should normally contain IP address
entries rather than names. If any host that is looked up by the router has an
IP address that matches an item in this list, Exim behaves as if that IP
address did not exist. This option allows you to cope with rogue DNS entries
like
</p>
<pre class="literallayout">remote.domain.example.  A  127.0.0.1
</pre><p>
by setting
</p>
<pre class="literallayout">ignore_target_hosts = 127.0.0.1
</pre><p>
on the relevant router. If all the hosts found by a <span><strong class="command">dnslookup</strong></span> router are
discarded in this way, the router declines. In a conventional configuration, an
attempt to mail to such a domain would normally provoke the “<span class="quote">unrouteable
domain</span>” error, and an attempt to verify an address in the domain would fail.
Similarly, if <span><strong class="option">ignore_target_hosts</strong></span> is set on an <span><strong class="command">ipliteral</strong></span> router, the
router declines if presented with one of the listed addresses.
</p>
<p>
You can use this option to disable the use of IPv4 or IPv6 for mail delivery by
means of the first or the second of the following settings, respectively:
</p>
<pre class="literallayout">ignore_target_hosts = 0.0.0.0/0
ignore_target_hosts = &lt;; 0::0/0
</pre><p>
The pattern in the first line matches all IPv4 addresses, whereas the pattern
in the second line matches all IPv6 addresses.
</p>
<p>
This option may also be useful for ignoring link-local and site-local IPv6
addresses. Because, like all host lists, the value of <span><strong class="option">ignore_target_hosts</strong></span>
is expanded before use as a list, it is possible to make it dependent on the
domain that is being routed.
</p>
<p>
<a id="id562953" class="indexterm"></a>
During its expansion, <em class="varname">$host_address</em> is set to the IP address that is being
checked.
</p>
<p>
<a id="id562973" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">initgroups</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>false</em></span></td></tr></tbody></table></div>
<p>
<a id="id563056" class="indexterm"></a>
<a id="id563067" class="indexterm"></a>
<a id="id563081" class="indexterm"></a>
<a id="id563096" class="indexterm"></a>
If the router queues an address for a transport, and this option is true, and
the uid supplied by the router is not overridden by the transport, the
<em class="function">initgroups()</em> function is called when running the transport to ensure that
any additional groups associated with the uid are set up. See also <span><strong class="option">group</strong></span>
and <span><strong class="option">user</strong></span> and the discussion in chapter <a href="ch23.html" title="23. Environment for running local transports">23</a>.
</p>
<p>
<a id="id563137" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">local_part_prefix</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span>‡<span class="emphasis"><em></em></span></td><td align="center">Type: <span class="emphasis"><em>string list</em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id563222" class="indexterm"></a>
<a id="id563237" class="indexterm"></a>
If this option is set, the router is skipped unless the local part starts with
one of the given strings, or <span><strong class="option">local_part_prefix_optional</strong></span> is true. See
section <a href="ch03.html#SECTrouprecon" title="3.12 Router preconditions">3.12</a> for a list of the order in which preconditions are
evaluated.
</p>
<p>
The list is scanned from left to right, and the first prefix that matches is
used. A limited form of wildcard is available; if the prefix begins with an
asterisk, it matches the longest possible sequence of arbitrary characters at
the start of the local part. An asterisk should therefore always be followed by
some character that does not occur in normal local parts.
<a id="id563274" class="indexterm"></a>
<a id="id563285" class="indexterm"></a>
Wildcarding can be used to set up multiple user mailboxes, as described in
section <a href="ch47.html#SECTmulbox" title="47.8 Multiple user mailboxes">47.8</a>.
</p>
<p>
<a id="id563311" class="indexterm"></a>
<a id="id563323" class="indexterm"></a>
During the testing of the <span><strong class="option">local_parts</strong></span> option, and while the router is
running, the prefix is removed from the local part, and is available in the
expansion variable <em class="varname">$local_part_prefix</em>. When a message is being delivered, if
the router accepts the address, this remains true during subsequent delivery by
a transport. In particular, the local part that is transmitted in the RCPT
command for LMTP, SMTP, and BSMTP deliveries has the prefix removed by default.
This behaviour can be overridden by setting <span><strong class="option">rcpt_include_affixes</strong></span> true on
the relevant transport.
</p>
<p>
When an address is being verified, <span><strong class="option">local_part_prefix</strong></span> affects only the
behaviour of the router. If the callout feature of verification is in use, this
means that the full address, including the prefix, will be used during the
callout.
</p>
<p>
The prefix facility is commonly used to handle local parts of the form
<span><strong class="option">owner-something</strong></span>. Another common use is to support local parts of the form
<span><strong class="option">real-username</strong></span> to bypass a user’s <em class="filename">.forward</em> file – helpful when trying
to tell a user their forwarding is broken – by placing a router like this one
immediately before the router that handles <em class="filename">.forward</em> files:
</p>
<pre class="literallayout">real_localuser:
  driver = accept
  local_part_prefix = real-
  check_local_user
  transport = local_delivery
</pre><p>
For security, it would probably be a good idea to restrict the use of this
router to locally-generated messages, using a condition such as this:
</p>
<pre class="literallayout">  condition = ${if match {$sender_host_address}\
                         {\N^(|127\.0\.0\.1)$\N}}
</pre><p>
If both <span><strong class="option">local_part_prefix</strong></span> and <span><strong class="option">local_part_suffix</strong></span> are set for a router,
both conditions must be met if not optional. Care must be taken if wildcards
are used in both a prefix and a suffix on the same router. Different
separator characters must be used to avoid ambiguity.
</p>
<p>
<a id="id563437" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">local_part_prefix_optional</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>false</em></span></td></tr></tbody></table></div>
<p>
See <span><strong class="option">local_part_prefix</strong></span> above.
</p>
<p>
<a id="id563528" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">local_part_suffix</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span>‡<span class="emphasis"><em></em></span></td><td align="center">Type: <span class="emphasis"><em>string list</em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id563613" class="indexterm"></a>
<a id="id563627" class="indexterm"></a>
This option operates in the same way as <span><strong class="option">local_part_prefix</strong></span>, except that the
local part must end (rather than start) with the given string, the
<span><strong class="option">local_part_suffix_optional</strong></span> option determines whether the suffix is
mandatory, and the wildcard * character, if present, must be the last
character of the suffix. This option facility is commonly used to handle local
parts of the form <span><strong class="option">something-request</strong></span> and multiple user mailboxes of the form
<span><strong class="option">username-foo</strong></span>.
</p>
<p>
<a id="id563667" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">local_part_suffix_optional</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>false</em></span></td></tr></tbody></table></div>
<p>
See <span><strong class="option">local_part_suffix</strong></span> above.
</p>
<p>
<a id="id563757" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">local_parts</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span>‡<span class="emphasis"><em></em></span></td><td align="center">Type: <span class="emphasis"><em>local part list</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id563844" class="indexterm"></a>
<a id="id563859" class="indexterm"></a>
The router is run only if the local part of the address matches the list.
See section <a href="ch03.html#SECTrouprecon" title="3.12 Router preconditions">3.12</a> for a list of the order in which preconditions
are evaluated, and
section <a href="ch10.html#SECTlocparlis" title="10.21 Local part lists">10.21</a> for a discussion of local part lists. Because the
string is expanded, it is possible to make it depend on the domain, for
example:
</p>
<pre class="literallayout">local_parts = dbm;/usr/local/specials/$domain
</pre><p>
<a id="id563901" class="indexterm"></a>
If the match is achieved by a lookup, the data that the lookup returned
for the local part is placed in the variable <em class="varname">$local_part_data</em> for use in
expansions of the router’s private options. You might use this option, for
example, if you have a large number of local virtual domains, and you want to
send all postmaster mail to the same place without having to set up an alias in
each virtual domain:
</p>
<pre class="literallayout">postmaster:
  driver = redirect
  local_parts = postmaster
  data = postmaster@real.domain.example
</pre><p>
<a id="id563933" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">log_as_local</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>see below</em></span></td></tr></tbody></table></div>
<p>
<a id="id564015" class="indexterm"></a>
<a id="id564029" class="indexterm"></a>
Exim has two logging styles for delivery, the idea being to make local
deliveries stand out more visibly from remote ones. In the “<span class="quote">local</span>” style, the
recipient address is given just as the local part, without a domain. The use of
this style is controlled by this option. It defaults to true for the <span><strong class="command">accept</strong></span>
router, and false for all the others. This option applies only when a
router assigns an address to a transport. It has no effect on routers that
redirect addresses.
</p>
<p>
<a id="id564064" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">more</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>true</em></span></td></tr></tbody></table></div>
<p>
The result of string expansion for this option must be a valid boolean value,
that is, one of the strings “<span class="quote">yes</span>”, “<span class="quote">no</span>”, “<span class="quote">true</span>”, or “<span class="quote">false</span>”. Any other
result causes an error, and delivery is deferred. If the expansion is forced to
fail, the default value for the option (true) is used. Other failures cause
delivery to be deferred.
</p>
<p>
If this option is set false, and the router declines to handle the address, no
further routers are tried, routing fails, and the address is bounced.
<a id="id564173" class="indexterm"></a>
However, if the router explicitly passes an address to the following router by
means of the setting
</p>
<pre class="literallayout">self = pass
</pre><p>
or otherwise, the setting of <span><strong class="option">more</strong></span> is ignored. Also, the setting of <span><strong class="option">more</strong></span>
does not affect the behaviour if one of the precondition tests fails. In that
case, the address is always passed to the next router.
</p>
<p>
Note that <span><strong class="option">address_data</strong></span> is not considered to be a precondition. If its
expansion is forced to fail, the router declines, and the value of <span><strong class="option">more</strong></span>
controls what happens next.
</p>
<p>
<a id="id564225" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">pass_on_timeout</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>false</em></span></td></tr></tbody></table></div>
<p>
<a id="id564307" class="indexterm"></a>
<a id="id564321" class="indexterm"></a>
If a router times out during a host lookup, it normally causes deferral of the
address. If <span><strong class="option">pass_on_timeout</strong></span> is set, the address is passed on to the next
router, overriding <span><strong class="option">no_more</strong></span>. This may be helpful for systems that are
intermittently connected to the Internet, or those that want to pass to a smart
host any messages that cannot immediately be delivered.
</p>
<p>
There are occasional other temporary errors that can occur while doing DNS
lookups. They are treated in the same way as a timeout, and this option
applies to all of them.
</p>
<p>
<a id="id564357" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">pass_router</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id564439" class="indexterm"></a>
Routers that recognize the generic <span><strong class="option">self</strong></span> option (<span><strong class="command">dnslookup</strong></span>,
<span><strong class="command">ipliteral</strong></span>, and <span><strong class="command">manualroute</strong></span>) are able to return “<span class="quote">pass</span>”, forcing
routing to continue, and overriding a false setting of <span><strong class="option">more</strong></span>. When one of
these routers returns “<span class="quote">pass</span>”, the address is normally handed on to the next
router in sequence. This can be changed by setting <span><strong class="option">pass_router</strong></span> to the name
of another router. However (unlike <span><strong class="option">redirect_router</strong></span>) the named router must
be below the current router, to avoid loops. Note that this option applies only
to the special case of “<span class="quote">pass</span>”. It does not apply when a router returns
“<span class="quote">decline</span>” because it cannot handle an address.
</p>
<p>
<a id="id564514" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">redirect_router</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id564596" class="indexterm"></a>
Sometimes an administrator knows that it is pointless to reprocess addresses
generated from alias or forward files with the same router again. For
example, if an alias file translates real names into login ids there is no
point searching the alias file a second time, especially if it is a large file.
</p>
<p>
The <span><strong class="option">redirect_router</strong></span> option can be set to the name of any router instance.
It causes the routing of any generated addresses to start at the named router
instead of at the first router. This option has no effect if the router in
which it is set does not generate new addresses.
</p>
<p>
<a id="id564631" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">require_files</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span>‡<span class="emphasis"><em></em></span></td><td align="center">Type: <span class="emphasis"><em>string list</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id564718" class="indexterm"></a>
<a id="id564732" class="indexterm"></a>
This option provides a general mechanism for predicating the running of a
router on the existence or non-existence of certain files or directories.
Before running a router, as one of its precondition tests, Exim works its way
through the <span><strong class="option">require_files</strong></span> list, expanding each item separately.
</p>
<p>
Because the list is split before expansion, any colons in expansion items must
be doubled, or the facility for using a different list separator must be used.
If any expansion is forced to fail, the item is ignored. Other expansion
failures cause routing of the address to be deferred.
</p>
<p>
If any expanded string is empty, it is ignored. Otherwise, except as described
below, each string must be a fully qualified file path, optionally preceded by
“<span class="quote">!</span>”. The paths are passed to the <em class="function">stat()</em> function to test for the
existence of the files or directories. The router is skipped if any paths not
preceded by “<span class="quote">!</span>” do not exist, or if any paths preceded by “<span class="quote">!</span>” do exist.
</p>
<p>
<a id="id564791" class="indexterm"></a>
If <em class="function">stat()</em> cannot determine whether a file exists or not, delivery of
the message is deferred. This can happen when NFS-mounted filesystems are
unavailable.
</p>
<p>
This option is checked after the <span><strong class="option">domains</strong></span>, <span><strong class="option">local_parts</strong></span>, and <span><strong class="option">senders</strong></span>
options, so you cannot use it to check for the existence of a file in which to
look up a domain, local part, or sender. (See section <a href="ch03.html#SECTrouprecon" title="3.12 Router preconditions">3.12</a> for a
full list of the order in which preconditions are evaluated.) However, as
these options are all expanded, you can use the <span><strong class="option">exists</strong></span> expansion condition
to make such tests. The <span><strong class="option">require_files</strong></span> option is intended for checking files
that the router may be going to use internally, or which are needed by a
transport (for example <em class="filename">.procmailrc</em>).
</p>
<p>
During delivery, the <em class="function">stat()</em> function is run as root, but there is a
facility for some checking of the accessibility of a file by another user.
This is not a proper permissions check, but just a “<span class="quote">rough</span>” check that
operates as follows:
</p>
<p>
If an item in a <span><strong class="option">require_files</strong></span> list does not contain any forward slash
characters, it is taken to be the user (and optional group, separated by a
comma) to be checked for subsequent files in the list. If no group is specified
but the user is specified symbolically, the gid associated with the uid is
used. For example:
</p>
<pre class="literallayout">require_files = mail:/some/file
require_files = $local_part:$home/.procmailrc
</pre><p>
If a user or group name in a <span><strong class="option">require_files</strong></span> list does not exist, the
<span><strong class="option">require_files</strong></span> condition fails.
</p>
<p>
Exim performs the check by scanning along the components of the file path, and
checking the access for the given uid and gid. It checks for “<span class="quote">x</span>” access on
directories, and “<span class="quote">r</span>” access on the final file. Note that this means that file
access control lists, if the operating system has them, are ignored.
</p>
<p>
<span class="bold"><strong>Warning 1</strong></span>: When the router is being run to verify addresses for an
incoming SMTP message, Exim is not running as root, but under its own uid. This
may affect the result of a <span><strong class="option">require_files</strong></span> check. In particular, <em class="function">stat()</em>
may yield the error EACCES (“<span class="quote">Permission denied</span>”). This means that the Exim
user is not permitted to read one of the directories on the file’s path.
</p>
<p>
<span class="bold"><strong>Warning 2</strong></span>: Even when Exim is running as root while delivering a message,
<em class="function">stat()</em> can yield EACCES for a file in an NFS directory that is mounted
without root access. In this case, if a check for access by a particular user
is requested, Exim creates a subprocess that runs as that user, and tries the
check again in that process.
</p>
<p>
The default action for handling an unresolved EACCES is to consider it to
be caused by a configuration error, and routing is deferred because the
existence or non-existence of the file cannot be determined. However, in some
circumstances it may be desirable to treat this condition as if the file did
not exist. If the file name (or the exclamation mark that precedes the file
name for non-existence) is preceded by a plus sign, the EACCES error is treated
as if the file did not exist. For example:
</p>
<pre class="literallayout">require_files = +/some/file
</pre><p>
If the router is not an essential part of verification (for example, it
handles users’ <em class="filename">.forward</em> files), another solution is to set the <span><strong class="option">verify</strong></span>
option false so that the router is skipped when verifying.
</p>
<p>
<a id="id564997" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">retry_use_local_part</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>see below</em></span></td></tr></tbody></table></div>
<p>
<a id="id565080" class="indexterm"></a>
<a id="id565094" class="indexterm"></a>
When a delivery suffers a temporary routing failure, a retry record is created
in Exim’s hints database. For addresses whose routing depends only on the
domain, the key for the retry record should not involve the local part, but for
other addresses, both the domain and the local part should be included.
Usually, remote routing is of the former kind, and local routing is of the
latter kind.
</p>
<p>
This option controls whether the local part is used to form the key for retry
hints for addresses that suffer temporary errors while being handled by this
router. The default value is true for any router that has <span><strong class="option">check_local_user</strong></span>
set, and false otherwise. Note that this option does not apply to hints keys
for transport delays; they are controlled by a generic transport option of the
same name.
</p>
<p>
The setting of <span><strong class="option">retry_use_local_part</strong></span> applies only to the router on which it
appears. If the router generates child addresses, they are routed
independently; this setting does not become attached to them.
</p>
<p>
<a id="id565138" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">router_home_directory</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id565223" class="indexterm"></a>
<a id="id565237" class="indexterm"></a>
<a id="id565252" class="indexterm"></a>
This option sets a home directory for use while the router is running. (Compare
<span><strong class="option">transport_home_directory</strong></span>, which sets a home directory for later
transporting.) In particular, if used on a <span><strong class="command">redirect</strong></span> router, this option
sets a value for <em class="varname">$home</em> while a filter is running. The value is expanded;
forced expansion failure causes the option to be ignored – other failures
cause the router to defer.
</p>
<p>
Expansion of <span><strong class="option">router_home_directory</strong></span> happens immediately after the
<span><strong class="option">check_local_user</strong></span> test (if configured), before any further expansions take
place.
(See section <a href="ch03.html#SECTrouprecon" title="3.12 Router preconditions">3.12</a> for a list of the order in which preconditions
are evaluated.)
While the router is running, <span><strong class="option">router_home_directory</strong></span> overrides the value of
<em class="varname">$home</em> that came from <span><strong class="option">check_local_user</strong></span>.
</p>
<p>
When a router accepts an address and assigns it to a local transport (including
the cases when a <span><strong class="command">redirect</strong></span> router generates a pipe, file, or autoreply
delivery), the home directory setting for the transport is taken from the first
of these values that is set:
</p>
<div class="itemizedlist">
<ul type="disc"><li><p>
The <span><strong class="option">home_directory</strong></span> option on the transport;
</p>
</li><li><p>
The <span><strong class="option">transport_home_directory</strong></span> option on the router;
</p>
</li><li><p>
The password data if <span><strong class="option">check_local_user</strong></span> is set on the router;
</p>
</li><li><p>
The <span><strong class="option">router_home_directory</strong></span> option on the router.
</p>
</li></ul></div>
<p>
In other words, <span><strong class="option">router_home_directory</strong></span> overrides the password data for the
router, but not for the transport.
</p>
<p>
<a id="id565384" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">self</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span></td><td align="right">Default: <span class="emphasis"><em>freeze</em></span></td></tr></tbody></table></div>
<p>
<a id="id565466" class="indexterm"></a>
<a id="id565481" class="indexterm"></a>
This option applies to those routers that use a recipient address to find a
list of remote hosts. Currently, these are the <span><strong class="command">dnslookup</strong></span>, <span><strong class="command">ipliteral</strong></span>,
and <span><strong class="command">manualroute</strong></span> routers.
Certain configurations of the <span><strong class="command">queryprogram</strong></span> router can also specify a list
of remote hosts.
Usually such routers are configured to send the message to a remote host via an
<span><strong class="command">smtp</strong></span> transport. The <span><strong class="option">self</strong></span> option specifies what happens when the first
host on the list turns out to be the local host.
The way in which Exim checks for the local host is described in section
<a href="ch13.html#SECTreclocipadd" title="13.8 Recognizing the local host">13.8</a>.
</p>
<p>
Normally this situation indicates either an error in Exim’s configuration (for
example, the router should be configured not to process this domain), or an
error in the DNS (for example, the MX should not point to this host). For this
reason, the default action is to log the incident, defer the address, and
freeze the message. The following alternatives are provided for use in special
cases:
</p>
<div class="variablelist">
<dl><dt><span class="term"><span><strong class="option">defer</strong></span></span></dt><dd><p>
Delivery of the message is tried again later, but the message is not frozen.
</p>
</dd><dt><span class="term"><span><strong class="option">reroute</strong></span>: &lt;<span class="emphasis"><em>domain</em></span>&gt;</span></dt><dd><p>
The domain is changed to the given domain, and the address is passed back to
be reprocessed by the routers. No rewriting of headers takes place. This
behaviour is essentially a redirection.
</p>
</dd><dt><span class="term"><span><strong class="option">reroute: rewrite:</strong></span> &lt;<span class="emphasis"><em>domain</em></span>&gt;</span></dt><dd><p>
The domain is changed to the given domain, and the address is passed back to be
reprocessed by the routers. Any headers that contain the original domain are
rewritten.
</p>
</dd><dt><span class="term"><span><strong class="option">pass</strong></span></span></dt><dd><p>
<a id="id565618" class="indexterm"></a>
<a id="id565630" class="indexterm"></a>
The router passes the address to the next router, or to the router named in the
<span><strong class="option">pass_router</strong></span> option if it is set. This overrides <span><strong class="option">no_more</strong></span>. During
subsequent routing and delivery, the variable <em class="varname">$self_hostname</em> contains the
name of the local host that the router encountered. This can be used to
distinguish between different cases for hosts with multiple names. The
combination
</p>
<pre class="literallayout">self = pass
no_more
</pre><p>
ensures that only those addresses that routed to the local host are passed on.
Without <span><strong class="option">no_more</strong></span>, addresses that were declined for other reasons would also
be passed to the next router.
</p>
</dd><dt><span class="term"><span><strong class="option">fail</strong></span></span></dt><dd><p>
Delivery fails and an error report is generated.
</p>
</dd><dt><span class="term"><span><strong class="option">send</strong></span></span></dt><dd><p>
<a id="id565704" class="indexterm"></a>
The anomaly is ignored and the address is queued for the transport. This
setting should be used with extreme caution. For an <span><strong class="command">smtp</strong></span> transport, it
makes sense only in cases where the program that is listening on the SMTP port
is not this version of Exim. That is, it must be some other MTA, or Exim with a
different configuration file that handles the domain in another way.
</p>
</dd></dl></div>
<p>
<a id="id565733" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">senders</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span>‡<span class="emphasis"><em></em></span></td><td align="center">Type: <span class="emphasis"><em>address list</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id565820" class="indexterm"></a>
If this option is set, the router is skipped unless the message’s sender
address matches something on the list.
See section <a href="ch03.html#SECTrouprecon" title="3.12 Router preconditions">3.12</a> for a list of the order in which preconditions
are evaluated.
</p>
<p>
There are issues concerning verification when the running of routers is
dependent on the sender. When Exim is verifying the address in an <span><strong class="option">errors_to</strong></span>
setting, it sets the sender to the null string. When using the <span><strong class="option">-bt</strong></span> option
to check a configuration file, it is necessary also to use the <span><strong class="option">-f</strong></span> option to
set an appropriate sender. For incoming mail, the sender is unset when
verifying the sender, but is available when verifying any recipients. If the
SMTP VRFY command is enabled, it must be used after MAIL if the sender address
matters.
</p>
<p>
<a id="id565869" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">translate_ip_address</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id565954" class="indexterm"></a>
<a id="id565969" class="indexterm"></a>
<a id="id565980" class="indexterm"></a>
There exist some rare networking situations (for example, packet radio) where
it is helpful to be able to translate IP addresses generated by normal routing
mechanisms into other IP addresses, thus performing a kind of manual IP
routing. This should be done only if the normal IP routing of the TCP/IP stack
is inadequate or broken. Because this is an extremely uncommon requirement, the
code to support this option is not included in the Exim binary unless
SUPPORT_TRANSLATE_IP_ADDRESS=yes is set in <em class="filename">Local/Makefile</em>.
</p>
<p>
<a id="id566003" class="indexterm"></a>
The <span><strong class="option">translate_ip_address</strong></span> string is expanded for every IP address generated
by the router, with the generated address set in <em class="varname">$host_address</em>. If the
expansion is forced to fail, no action is taken.
For any other expansion error, delivery of the message is deferred.
If the result of the expansion is an IP address, that replaces the original
address; otherwise the result is assumed to be a host name – this is looked
up using <em class="function">gethostbyname()</em> (or <em class="function">getipnodebyname()</em> when available) to
produce one or more replacement IP addresses. For example, to subvert all IP
addresses in some specific networks, this could be added to a router:
</p>
<pre class="literallayout">translate_ip_address = \
  ${lookup{${mask:$host_address/26}}lsearch{/some/file}\
    {$value}fail}}
</pre><p>
The file would contain lines like
</p>
<pre class="literallayout">10.2.3.128/26    some.host
10.8.4.34/26     10.44.8.15
</pre><p>
You should not make use of this facility unless you really understand what you
are doing.
</p>
<p>
<a id="id566074" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">transport</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
This option specifies the transport to be used when a router accepts an address
and sets it up for delivery. A transport is never needed if a router is used
only for verification. The value of the option is expanded at routing time,
after the expansion of <span><strong class="option">errors_to</strong></span>, <span><strong class="option">headers_add</strong></span>, and <span><strong class="option">headers_remove</strong></span>,
and result must be the name of one of the configured transports. If it is not,
delivery is deferred.
</p>
<p>
The <span><strong class="option">transport</strong></span> option is not used by the <span><strong class="command">redirect</strong></span> router, but it does
have some private options that set up transports for pipe and file deliveries
(see chapter <a href="ch22.html" title="22. The redirect router">22</a>).
</p>
<p>
<a id="id566200" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">transport_current_directory</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>unset</em></span></td></tr></tbody></table></div>
<p>
<a id="id566284" class="indexterm"></a>
This option associates a current directory with any address that is routed
to a local transport. This can happen either because a transport is
explicitly configured for the router, or because it generates a delivery to a
file or a pipe. During the delivery process (that is, at transport time), this
option string is expanded and is set as the current directory, unless
overridden by a setting on the transport.
If the expansion fails for any reason, including forced failure, an error is
logged, and delivery is deferred.
See chapter <a href="ch23.html" title="23. Environment for running local transports">23</a> for details of the local delivery
environment.
</p>
<p>
<a id="id566306" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">transport_home_directory</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>see below</em></span></td></tr></tbody></table></div>
<p>
<a id="id566390" class="indexterm"></a>
This option associates a home directory with any address that is routed to a
local transport. This can happen either because a transport is explicitly
configured for the router, or because it generates a delivery to a file or a
pipe. During the delivery process (that is, at transport time), the option
string is expanded and is set as the home directory, unless overridden by a
setting of <span><strong class="option">home_directory</strong></span> on the transport.
If the expansion fails for any reason, including forced failure, an error is
logged, and delivery is deferred.
</p>
<p>
If the transport does not specify a home directory, and
<span><strong class="option">transport_home_directory</strong></span> is not set for the router, the home directory for
the transport is taken from the password data if <span><strong class="option">check_local_user</strong></span> is set for
the router. Otherwise it is taken from <span><strong class="option">router_home_directory</strong></span> if that option
is set; if not, no home directory is set for the transport.
</p>
<p>
See chapter <a href="ch23.html" title="23. Environment for running local transports">23</a> for further details of the local delivery
environment.
</p>
<p>
<a id="id566451" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">unseen</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>false</em></span></td></tr></tbody></table></div>
<p>
<a id="id566535" class="indexterm"></a>
The result of string expansion for this option must be a valid boolean value,
that is, one of the strings “<span class="quote">yes</span>”, “<span class="quote">no</span>”, “<span class="quote">true</span>”, or “<span class="quote">false</span>”. Any other
result causes an error, and delivery is deferred. If the expansion is forced to
fail, the default value for the option (false) is used. Other failures cause
delivery to be deferred.
</p>
<p>
When this option is set true, routing does not cease if the router accepts the
address. Instead, a copy of the incoming address is passed to the next router,
overriding a false setting of <span><strong class="option">more</strong></span>. There is little point in setting
<span><strong class="option">more</strong></span> false if <span><strong class="option">unseen</strong></span> is always true, but it may be useful in cases when
the value of <span><strong class="option">unseen</strong></span> contains expansion items (and therefore, presumably, is
sometimes true and sometimes false).
</p>
<p>
<a id="id566596" class="indexterm"></a>
Setting the <span><strong class="option">unseen</strong></span> option has a similar effect to the <span><strong class="option">unseen</strong></span> command
qualifier in filter files. It can be used to cause copies of messages to be
delivered to some other destination, while also carrying out a normal delivery.
In effect, the current address is made into a “<span class="quote">parent</span>” that has two children
– one that is delivered as specified by this router, and a clone that goes on
to be routed further. For this reason, <span><strong class="option">unseen</strong></span> may not be combined with the
<span><strong class="option">one_time</strong></span> option in a <span><strong class="command">redirect</strong></span> router.
</p>
<p>
<span class="bold"><strong>Warning</strong></span>: Header lines added to the address (or specified for removal) by
this router or by previous routers affect the “<span class="quote">unseen</span>” copy of the message
only. The clone that continues to be processed by further routers starts with
no added headers and none specified for removal. For a <span><strong class="option">redirect</strong></span> router, if
a generated address is the same as the incoming address, this can lead to
duplicate addresses with different header modifications. Exim does not do
duplicate deliveries (except, in certain circumstances, to pipes -- see section
<a href="ch22.html#SECTdupaddr" title="22.7 Duplicate addresses">22.7</a>), but it is undefined which of the duplicates is discarded,
so this ambiguous situation should be avoided. The <span><strong class="option">repeat_use</strong></span> option of the
<span><strong class="option">redirect</strong></span> router may be of help.
</p>
<p>
Unlike the handling of header modifications, any data that was set by the
<span><strong class="option">address_data</strong></span> option in the current or previous routers <span class="emphasis"><em>is</em></span> passed on to
subsequent routers.
</p>
<p>
<a id="id566698" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">user</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span></td><td align="center">Type: <span class="emphasis"><em>string</em></span>†<span class="emphasis"><em></em></span></td><td align="right">Default: <span class="emphasis"><em>see below</em></span></td></tr></tbody></table></div>
<p>
<a id="id566783" class="indexterm"></a>
<a id="id566797" class="indexterm"></a>
<a id="id566812" class="indexterm"></a>
<a id="id566826" class="indexterm"></a>
<a id="id566841" class="indexterm"></a>
When a router queues an address for a transport, and the transport does not
specify a user, the user given here is used when running the delivery process.
The user may be specified numerically or by name. If expansion fails, the
error is logged and delivery is deferred.
This user is also used by the <span><strong class="command">redirect</strong></span> router when running a filter file.
The default is unset, except when <span><strong class="option">check_local_user</strong></span> is set. In this case,
the default is taken from the password information. If the user is specified as
a name, and <span><strong class="option">group</strong></span> is not set, the group associated with the user is used.
See also <span><strong class="option">initgroups</strong></span> and <span><strong class="option">group</strong></span> and the discussion in chapter
<a href="ch23.html" title="23. Environment for running local transports">23</a>.
</p>
<p>
<a id="id566895" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">verify</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span>‡<span class="emphasis"><em></em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>true</em></span></td></tr></tbody></table></div>
<p>
Setting this option has the effect of setting <span><strong class="option">verify_sender</strong></span> and
<span><strong class="option">verify_recipient</strong></span> to the same value.
</p>
<p>
<a id="id566991" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">verify_only</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span>‡<span class="emphasis"><em></em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>false</em></span></td></tr></tbody></table></div>
<p>
<a id="id567076" class="indexterm"></a>
<a id="id567092" class="indexterm"></a>
<a id="id567104" class="indexterm"></a>
If this option is set, the router is used only when verifying an address or
testing with the <span><strong class="option">-bv</strong></span> option, not when actually doing a delivery, testing
with the <span><strong class="option">-bt</strong></span> option, or running the SMTP EXPN command. It can be further
restricted to verifying only senders or recipients by means of
<span><strong class="option">verify_sender</strong></span> and <span><strong class="option">verify_recipient</strong></span>.
</p>
<p>
<span class="bold"><strong>Warning</strong></span>: When the router is being run to verify addresses for an incoming
SMTP message, Exim is not running as root, but under its own uid. If the router
accesses any files, you need to make sure that they are accessible to the Exim
user or group.
</p>
<p>
<a id="id567154" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">verify_recipient</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span>‡<span class="emphasis"><em></em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>true</em></span></td></tr></tbody></table></div>
<p>
If this option is false, the router is skipped when verifying recipient
addresses
or testing recipient verification using <span><strong class="option">-bv</strong></span>.
See section <a href="ch03.html#SECTrouprecon" title="3.12 Router preconditions">3.12</a> for a list of the order in which preconditions
are evaluated.
</p>
<p>
<a id="id567254" class="indexterm"></a>
</p>
<div class="informaltable">
<table border="1"><colgroup><col align="left" /><col align="center" /><col align="center" /><col align="right" /></colgroup><tbody><tr><td align="left"><span><strong class="option">verify_sender</strong></span></td><td align="center">Use: <span class="emphasis"><em>routers</em></span>‡<span class="emphasis"><em></em></span></td><td align="center">Type: <span class="emphasis"><em>boolean</em></span></td><td align="right">Default: <span class="emphasis"><em>true</em></span></td></tr></tbody></table></div>
<p>
If this option is false, the router is skipped when verifying sender addresses
or testing sender verification using <span><strong class="option">-bvs</strong></span>.
See section <a href="ch03.html#SECTrouprecon" title="3.12 Router preconditions">3.12</a> for a list of the order in which preconditions
are evaluated.
<a id="id567351" class="indexterm"></a>
<a id="id567363" class="indexterm"></a>
</p>
</div>
<div class="navfooter">
<table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch14.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch16.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div>
</body></html>