X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/759502e5af0acfb310b8571f056d2dbf59adb1d3..a5dc727afcc92deab722a84ae5cf3d00ae74c5f6:/doc/doc-docbook/spec.xfpt diff --git a/doc/doc-docbook/spec.xfpt b/doc/doc-docbook/spec.xfpt index f9bdbd8ec..295835dbb 100644 --- a/doc/doc-docbook/spec.xfpt +++ b/doc/doc-docbook/spec.xfpt @@ -3871,6 +3871,14 @@ This option is not intended for use by external callers. It is used internally by Exim in conjunction with the &%-MC%& option. It signifies that the remote host supports the ESMTP &_DSN_& extension. +.new +.vitem &%-MCd%& +.oindex "&%-MCd%&" +This option is not intended for use by external callers. It is used internally +by Exim in conjunction with the &%-d%& option +to pass on an information string on the purpose of the process. +.wen + .vitem &%-MCG%&&~<&'queue&~name'&> .oindex "&%-MCG%&" This option is not intended for use by external callers. It is used internally @@ -6667,6 +6675,10 @@ Two different types of data lookup are implemented: The &'single-key'& type requires the specification of a file in which to look, and a single key to search for. The key must be a non-empty string for the lookup to succeed. The lookup type determines how the file is searched. +.new +.cindex "tainted data" "single-key lookups" +The file string may not be tainted +.wen .next .cindex "query-style lookup" "definition of" The &'query-style'& type accepts a generalized database query. No particular @@ -6758,11 +6770,33 @@ by default, but has an option to omit them (see section &<>&). .next .cindex "lookup" "dsearch" .cindex "dsearch lookup type" -&(dsearch)&: The given file must be a directory; 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. If &[lstat()]& succeeds, the result of -the lookup is the name of the entry, which may be a file, directory, -symbolic link, or any other kind of directory entry. An example of how this +&(dsearch)&: The given file must be an +.new +absolute +.wen +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. +If &[lstat()]& succeeds then so does the lookup. +.new +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 with +each element starting with a tag name and an equals. + +The only option currently supported requests an alternate output value of +the entire path for the entry. Example: +.code +${lookup {passwd} dsearch,ret=full {/etc}} +.endd +The default result is just the requested entry. + +The matching entry may be a file, directory, +symbolic link, or any other kind of directory entry. +.cindex "tainted data" "dsearch result" +The result is regarded as untainted. +.wen +An example of how this lookup can be used to support virtual domains is given in section &<>&. .next @@ -7007,7 +7041,11 @@ passed to a Redis database. See section &<>&. .next .cindex "sqlite lookup type" .cindex "lookup" "sqlite" -&(sqlite)&: The format of the query is a filename followed by an SQL statement +&(sqlite)&: The format of the query is +new +an optional filename +.wen +followed by an SQL statement that is passed to an SQLite database. See section &<>&. .next @@ -7914,6 +7952,11 @@ If any MySQL, PostgreSQL, Oracle, InterBase or Redis lookups are used, the or &%redis_servers%& option (as appropriate) must be set to a colon-separated list of server information. +.oindex &%mysql_servers%& +.oindex &%pgsql_servers%& +.oindex &%oracle_servers%& +.oindex &%ibase_servers%& +.oindex &%redis_servers%& (For MySQL and PostgreSQL, the global option need not be set if all queries contain their own server information &-- see section &<>&.) @@ -8051,17 +8094,31 @@ affected. .cindex "sqlite lookup type" SQLite is different to the other SQL lookups because a filename is required in addition to the SQL query. An SQLite database is a single file, and there is no -daemon as in the other SQL databases. The interface to Exim requires the name -of the file, as an absolute path, to be given at the start of the query. It is -separated from the query by white space. This means that the path name cannot -contain white space. Here is a lookup expansion example: -.code -${lookup sqlite {/some/thing/sqlitedb \ - select name from aliases where id='userx';}} +daemon as in the other SQL databases. + +.new +.oindex &%sqlite_dbfile%& +The preferred way of specifying the file is by using the +&%sqlite_dbfile%& option, set to +.wen +an absolute path. +A deprecated method is available, prefixing the query with the filename +separated by white space. +This means that the path name cannot contain white space. +.cindex "tainted data" "sqlite file" +It also means that the query cannot use any tainted values, as that taints +the entire query including the filename - resulting in a refusal to open +the file. + +Here is a lookup expansion example: +.code +sqlite_dbfile = /some/thing/sqlitedb +... +${lookup sqlite {select name from aliases where id='userx';}} .endd In a list, the syntax is similar. For example: .code -domainlist relay_to_domains = sqlite;/some/thing/sqlitedb \ +domainlist relay_to_domains = sqlite;\ select * from relays where ip='$sender_host_address'; .endd The only character affected by the &%quote_sqlite%& operator is a single @@ -14309,6 +14366,7 @@ listed in more than one group. .row &%daemon_startup_sleep%& "time to sleep between tries" .row &%extra_local_interfaces%& "not necessarily listened on" .row &%local_interfaces%& "on which to listen, with optional ports" +.row &%notifier_socket%& "override compiled-in value" .row &%pid_file_path%& "override compiled-in value" .row &%queue_run_max%& "maximum simultaneous queue runners" .endtable @@ -16382,6 +16440,24 @@ harm. This option overrides the &%pipe_as_creator%& option of the &(pipe)& transport driver. +.new +.option notifier_socket main string "$spool_directory/exim_daemon_notify" +This option gives the name for a unix-domain socket on which the daemon +listens for work and information-requests. +Only installations running multiple daemons sharing a spool directory +should need to modify the default. + +The option is expanded before use. +If the platform supports Linux-style abstract socket names, the result +is used with a nul byte prefixed. +Otherwise, it should be a full path name and use a directory accessible +to Exim. + +If the Exim command line uses a &%-oX%& option and does not use &%-oP%& +then a notifier socket is not created. +.wen + + .option openssl_options main "string list" "+no_sslv2 +no_sslv3 +single_dh_use +no_ticket +no_renegotiation" .cindex "OpenSSL "compatibility options" This option allows an administrator to adjust the SSL options applied @@ -20155,8 +20231,10 @@ semicolon is the default route list separator. .section "Format of one host item" "SECTformatonehostitem" -Each item in the list of hosts is either a host name or an IP address, -optionally with an attached port number. When no port is given, an IP address +Each item in the list of hosts can be either a host name or an IP address, +optionally with an attached port number, or it can be a single "+" +(see &%hosts_randomize%&). +When no port is given, an IP address is not enclosed in brackets. When a port is specified, it overrides the port specification on the transport. The port is separated from the name or address by a colon. This leads to some complications: @@ -33704,13 +33782,22 @@ The following list describes all expansion variables that are available in the MIME ACL: .vlist +.vitem &$mime_anomaly_level$& &&& + &$mime_anomaly_text$& +.vindex &$mime_anomaly_level$& +.vindex &$mime_anomaly_text$& +If there are problems decoding, these variables contain information on +the detected issue. + .vitem &$mime_boundary$& -If the current part is a multipart (see &$mime_is_multipart$&) below, it should +.vindex &$mime_boundary$& +If the current part is a multipart (see &$mime_is_multipart$& below), it should have a boundary string, which is stored in this variable. If the current part has no boundary parameter in the &'Content-Type:'& header, this variable contains the empty string. .vitem &$mime_charset$& +.vindex &$mime_charset$& This variable contains the character set identifier, if one was found in the &'Content-Type:'& header. Examples for charset identifiers are: .code @@ -33722,31 +33809,37 @@ Please note that this value is not normalized, so you should do matches case-insensitively. .vitem &$mime_content_description$& +.vindex &$mime_content_description$& This variable contains the normalized content of the &'Content-Description:'& header. It can contain a human-readable description of the parts content. Some implementations repeat the filename for attachments here, but they are usually only used for display purposes. .vitem &$mime_content_disposition$& +.vindex &$mime_content_disposition$& This variable contains the normalized content of the &'Content-Disposition:'& header. You can expect strings like &"attachment"& or &"inline"& here. .vitem &$mime_content_id$& +.vindex &$mime_content_id$& This variable contains the normalized content of the &'Content-ID:'& header. This is a unique ID that can be used to reference a part from another part. .vitem &$mime_content_size$& +.vindex &$mime_content_size$& This variable is set only after the &%decode%& modifier (see above) has been successfully run. It contains the size of the decoded part in kilobytes. The size is always rounded up to full kilobytes, so only a completely empty part has a &$mime_content_size$& of zero. .vitem &$mime_content_transfer_encoding$& +.vindex &$mime_content_transfer_encoding$& This variable contains the normalized content of the &'Content-transfer-encoding:'& header. This is a symbolic name for an encoding type. Typical values are &"base64"& and &"quoted-printable"&. .vitem &$mime_content_type$& +.vindex &$mime_content_type$& If the MIME part has a &'Content-Type:'& header, this variable contains its value, lowercased, and without any options (like &"name"& or &"charset"&). Here are some examples of popular MIME types, as they may appear in this variable: @@ -33761,6 +33854,7 @@ If the MIME part has no &'Content-Type:'& header, this variable contains the empty string. .vitem &$mime_decoded_filename$& +.vindex &$mime_decoded_filename$& This variable is set only after the &%decode%& modifier (see above) has been successfully run. It contains the full path and filename of the file containing the decoded data. @@ -33769,6 +33863,7 @@ containing the decoded data. .cindex "RFC 2047" .vlist .vitem &$mime_filename$& +.vindex &$mime_filename$& This is perhaps the most important of the MIME variables. It contains a proposed filename for an attachment, if one was found in either the &'Content-Type:'& or &'Content-Disposition:'& headers. The filename will be @@ -33779,6 +33874,7 @@ decoded, but no additional sanity checks are done. found, this variable contains the empty string. .vitem &$mime_is_coverletter$& +.vindex &$mime_is_coverletter$& This variable attempts to differentiate the &"cover letter"& of an e-mail from attached data. It can be used to clamp down on flashy or unnecessarily encoded content in the cover letter, while not restricting attachments at all. @@ -33811,18 +33907,22 @@ deny message = HTML mail is not accepted here condition = $mime_is_coverletter condition = ${if eq{$mime_content_type}{text/html}{1}{0}} .endd + .vitem &$mime_is_multipart$& +.vindex &$mime_is_multipart$& This variable has the value 1 (true) when the current part has the main type &"multipart"&, for example, &"multipart/alternative"& or &"multipart/mixed"&. Since multipart entities only serve as containers for other parts, you may not want to carry out specific actions on them. .vitem &$mime_is_rfc822$& +.vindex &$mime_is_rfc822$& This variable has the value 1 (true) if the current part is not a part of the checked message itself, but part of an attached message. Attached message decoding is fully recursive. .vitem &$mime_part_count$& +.vindex &$mime_part_count$& This variable is a counter that is raised for each processed MIME part. It starts at zero for the very first part (which is usually a multipart). The counter is per-message, so it is reset when processing RFC822 attachments (see @@ -36728,12 +36828,18 @@ to a router of this form: virtual: driver = redirect domains = dsearch;/etc/mail/virtual - data = ${lookup{$local_part}lsearch{/etc/mail/virtual/$domain}} + data = ${lookup{$local_part}lsearch{/etc/mail/virtual/$domain_data}} no_more .endd +.new The &%domains%& option specifies that the router is to be skipped, unless there is a file in the &_/etc/mail/virtual_& directory whose name is the same as the -domain that is being processed. When the router runs, it looks up the local +domain that is being processed. +The &(dsearch)& lookup used results in an untainted version of &$domain$& +being placed into the &$domain_data$& variable. +.wen + +When the router runs, it looks up the local part in the file to find a new address (or list of addresses). The &%no_more%& setting ensures that if the lookup fails (leading to &%data%& being an empty string), Exim gives up on the address without trying any subsequent routers.