X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/114b01dded2c9d72cdd44cac97a4d3cc9f22ddfd..HEAD:/doc/doc-docbook/spec.xfpt diff --git a/doc/doc-docbook/spec.xfpt b/doc/doc-docbook/spec.xfpt index e51e540d9..202c27659 100644 --- a/doc/doc-docbook/spec.xfpt +++ b/doc/doc-docbook/spec.xfpt @@ -1805,6 +1805,11 @@ suited to Exim's usage model. Yet another DBM library, called &'tdb'&, is available from &url(https://sourceforge.net/projects/tdb/files/). It has its own interface, and also operates on a single file. +.next +.new +It is possible to use sqlite3 (&url(https://www.sqlite.org/index.html)) +for the DBM library. +.wen .endlist .cindex "USE_DB" @@ -1816,8 +1821,9 @@ USE_DB in an appropriate configuration file (typically .code USE_DB=yes .endd -Similarly, for gdbm you set USE_GDBM, and for tdb you set USE_TDB. An -error is diagnosed if you set more than one of these. +Similarly, for gdbm you set USE_GDBM, for tdb you set USE_TDB, +and for sqlite3 you set USE_SQLITE. +An error is diagnosed if you set more than one of these. You can set USE_NDBM if needed to override an operating system default. At the lowest level, the build-time configuration sets none of these options, @@ -1833,6 +1839,7 @@ in one of these lines: .code DBMLIB = -ldb DBMLIB = -ltdb +DBMLIB = -lsqlite3 DBMLIB = -lgdbm -lgdbm_compat .endd The last of those was for a Linux having GDBM provide emulated NDBM facilities. @@ -2886,6 +2893,11 @@ available to admin users. The word &"set"& at the start of a line, followed by a single space, is recognised specially as defining a value for a variable. +.new +.cindex "tainted data" "expansion testing" +If the sequence &",t"& is inserted before the space, +the value is marked as tainted. +.wen The syntax is otherwise the same as the ACL modifier &"set ="&. .cmdopt -bem <&'filename'&> @@ -3096,7 +3108,7 @@ options, as appropriate. The &%-bnq%& option (see below) provides a way of suppressing this for special cases. Policy checks on the contents of local messages can be enforced by means of -the non-SMTP ACL. See chapter &<>& for details. +the non-SMTP ACL. See section &<>& for details. .cindex "return code" "for &%-bm%&" The return code is zero if the message is successfully accepted. Otherwise, the @@ -3372,7 +3384,7 @@ dots doubled), terminated by a line containing just a single dot. An error is provoked if the terminating dot is missing. A further message may then follow. As for other local message submissions, the contents of incoming batch SMTP -messages can be checked using the non-SMTP ACL (see chapter &<>&). +messages can be checked using the non-SMTP ACL (see section &<>&). Unqualified addresses are automatically qualified using &%qualify_domain%& and &%qualify_recipient%&, as appropriate, unless the &%-bnq%& option is used. @@ -4710,7 +4722,7 @@ all selected messages, not just the first; frozen messages are included when The &%-R%& option makes it straightforward to initiate delivery of all messages to a given domain after a host has been down for some time. When the SMTP -command ETRN is accepted by its ACL (see chapter &<>&), its default +command ETRN is accepted by its ACL (see section &<>&), its default effect is to run Exim with the &%-R%& option, but it can be configured to run an arbitrary command instead. @@ -6841,7 +6853,10 @@ by default, but has an option to omit them (see section &<>&). .cindex "dsearch lookup type" The given file must be an absolute directory path; this is searched for an entry whose name is the key by calling the &[lstat()]& function. -The key may not contain any forward slash characters. +.new +Unless the options (below) permit a path, +.wen +the key may not contain any forward slash characters. If &[lstat()]& succeeds then so does the lookup. .cindex "tainted data" "dsearch result" The result is regarded as untainted. @@ -6850,7 +6865,7 @@ Options for the lookup can be given by appending them after the word "dsearch", separated by a comma. Options, if present, are a comma-separated list having each element starting with a tag name and an equals. -Two options are supported, for the return value and for filtering match +Three options are supported, for the return value and for filtering match candidates. The "ret" option requests an alternate result value of the entire path for the entry. Example: @@ -6858,6 +6873,7 @@ the entire path for the entry. Example: ${lookup {passwd} dsearch,ret=full {/etc}} .endd The default result is just the requested entry. + The "filter" option requests that only directory entries of a given type are matched. The match value is one of "file", "dir" or "subdir" (the latter not matching "." or ".."). Example: @@ -6867,6 +6883,14 @@ ${lookup {passwd} dsearch,filter=file {/etc}} The default matching is for any entry type, including directories and symlinks. +The "key" option relaxes the restriction that only a simple path component can +be searched for, to permit a sequence of path components. Example: +.code +${lookup {foo/bar} dsearch,key=path {/etc}} +.endd +If this option is used, a ".." component in the key is specifically disallowed. +The default operation is that the key may only be a single path component. + An example of how this lookup can be used to support virtual domains is given in section &<>&. @@ -6896,8 +6920,8 @@ key is found. The first key that matches is used; there is no attempt to find a lookup types support only literal keys. &*Warning 2*&: In a host list, you must always use &(net-iplsearch)& so that -the implicit key is the host's IP address rather than its name (see section -&<>&). +the implicit key is the host's IP address rather than its name +(see section &<>&). &*Warning 3*&: Do not use an IPv4-mapped IPv6 address for a key; use the IPv4, in dotted-quad form. (Exim converts IPv4-mapped IPv6 addresses to this @@ -8197,6 +8221,11 @@ or delete command), the result of the lookup is the number of rows affected. anything (for example, setting a field to the value it already has), the result is zero because no rows are affected. +.new +To get an encryted connection, use a Mysql option file with the required +parameters for the connection. +.wen + .subsection "Special PostgreSQL features" SECID74 PostgreSQL lookups can also use Unix domain socket connections to the database. @@ -9230,8 +9259,9 @@ is not used. &*Reminder*&: With this kind of pattern, you must have host &'names'& as keys in the file, not IP addresses. If you want to do lookups based on IP -addresses, you must precede the search type with &"net-"& (see section -&<>&). There is, however, no reason why you could not use +addresses, you must precede the search type with &"net-"& +(see section &<>&). +There is, however, no reason why you could not use two items in the same list, one doing an address lookup and one doing a name lookup, both using the same file. @@ -11562,6 +11592,19 @@ literal question mark). .cindex "&%utf8_localpart_from_alabel%& expansion item" These convert EAI mail name components between UTF-8 and a-label forms. For information on internationalisation support see &<>&. + + +.new +.vitem &*${xtextd:*&<&'string'&>&*}*& +.cindex "text forcing in strings" +.cindex "string" "xtext decoding" +.cindex "xtext" +.cindex "&%xtextd%& expansion item" +This performs xtext decoding of the string (per RFC 3461 section 4). +.wen + + + .endlist @@ -12051,7 +12094,8 @@ where the first item in the list is the empty string. .next The item @[] matches any of the local host's interface addresses. .next -Single-key lookups are assumed to be like &"net-"& style lookups in host lists, +Single-key lookups are assumed to be like &"net-"& style lookups in host lists +(see section &<>&), even if &`net-`& is not specified. There is never any attempt to turn the IP address into a host name. The most common type of linear search for &*match_ip*& is likely to be &*iplsearch*&, in which the file can contain CIDR @@ -14812,6 +14856,7 @@ listed in more than one group. .row &%acl_smtp_rcpt%& "ACL for RCPT" .row &%acl_smtp_starttls%& "ACL for STARTTLS" .row &%acl_smtp_vrfy%& "ACL for VRFY" +.row &%acl_smtp_wellknown%& "ACL for WELLKNOWN" .row &%av_scanner%& "specify virus scanner" .row &%check_rfc2047_length%& "check length of RFC 2047 &""encoded &&& words""&" @@ -14978,6 +15023,7 @@ See also the &'Policy controls'& section above. .row &%prdr_enable%& "advertise PRDR to all hosts" .row &%smtputf8_advertise_hosts%& "advertise SMTPUTF8 to these hosts" .row &%tls_advertise_hosts%& "advertise TLS to these hosts" +.row &%wellknown_advertise_hosts%& "advertise WELLKNOWN to these hosts" .endtable @@ -15101,7 +15147,7 @@ log_selector = +8bitmime .cindex "&ACL;" "for non-SMTP messages" .cindex "non-SMTP messages" "ACLs for" This option defines the ACL that is run when a non-SMTP message has been -read and is on the point of being accepted. See chapter &<>& for +read and is on the point of being accepted. See section &<>& for further details. .option acl_not_smtp_mime main string&!! unset @@ -15113,24 +15159,26 @@ SMTP messages. .cindex "&ACL;" "at start of non-SMTP message" .cindex "non-SMTP messages" "ACLs for" This option defines the ACL that is run before Exim starts reading a -non-SMTP message. See chapter &<>& for further details. +non-SMTP message. See section &<>& for further details. .option acl_smtp_auth main string&!! unset .cindex "&ACL;" "setting up for SMTP commands" .cindex "AUTH" "ACL for" This option defines the ACL that is run when an SMTP AUTH command is -received. See chapter &<>& for further details. +received. +See chapter &<>& for general information on ACLs, and chapter +&<>& for details of authentication. .option acl_smtp_connect main string&!! unset .cindex "&ACL;" "on SMTP connection" This option defines the ACL that is run when an SMTP connection is received. -See chapter &<>& for further details. +See section &<>& for further details. .option acl_smtp_data main string&!! unset .cindex "DATA" "ACL for" This option defines the ACL that is run after an SMTP DATA command has been processed and the message itself has been received, but before the final -acknowledgment is sent. See chapter &<>& for further details. +acknowledgment is sent. See section &<>& for further details. .option acl_smtp_data_prdr main string&!! accept .cindex "PRDR" "ACL for" @@ -15141,7 +15189,7 @@ This option defines the ACL that, if the PRDR feature has been negotiated, is run for each recipient after an SMTP DATA command has been processed and the message itself has been received, but before the -acknowledgment is sent. See chapter &<>& for further details. +acknowledgment is sent. See section &<>& for further details. .option acl_smtp_dkim main string&!! unset .cindex DKIM "ACL for" @@ -15164,7 +15212,7 @@ received. See chapter &<>& for further details. .cindex "EHLO" "ACL for" .cindex "HELO" "ACL for" This option defines the ACL that is run when an SMTP EHLO or HELO -command is received. See chapter &<>& for further details. +command is received. See section &<>& for further details. .option acl_smtp_mail main string&!! unset @@ -15175,7 +15223,8 @@ received. See chapter &<>& for further details. .option acl_smtp_mailauth main string&!! unset .cindex "AUTH" "on MAIL command" This option defines the ACL that is run when there is an AUTH parameter on -a MAIL command. See chapter &<>& for details of ACLs, and chapter +a MAIL command. +See chapter &<>& for general information on ACLs, and chapter &<>& for details of authentication. .option acl_smtp_mime main string&!! unset @@ -15188,7 +15237,7 @@ section &<>& for details. .cindex "not-QUIT, ACL for" This option defines the ACL that is run when an SMTP session ends without a QUIT command being received. -See chapter &<>& for further details. +See section &<>& for further details. .option acl_smtp_predata main string&!! unset This option defines the ACL that is run when an SMTP DATA command is @@ -15203,7 +15252,7 @@ received. See chapter &<>& for further details. .option acl_smtp_rcpt main string&!! unset .cindex "RCPT" "ACL for" This option defines the ACL that is run when an SMTP RCPT command is -received. See chapter &<>& for further details. +received. See section &<>& for further details. .option acl_smtp_starttls main string&!! unset .cindex "STARTTLS, ACL for" @@ -15215,6 +15264,13 @@ received. See chapter &<>& for further details. This option defines the ACL that is run when an SMTP VRFY command is received. See chapter &<>& for further details. +.new +.option acl_smtp_wellknown main string&!! unset +.cindex "WELLKNOWN, ACL for" +This option defines the ACL that is run when an SMTP WELLKNOWN command is +received. See section &<>& for further details. +.wen + .option add_environment main "string list" empty .cindex "environment" "set values" This option adds individual environment variables that the @@ -16189,11 +16245,13 @@ set. .cindex "EHLO" "underscores in" .cindex "underscore in EHLO/HELO" This option can be set to a string of rogue characters that are permitted in -all EHLO and HELO names in addition to the standard letters, digits, -hyphens, and dots. If you really must allow underscores, you can set +non-ip-literal EHLO and HELO names in addition to the standard letters, digits, +hyphens, and dots. For examplem if you really must allow underscores, +you can set .code helo_allow_chars = _ .endd +This option does not apply to names that look like ip-literals. Note that the value is one string, not a list. @@ -16567,7 +16625,7 @@ If permitted, Exim as a servier will advertise in the EHLO response the limit for RCPT commands set by the &%recipients_max%& option (if it is set) and the limit for MAIL commands set by the &%smtp_accept_max_per_connection%& option. -,wen +.wen .option local_from_check main boolean true .cindex "&'Sender:'& header line" "disabling addition of" @@ -18884,6 +18942,14 @@ absolute and untainted. See also &%bounce_message_file%&. +.new +.option wellknown_advertise_hosts main boolean unset +.cindex WELLKNOWN advertisement +.cindex "ESMTP extensions" WELLKNOWN +This option enables the advertising of the SMTP WELLKNOWN extension. +See also the &%acl_smtp_wellknown%& ACL (&<>&). +.wen + .option write_rejectlog main boolean true .cindex "reject log" "disabling" If this option is set false, Exim no longer writes anything to the reject log. @@ -30535,12 +30601,17 @@ Section 4.3 of that document. .subsection General Under GnuTLS, DANE is only supported from version 3.0.0 onwards. -DANE is specified in published RFCs and decouples certificate authority trust +DANE is specified in RFC 6698. It decouples certificate authority trust selection from a "race to the bottom" of "you must trust everything for mail to get through". -There is an alternative technology called MTA-STS, which -instead publishes MX trust anchor information on an HTTPS website. At the -time this text was last updated, MTA-STS was still a draft, not yet an RFC. +It does retain the need to trust the assurances provided by the DNSSEC tree. + +There is an alternative technology called MTA-STS (RFC 8461), which +instead publishes MX trust anchor information on an HTTPS website. +The discovery of the address for that website does not (per standard) +require DNSSEC, and could be regarded as being less secure than DANE +as a result. + Exim has no support for MTA-STS as a client, but Exim mail server operators can choose to publish information describing their TLS configuration using MTA-STS to let those clients who do use that protocol derive trust @@ -30611,6 +30682,7 @@ options in the main part of the configuration. These options are: .cindex "RCPT" "ACL for" .cindex "STARTTLS, ACL for" .cindex "VRFY" "ACL for" +.cindex "WELLKNOWN" "ACL for" .cindex "SMTP" "connection, ACL for" .cindex "non-SMTP messages" "ACLs for" .cindex "MIME content scanning" "ACL for" @@ -30637,6 +30709,7 @@ options in the main part of the configuration. These options are: .irow &%acl_smtp_rcpt%& "ACL for RCPT" .irow &%acl_smtp_starttls%& "ACL for STARTTLS" .irow &%acl_smtp_vrfy%& "ACL for VRFY" +.irow &%acl_smtp_wellknown%& "ACL for WELLKNOWN" .endtable For example, if you set @@ -30652,7 +30725,7 @@ trying to deliver the message. It is therefore recommended that you do as much testing as possible at RCPT time. -.subsection "The non-SMTP ACLs" SECID190 +.subsection "The non-SMTP ACLs" SECnonSMTP .cindex "non-SMTP messages" "ACLs for" The non-SMTP ACLs apply to all non-interactive incoming messages, that is, they apply to batched SMTP as well as to non-SMTP messages. (Batched SMTP is not @@ -30686,7 +30759,7 @@ kind of rejection is treated as permanent, because there is no way of sending a temporary error for these kinds of message. -.subsection "The SMTP connect ACL" SECID191 +.subsection "The SMTP connect ACL" SECconnectACL .cindex "SMTP" "connection, ACL for" .oindex &%smtp_banner%& The ACL test specified by &%acl_smtp_connect%& happens at the start of an SMTP @@ -30701,7 +30774,7 @@ is accepted; if the ACL does not accept then the TCP connection is dropped witho any TLS startup attempt and without any SMTP response being transmitted. -.subsection "The EHLO/HELO ACL" SECID192 +.subsection "The EHLO/HELO ACL" SECheloACL .cindex "EHLO" "ACL for" .cindex "HELO" "ACL for" The ACL test specified by &%acl_smtp_helo%& happens when the client issues an @@ -30722,7 +30795,7 @@ affect the EHLO options that are listed on the second and subsequent lines of an EHLO response. -.subsection "The DATA ACLs" SECID193 +.subsection "The DATA ACLs" SECdataACLS .cindex "DATA" "ACLs for" Two ACLs are associated with the DATA command, because it is two-stage command, with two responses being sent to the client. @@ -30819,6 +30892,62 @@ This ACL is evaluated after &%acl_smtp_dkim%& but before &%acl_smtp_data%&. If the ACL is not defined, processing completes as if the feature was not requested by the client. +.new +.subsection "The SMTP WELLKNOWN ACL" SECTWELLKNOWNACL +.cindex "WELLKNOWN" "ACL for" +.oindex "&%acl_smtp_wellknown%&" +The &%acl_smtp_wellknown%& ACL is available only when Exim is compiled +with WELLKNOWN support enabled. + +The ACL determines the response to an SMTP WELLKNOWN command, using the normal +accept/defer/deny verbs for the response code, +and a new &"control=wellknown"& modifier. +This modifier takes a single option, separated by a '/' +character, which must be the name of a file containing the response +cleartext. The modifier is expanded before use in the usual way before +it is used. The configuration is responsible for picking a suitable file +to return and, most importantly, not returning any unexpected file. +The argument for the SMTP verb will be available in the &$smtp_command_argument$& +variable and can be used for building the file path. +If the file path given in the modifier is empty or inacessible, the control will +fail. + +For example: +.code + check_wellknown: + accept control = wellknown/\ + ${lookup {${xtextd:$smtp_command_argument}} \ + dsearch,key=path,filter=file,ret=full \ + {$spooldir/wellknown.d}} +.endd +File content will be encoded in &"xtext"& form, and line-wrapping +for line-length limitation will be done before transmission. +A response summary line will be prepended, with the (pre-encoding) file size. + +The above example uses the expansion operator ${xtextd:} +which is needed to decode the xtext-encoded key from the SMTP verb. + +Under the util directory there is a "mailtest" utility which can be used +to test/retrieve WELLKNOWN items. Syntax is +.code + mailtest -h host.example.com -w security.txt +.endd + +WELLKNOWN is a ESMTP extension providing access to extended +information about the server. It is modelled on the webserver +facilities documented in RFC 8615 and can be used for a security.txt +file and could be used for ACME handshaking (RFC 8555). + +Exim will advertise WELLKNOWN support in the EHLO response +.oindex &%wellknown_advertise_hosts%& +(conditional on a new option &%wellknown_advertise_hosts%&) +and service WELLKNOWN smtp verbs having a single parameter +giving a key for an item of "site-wide metadata". +The verb and key are separated by whitespace, +and the key is xtext-encoded (per RFC 3461 section 4). +.wen + + .subsection "The QUIT ACL" SECTQUITACL .cindex "QUIT, ACL for" The ACL for the SMTP QUIT command is anomalous, in that the outcome of the ACL @@ -30989,12 +31118,15 @@ For &%acl_not_smtp%&, &%acl_smtp_auth%&, &%acl_smtp_connect%&, &%acl_smtp_mime%&, &%acl_smtp_predata%&, and &%acl_smtp_starttls%&, the action when the ACL is not defined is &"accept"&. -For the others (&%acl_smtp_etrn%&, &%acl_smtp_expn%&, &%acl_smtp_rcpt%&, and -&%acl_smtp_vrfy%&), the action when the ACL is not defined is &"deny"&. -This means that &%acl_smtp_rcpt%& must be defined in order to receive any -messages over an SMTP connection. For an example, see the ACL in the default -configuration file. - +For the others (&%acl_smtp_etrn%&, &%acl_smtp_expn%&, &%acl_smtp_rcpt%&, +&%acl_smtp_vrfy%& +.new +and &%acl_smtp_wellknown%&), +.wen +the action when the ACL +is not defined is &"deny"&. This means that &%acl_smtp_rcpt%& must be +defined in order to receive any messages over an SMTP connection. +For an example, see the ACL in the default configuration file. @@ -31066,7 +31198,8 @@ option to do this.) .section "Format of an ACL" "SECID199" .cindex "&ACL;" "format of" .cindex "&ACL;" "verbs, definition of" -An individual ACL consists of a number of statements. Each statement starts +An individual ACL definition consists of a number of statements. +Each statement starts with a verb, optionally followed by a number of conditions and &"modifiers"&. Modifiers can change the way the verb operates, define error and log messages, set variables, insert delays, and vary the processing of accepted messages. @@ -31085,6 +31218,9 @@ happens then depends on the verb (and in one case, on a special modifier). Not all the conditions make sense at every testing point. For example, you cannot test a sender address in the ACL that is run for a VRFY command. +The definition of an ACL ends where another starts, +or a different configuration section starts. + .section "ACL verbs" "SECID200" The ACL verbs are as follows: @@ -32095,6 +32231,13 @@ that are being submitted at the same time using &%-bs%& or &%-bS%&. This control enables conversion of UTF-8 in message envelope addresses to a-label form. For details see section &<>&. + +.new +.vitem &*control&~=&~wellknown*& +This control sets up a response data file for a WELLKNOWN SMTP command. +It may only be used in an ACL servicing that command. +For details see section &<>&. +.wen .endlist vlist @@ -41600,8 +41743,11 @@ Exim's DKIM implementation allows for .olist Signing outgoing messages: This function is implemented in the SMTP transport. It can co-exist with all other Exim features -(including transport filters) -except cutthrough delivery. +(including transport filters) except cutthrough delivery. +.new +However, signing options may not depend on headers modified by +routers, the transport or a transport filter. +.wen .next Verifying signatures in incoming messages: This is implemented by an additional ACL (acl_smtp_dkim), which can be called several times per message, with @@ -42410,7 +42556,8 @@ Example usage: allow_fail data = :fail: Invalid SRS recipient address - #... further routers here + #... further routers here get inbound_srs-redirected recipients + # and any that were not SRS'd # transport; should look like the non-forward outbound @@ -42996,10 +43143,13 @@ Events have names which correspond to the point in process at which they fire. The name is placed in the variable &$event_name$& and the event action expansion must check this, as it will be called for every possible event type. +.new The current list of events is: +.wen .itable all 0 0 4 25* left 10* center 15* center 50* left .row auth:fail after both "per driver per authentication attempt" .row dane:fail after transport "per connection" +.row dns:fail after both "per lookup" .row msg:complete after main "per message" .row msg:defer after transport "per message per delivery try" .row msg:delivery after transport "per recipient" @@ -43033,6 +43183,7 @@ with the event type: .itable all 0 0 2 20* left 80* left .row auth:fail "smtp response" .row dane:fail "failure reason" +.row dns:fail "failure reason, key and lookup-type" .row msg:defer "error string" .row msg:delivery "smtp confirmation message" .row msg:fail:internal "failure reason" @@ -43082,6 +43233,11 @@ chain element received on the connection. For OpenSSL it will trigger for every chain element including those loaded locally. +.new +For dns:fail events from dnsdb lookups, a &"defer_never"& option does not +affect the reporting of DNS_AGAIN. +.wen + . //////////////////////////////////////////////////////////////////////////// . ////////////////////////////////////////////////////////////////////////////