Strip change-bars before adding any new docs.
[users/heiko/exim.git] / doc / doc-docbook / spec.xfpt
index b088dea04dd61b4aca98bac0141e05cd66eeea20..41c977589ee23ce4a34a86e40728fc549caf09e3 100644 (file)
@@ -1,4 +1,4 @@
-. $Cambridge: exim/doc/doc-docbook/spec.xfpt,v 1.27 2007/12/01 15:53:55 nm4 Exp $
+. $Cambridge: exim/doc/doc-docbook/spec.xfpt,v 1.32 2008/01/29 17:14:47 fanf2 Exp $
 .
 . /////////////////////////////////////////////////////////////////////////////
 . This is the primary source of the Exim Manual. It is an xfpt document that is
@@ -47,8 +47,8 @@
 . the <bookinfo> element must also be updated for each new edition.
 . /////////////////////////////////////////////////////////////////////////////
 
-.set previousversion "4.68"
-.set version "4.69"
+.set previousversion "4.69"
+.set version "4.70"
 
 .set ACL "access control lists (ACLs)"
 .set I   "&nbsp;&nbsp;&nbsp;&nbsp;"
@@ -367,13 +367,11 @@ contributors.
 
 
 .section "Exim documentation" "SECID1"
-.new
 .cindex "documentation"
 This edition of the Exim specification applies to version &version; of Exim.
 Substantive changes from the &previousversion; edition are marked in some
 renditions of the document; this paragraph is so marked if the rendition is
 capable of showing a change indicator.
-.wen
 
 This document is very much a reference manual; it is not a tutorial. The reader
 is expected to have some familiarity with the SMTP mail transfer protocol and
@@ -456,12 +454,12 @@ Squared, formerly Planet Online Ltd, whose support I gratefully acknowledge.
 .cindex "FAQ"
 As well as Exim distribution tar files, the Exim web site contains a number of
 differently formatted versions of the documentation. A recent addition to the
-online information is the Exim wiki &new("(&url(http://wiki.exim.org))"),
+online information is the Exim wiki (&url(http://wiki.exim.org)),
 which contains what used to be a separate FAQ, as well as various other
 examples, tips, and know-how that have been contributed by Exim users.
 
 .cindex Bugzilla
-An Exim Bugzilla exists at &new("&url(http://bugs.exim.org)"). You can use
+An Exim Bugzilla exists at &url(http://bugs.exim.org). You can use
 this to report bugs, and also to add items to the wish list. Please search
 first to check that you are not duplicating a previous entry.
 
@@ -500,8 +498,8 @@ information will be posted at &url(http://www-tus.csx.cam.ac.uk/courses/exim/).
 .section "Bug reports" "SECID5"
 .cindex "bug reports"
 .cindex "reporting bugs"
-Reports of obvious bugs &new("can be emailed to &'bugs@exim.org'& or reported
-via the Bugzilla (&url(http://bugs.exim.org)).") However, if you are unsure
+Reports of obvious bugs can be emailed to &'bugs@exim.org'& or reported
+via the Bugzilla (&url(http://bugs.exim.org)). However, if you are unsure
 whether some behaviour is a bug or not, the best thing to do is to post a
 message to the &'exim-dev'& mailing list and have it discussed.
 
@@ -537,13 +535,13 @@ The &_.bz2_& file is usually a lot smaller than the &_.gz_& file.
 .cindex "distribution" "signing details"
 .cindex "distribution" "public key"
 .cindex "public key for signed distribution"
-The distributions are currently signed with Philip Hazel's GPG key. The
+The distributions are currently signed with Nigel Metheringham's GPG key. The
 corresponding public key is available from a number of keyservers, and there is
-also a copy in the file &_Public-Key_&. The signatures for the tar bundles are
+also a copy in the file &_nigel-pubkey.asc_&. The signatures for the tar bundles are
 in:
 .display
-&_exim-n.nn.tar.gz.sig_&
-&_exim-n.nn.tar.bz2.sig_&
+&_exim-n.nn.tar.gz.asc_&
+&_exim-n.nn.tar.bz2.asc_&
 .endd
 For each released version, the log of changes is made separately available in a
 separate file in the directory &_ChangeLogs_& so that it is possible to
@@ -729,12 +727,12 @@ the Exim documentation, &"spool"& is always used in the first sense.
 A number of pieces of external code are included in the Exim distribution.
 
 .ilist
-Regular expressions are supported in the main Exim program and in the Exim
-monitor using the freely-distributable PCRE library, copyright &copy;
-University of Cambridge. The source is distributed in the directory
-&_src/pcre_&. However, this is a cut-down version of PCRE. If you want to use
-the PCRE library in other programs, you should obtain and install the full
-version of the library from
+Regular expressions are supported in the main Exim program and in the
+Exim monitor using the freely-distributable PCRE library, copyright
+&copy; University of Cambridge. The source to a cut down version of PCRE
+used to be distributed in the directory &_src/pcre_&. However, this is
+no longer the case and you will need to use a system PCRE library or
+obtain and install the full version of the library from
 &url(ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre).
 .next
 .cindex "cdb" "acknowledgment"
@@ -1654,6 +1652,18 @@ architecture and operating system for itself, but the defaults can be
 overridden if necessary.
 
 
+.section "PCRE library" "SECTdb"
+.cindex "PCRE library"
+Exim no longer has an embedded PCRE library as the vast majority of
+modern systems include PCRE as a system library, although you may need
+to install the PCRE or PCRE development package for your operating
+system. If your system has a normal PCRE installation the Exim build
+process will need no further configuration. If the library or the
+headers are in an unusual location you will need to set the PCRE_LIBS
+and INCLUDE directives appropriately. If your operating system has no
+PCRE support then you will need to obtain and build the current PCRE
+from &url(ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/).
+
 .section "DBM libraries" "SECTdb"
 .cindex "DBM libraries" "discussion of"
 .cindex "hints database" "DBM files used for"
@@ -7144,9 +7154,9 @@ If any MySQL, PostgreSQL, Oracle, or InterBase lookups are used, the
 &%mysql_servers%&, &%pgsql_servers%&, &%oracle_servers%&, or &%ibase_servers%&
 option (as appropriate) must be set to a colon-separated list of server
 information.
-&new("(For MySQL and PostgreSQL only, the global option need not be set if all
+(For MySQL and PostgreSQL only, the global option need not be set if all
 queries contain their own server information &-- see section
-&<<SECTspeserque>>&.)") Each item in the list is a slash-separated list of four
+&<<SECTspeserque>>&.) Each item in the list is a slash-separated list of four
 items: host name, database name, user name, and password. In the case of
 Oracle, the host name field is used for the &"service name"&, and the database
 name field is not used and should be empty. For example:
@@ -11629,9 +11639,9 @@ details of the &(smtp)& transport.
 When a message is received from a remote host over an encrypted SMTP
 connection, and Exim is configured to request a certificate from the client,
 the value of the Distinguished Name of the certificate is made available in the
-&$tls_peerdn$& during subsequent processing. &new("Like &$tls_cipher$&, the
+&$tls_peerdn$& during subsequent processing. Like &$tls_cipher$&, the
 value is retained during message delivery, except during outbound SMTP
-deliveries.")
+deliveries.
 
 .vitem &$tod_bsdinbox$&
 .vindex "&$tod_bsdinbox$&"
@@ -12174,7 +12184,7 @@ listed in more than one group.
 .row &%disable_ipv6%&                "do no IPv6 processing"
 .row &%keep_malformed%&              "for broken files &-- should not happen"
 .row &%localhost_number%&            "for unique message ids in clusters"
-.row &new(&%message_body_newlines%&) "retain newlines in &$message_body$&"
+.row &%message_body_newlines%&       "retain newlines in &$message_body$&"
 .row &%message_body_visible%&        "how much to show in &$message_body$&"
 .row &%mua_wrapper%&                 "run in &""MUA wrapper""& mode"
 .row &%print_topbitchars%&           "top-bit characters are printing"
@@ -12241,13 +12251,13 @@ listed in more than one group.
 
 .section "Data lookups" "SECID101"
 .table2
-.row &new(&%ibase_servers%&)         "InterBase servers"
+.row &%ibase_servers%&               "InterBase servers"
 .row &%ldap_default_servers%&        "used if no server in query"
 .row &%ldap_version%&                "set protocol version"
 .row &%lookup_open_max%&             "lookup files held open"
-.row &new(&%mysql_servers%&)               "default MySQL servers"
-.row &new(&%oracle_servers%&)              "Oracle servers"
-.row &new(&%pgsql_servers%&)               "default PostgreSQL servers"
+.row &%mysql_servers%&               "default MySQL servers"
+.row &%oracle_servers%&              "Oracle servers"
+.row &%pgsql_servers%&               "default PostgreSQL servers"
 .row &%sqlite_lock_timeout%&         "as it says"
 .endtable
 
@@ -12290,7 +12300,7 @@ listed in more than one group.
 .row &%check_spool_space%&           "before accepting a message"
 .row &%deliver_queue_load_max%&      "no queue deliveries if load high"
 .row &%queue_only_load%&             "queue incoming if load high"
-.row &new(&%queue_only_load_latch%&) "don't re-evaluate load for each message"
+.row &%queue_only_load_latch%&       "don't re-evaluate load for each message"
 .row &%queue_run_max%&               "maximum simultaneous queue runners"
 .row &%remote_max_parallel%&         "parallel SMTP delivery per message"
 .row &%smtp_accept_max%&             "simultaneous incoming connections"
@@ -12525,7 +12535,7 @@ See also the &'Policy controls'& section above.
 .row &%queue_only%&                  "no immediate delivery at all"
 .row &%queue_only_file%&             "no immediate delivery if file exists"
 .row &%queue_only_load%&             "no immediate delivery if load is high"
-.row &new(&%queue_only_load_latch%&) "don't re-evaluate load for each message"
+.row &%queue_only_load_latch%&       "don't re-evaluate load for each message"
 .row &%queue_only_override%&         "allow command line to override"
 .row &%queue_run_in_order%&          "order of arrival"
 .row &%queue_run_max%&               "of simultaneous queue runners"
@@ -13106,7 +13116,7 @@ dns_check_names_pattern = \
   (?i)^(?>(?(1)\.|())[^\W_](?>[a-z0-9/-]*[^\W_])?)+$
 .endd
 which permits only letters, digits, slashes, and hyphens in components, but
-they must start and end with a letter or digit. &new(Slashes) are not, in fact,
+they must start and end with a letter or digit. Slashes are not, in fact,
 permitted in host names, but they are found in certain NS records (which can be
 accessed in Exim by using a &%dnsdb%& lookup). If you set
 &%allow_utf8_domains%&, you must modify this pattern, or set the option to an
@@ -20639,8 +20649,8 @@ delivers the message to it using the LMTP protocol.
 
 .option timeout lmtp time 5m
 The transport is aborted if the created process or Unix domain socket does not
-respond to LMTP commands or message input within this timeout. &new("Delivery
-is deferred, and will be tried again later.") Here is an example of a typical
+respond to LMTP commands or message input within this timeout. Delivery
+is deferred, and will be tried again later. Here is an example of a typical
 LMTP transport:
 .code
 lmtp:
@@ -21643,8 +21653,8 @@ unauthenticated. See also &%hosts_require_auth%&, and chapter
 .vindex "&$host$&"
 .vindex "&$host_address$&"
 This option specifies which interface to bind to when making an outgoing SMTP
-call. &new("The value is an IP address, not an interface name such as
-&`eth0`&.") Do not confuse this with the interface address that was used when a
+call. The value is an IP address, not an interface name such as
+&`eth0`&. Do not confuse this with the interface address that was used when a
 message was received, which is in &$received_ip_address$&, formerly known as
 &$interface_address$&. The name was changed to minimize confusion with the
 outgoing interface address. There is no variable that contains an outgoing
@@ -22270,11 +22280,9 @@ rewriting rule is skipped unless the relevant addresses are being processed.
 &`s`&       rewrite the &'Sender:'& header
 &`t`&       rewrite the &'To:'& header
 .endd
-.new
 "All headers" means all of the headers listed above that can be selected
 individually, plus their &'Resent-'& versions. It does not include
 other headers such as &'Subject:'& etc.
-.wen
 
 You should be particularly careful about rewriting &'Sender:'& headers, and
 restrict this to special known cases in your own domains.
@@ -24339,8 +24347,8 @@ incoming message (by default &-- you can, of course, change this), and it is
 also included in the log line that records a message's arrival, keyed by
 &"X="&, unless the &%tls_cipher%& log selector is turned off. The &%encrypted%&
 condition can be used to test for specific cipher suites in ACLs.
-&new("(For outgoing SMTP deliveries, &$tls_cipher$& is reset &-- see section
-&<<SECID185>>&.)")
+(For outgoing SMTP deliveries, &$tls_cipher$& is reset &-- see section
+&<<SECID185>>&.)
 
 Once TLS has been established, the ACLs that run for subsequent SMTP commands
 can check the name of the cipher suite and vary their actions accordingly. The
@@ -24660,7 +24668,7 @@ options in the main part of the configuration. These options are:
 .irow &%acl_smtp_mail%&        "ACL for MAIL"
 .irow &%acl_smtp_mailauth%&    "ACL for the AUTH parameter of MAIL"
 .irow &%acl_smtp_mime%&        "ACL for content-scanning MIME parts"
-.irow &new(&%acl_smtp_notquit%&)  "ACL for non-QUIT terminations"
+.irow &%acl_smtp_notquit%&     "ACL for non-QUIT terminations"
 .irow &%acl_smtp_predata%&     "ACL at start of DATA command"
 .irow &%acl_smtp_quit%&        "ACL for QUIT"
 .irow &%acl_smtp_rcpt%&        "ACL for RCPT"
@@ -26842,7 +26850,7 @@ parameter &'m'& is the maximum number of messages that a client is permitted to
 send in each time interval. It also specifies the number of messages permitted
 in a fast burst. By increasing both &'m'& and &'p'& but keeping &'m/p'&
 constant, you can allow a client to send more messages in a burst without
-changing its overall sending rate limit. Conversely, if &'m'& and &'p'& are
+changing its long-term sending rate limit. Conversely, if &'m'& and &'p'& are
 both small, messages must be sent at an even rate.
 
 There is a script in &_util/ratelimit.pl_& which extracts sending rates from
@@ -26851,21 +26859,22 @@ when deploying the &%ratelimit%& ACL condition. The script prints usage
 instructions when it is run with no arguments.
 
 The key is used to look up the data for calculating the client's average
-sending rate. This data is stored in a database maintained by Exim in its spool
-directory, alongside the retry and other hints databases. The default key is
-&$sender_host_address$&, which applies the limit to each client host IP address.
+sending rate. This data is stored in Exim's spool directory, alongside the
+retry and other hints databases. The default key is &$sender_host_address$&,
+which means Exim computes the sending rate of each client host IP address.
 By changing the key you can change how Exim identifies clients for the purpose
 of ratelimiting. For example, to limit the sending rate of each authenticated
 user, independent of the computer they are sending from, set the key to
 &$authenticated_id$&. You must ensure that the lookup key is meaningful; for
 example, &$authenticated_id$& is only meaningful if the client has
-authenticated, and you can check with the &%authenticated%& ACL condition.
+authenticated (which you can check with the &%authenticated%& ACL condition).
 
-If you want to limit the rate at which a recipient receives messages, you can
-use the key &`$local_part@$domain`& with the &%per_rcpt%& option (see below) in
-a RCPT ACL.
+The lookup key does not have to identify clients: If you want to limit the
+rate at which a recipient receives messages, you can use the key
+&`$local_part@$domain`& with the &%per_rcpt%& option (see below) in a RCPT
+ACL.
 
-Internally, Exim includes the smoothing constant &'p'& and the options in the
+Internally, Exim appends the smoothing constant &'p'& and the options onto the
 lookup key because they alter the meaning of the stored data. This is not true
 for the limit &'m'&, so you can alter the configured maximum rate and Exim will
 still remember clients' past behaviour, but if you alter the other ratelimit
@@ -26886,17 +26895,17 @@ the default if none of the &%per_*%& options is specified.
 
 The &%per_byte%& option limits the sender's email bandwidth. Note that it is
 best to use this option in the DATA ACL; if it is used in an earlier ACL it
-relies on the SIZE parameter on the MAIL command, which may be inaccurate or
-completely missing. You can follow the limit &'m'& in the configuration with K,
-M, or G to specify limits in kilobytes, megabytes, or gigabytes, respectively.
+relies on the SIZE parameter specified by the client in its MAIL command,
+which may be inaccurate or completely missing. You can follow the limit &'m'&
+in the configuration with K, M, or G to specify limits in kilobytes,
+megabytes, or gigabytes, respectively.
 
-.new
 The &%per_rcpt%& option causes Exim to limit the rate at which
 recipients are accepted. To be effective, it would need to be used in
 either the &%acl_smtp_rcpt%& or the &%acl_not_smtp%& ACL. In the
 &%acl_smtp_rcpt%& ACL, the number of recipients is incremented by one.
 In the case of a locally submitted message in the &%acl_not_smtp%& ACL,
-the number of recipients incremented is equal to &%$recipients_count%&
+the number of recipients is incremented by the &%$recipients_count%&
 for the entire message. Note that in either case the rate limiting
 engine will see a message with many recipients as a large high-speed
 burst.
@@ -26906,7 +26915,6 @@ condition is processed. This can be used to limit the SMTP command rate.
 This command is essentially an alias of &%per_rcpt%& to make it clear
 that the effect is to limit the rate at which individual commands,
 rather than recipients, are accepted.
-.wen
 
 .section "Ratelimit options for handling fast clients" "ratophanfas"
 If a client's average rate is greater than the maximum, the rate limiting
@@ -26916,15 +26924,16 @@ counter-measures (such as rejecting the message) that may be specified by the
 rest of the ACL. The default mode is leaky, which avoids a sender's
 over-aggressive retry rate preventing it from getting any email through.
 
-The &%strict%& option means that the client's recorded rate is always updated.
-The effect of this is that Exim measures the client's average rate of attempts
-to send email, which can be much higher than the maximum &new("it is actually
-allowed. If the client is over the limit it may be subjected to
-counter-measures in the ACL until it slows down below the maximum rate.") The
-smoothing period determines the time it takes for a high sending rate to decay
-exponentially to 37% of its peak value, which means that you can work out the
-time (the number of smoothing periods) that a client is subjected to
-counter-measures after an over-limit burst with this formula:
+The &%strict%& option means that the client's recorded rate is always
+updated. The effect of this is that Exim measures the client's average rate
+of attempts to send email, which can be much higher than the maximum it is
+actually allowed. If the client is over the limit it may be subjected to
+counter-measures by the ACL until it slows down below the maximum rate. If
+the client stops attempting to send email for the time specified in the &'p'&
+parameter then its computed rate will decay exponentially to 37% of its peak
+value. You can work out the time (the number of smoothing periods) that a
+client is subjected to counter-measures after an over-limit burst with this
+formula:
 .code
 ln(peakrate/maxrate)
 .endd
@@ -28035,6 +28044,10 @@ condition defers.
 &*Warning*&: It is not possible to use the UNIX socket connection method with
 multiple &%spamd%& servers.
 
+The &%spamd_address%& variable is expanded before use if it starts with
+a dollar sign. In this case, the expansion may return a string that is
+used as the list so that multiple spamd servers can be the result of an
+expansion.
 
 .section "Calling SpamAssassin from an Exim ACL" "SECID206"
 Here is a simple example of the use of the &%spam%& condition in a DATA ACL:
@@ -28088,7 +28101,9 @@ for inclusion in log or reject messages.
 
 .vitem &$spam_score_int$&
 The spam score of the message, multiplied by ten, as an integer value. For
-example &"34"& or &"305"&. This is useful for numeric comparisons in
+example &"34"& or &"305"&. It may appear to disagree with &$spam_score$&
+because &$spam_score$& is rounded and &$spam_score_int$& is truncated.
+The integer value is useful for numeric comparisons in
 conditions. This variable is special; its value is saved with the message, and
 written to Exim's spool file. This means that it can be used during the whole
 life of the message on your Exim system, in particular, in routers or
@@ -28105,14 +28120,15 @@ A multiline text table, containing the full SpamAssassin report for the
 message. Useful for inclusion in headers or reject messages.
 .endlist
 
-The &%spam%& condition caches its results. If you call it again with the same
-user name, it does not scan again, but rather returns the same values as
-before.
+The &%spam%& condition caches its results unless expansion in
+spamd_address was used. If you call it again with the same user name, it
+does not scan again, but rather returns the same values as before.
 
-The &%spam%& condition returns DEFER if there is any error while running the
-message through SpamAssassin. If you want to treat DEFER as FAIL (to pass on to
-the next ACL statement block), append &`/defer_ok`& to the right-hand side of
-the spam condition, like this:
+The &%spam%& condition returns DEFER if there is any error while running
+the message through SpamAssassin or if the expansion of spamd_address
+failed. If you want to treat DEFER as FAIL (to pass on to the next ACL
+statement block), append &`/defer_ok`& to the right-hand side of the
+spam condition, like this:
 .code
 deny message = This message was classified as SPAM
      spam    = joe/defer_ok
@@ -28155,7 +28171,7 @@ cases.
 These ACLs are called (possibly many times) just before the &%acl_smtp_data%&
 ACL in the case of an SMTP message, or just before the &%acl_not_smtp%& ACL in
 the case of a non-SMTP message. However, a MIME ACL is called only if the
-message contains a &new(&'Content-Type:'&) header line. When a call to a MIME
+message contains a &'Content-Type:'& header line. When a call to a MIME
 ACL does not yield &"accept"&, ACL processing is aborted and the appropriate
 result code is sent to the client. In the case of an SMTP message, the
 &%acl_smtp_data%& ACL is not called when this happens.