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
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
.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
&<<SECTvirtualdomains>>&.
.next
.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 &<<SECTsqlite>>&.
.next
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
&<<SECTspeserque>>&.)
.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
.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
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
.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:
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
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:
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.
.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
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.
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
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.