-.section "Dynamically loaded lookup module support" "SECTdynamicmodules"
+.section "Dynamically loaded module support" "SECTdynamicmodules"
.cindex "lookup modules"
+.cindex "router modules"
+.cindex "transport modules"
+.cindex "authenticator modules"
.cindex "dynamic modules"
.cindex ".so building"
On some platforms, Exim supports not compiling all lookup types directly into
the main binary, instead putting some into external modules which can be loaded
on demand.
This permits packagers to build Exim with support for lookups with extensive
-library dependencies without requiring all users to install all of those
+library dependencies without requiring all systems to install all of those
dependencies.
-Most, but not all, lookup types can be built this way.
+.new
+Any combination of lookup types can be built this way.
+All of the lookup modules found as an Exim process starts will be loaded.
+.wen
-Set &`LOOKUP_MODULE_DIR`& to the directory into which the modules will be
+For building
+set &`LOOKUP_MODULE_DIR`& to the directory into which the modules will be
installed; Exim will only load modules from that directory, as a security
measure. You will need to set &`CFLAGS_DYNAMIC`& if not already defined
for your OS; see &_OS/Makefile-Linux_& for an example.
Then, for each module to be loaded dynamically, define the relevant
&`LOOKUP_`&<&'lookup_type'&> flags to have the value "2" instead of "yes".
For example, this will build in lsearch but load sqlite and mysql support
-on demand:
+only if each is installed:
.code
LOOKUP_LSEARCH=yes
LOOKUP_SQLITE=2
LOOKUP_MYSQL=2
.endd
+Set also &`LOOKUP_`&<&'lookup_type'&>&` INCLUDE`& and
+&`LOOKUP_`&<&'lookup_type'&>`_LIBS if needed for each lookup type,
+ensuring that duplicates are not present in more global values.
+
+.new
+Similarly, authenticator, router and transport drivers can be built
+as external modules.
+Modules will be searched for as demanded by the runtime configuration,
+permitting a smaller Exim binary.
+
+For building, as above but using
+&`AUTH_*`&, &`ROUTER_*`& and &`TRANSPORT_*`& instead of &`LOOKUP_*`&,
+.wen
.section "The building process" "SECID29"
The new version avoids issues with tainted
arguments explicitly expanded as part of the query.
The entire string within the braces becomes tainted,
-including the server sepcification - which is not permissible.
+including the server specification - which is not permissible.
If the older sytax is used, a warning message will be logged.
This syntax will be removed in a future release.
.vindex "&$config_file$&"
The name of the main configuration file Exim is using.
+.vitem &$connection_id$&
+.vindex "&$connection_id$&"
+.cindex connection "identifier logging"
+An identifier for the accepted connection, for use in custom logging.
+
.vitem &$dkim_verify_status$&
Results of DKIM verification.
For details see section &<<SECDKIMVFY>>&.
.cindex "underscore in EHLO/HELO"
This option can be set to a string of rogue characters that are permitted in
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,
+hyphens, and dots. For example if you really must allow underscores,
you can set
.code
helo_allow_chars = _
.cindex "ESMTP extensions" LIMITS
This option can be used to suppress the advertisement of the SMTP
LIMITS extension (RFC 9422) to specific hosts.
-If permitted, Exim as a servier will advertise in the EHLO response
+If permitted, Exim as a server 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.
The SMTP service extension keyword advertised is &"PIPECONNECT"&;
it permits the client to pipeline
-TCP connection and hello command (inclear phase),
+TCP connection and hello command (cleatext phase),
or TLS-establishment and hello command (encrypted phase),
on later connections to the same host.
.vitem &*void&~debug_printf(char&~*,&~...)*&
-This is Exim's debugging function, with arguments as for &'(printf()'&. The
+This is Exim's debugging function, with arguments as for &'printf()'&. The
output is written to the standard error stream. If no debugging is selected,
calls to &'debug_printf()'& have no effect. Normally, you should make calls
conditional on the &`local_scan`& debug selector by coding like this:
between the caller and Exim.
.next
.cindex log "connection identifier"
-.cindec connection "indentifier logging"
+.cindex connection "identifier logging"
&%connection_id%&: An identifier for the accepted connection is added to
connection start and end lines and to message accept lines.
The identifier is tagged by Ci=.
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:
.itable all 0 0 4 25* left 10* center 15* center 50* left
.row auth:fail after both "per driver per authentication attempt"
.row tls:fail:connect after main "per connection"
.row smtp:connect after transport "per connection"
.row smtp:ehlo after transport "per connection"
+.row smtp:fail:protocol after main "per connection"
+.row smtp:fail:syntax after main "per connection"
.endtable
+.wen
New event types may be added in future.
The event name is a colon-separated list, defining the type of
An additional variable, &$event_data$&, is filled with information varying
with the event type:
+.new
.itable all 0 0 2 20* left 80* left
.row auth:fail "smtp response"
.row dane:fail "failure reason"
.row tls:fail:connect "error string"
.row smtp:connect "smtp banner"
.row smtp:ehlo "smtp ehlo response"
+.row smtp:fail:protocol "error string"
+.row smtp:fail:syntax "error string"
.endtable
+.wen
The :defer events populate one extra variable: &$event_defer_errno$&.