comparison tests, the subaddress parameter, the &*copy*&, &*envelope*&,
&*fileinto*&, &*notify*&, and &*vacation*& extensions, but not the &*reject*&
extension.
-.new
Exim did not support message delivery notifications (MDNs) when Sieve handling
was introduced, so &*reject*& (which need them) could not be supported.
-.wen
In order for Sieve to work properly in Exim, the system administrator needs to
make some adjustments to the Exim configuration. These are described in the
-
. /////////////////////////////////////////////////////////////////////////////
. This is the primary source of the Exim Manual. It is an xfpt document that is
. converted into DocBook XML for subsequent conversion into printable and online
. Update the Copyright year (only) when changing content.
. /////////////////////////////////////////////////////////////////////////////
-.set previousversion "4.97"
+.set previousversion "4.98"
.include ./local_params
.set ACL "access control lists (ACLs)"
.set drivernamemax "64"
.macro copyyear
-2023
+2024
.endmacro
. /////////////////////////////////////////////////////////////////////////////
&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"
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'&>
.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.
-.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"
${lookup pgsql,servers=master/db/name/pw {UPDATE ...} }
.endd
-.new
A now-deprecated syntax places the servers specification before the query,
semicolon separated:
.code
including the server sepcification - 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.
-.wen
&*Note*&: server specifications in list-style lookups are still problematic.
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
For information on internationalisation support see &<<SECTi18nMTA>>&.
-.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
This option defines the ACL that is run when an SMTP VRFY command is
received. See chapter &<<CHAPACL>>& 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 &<<SECTWELLKNOWNACL>>& for further details.
-.wen
.option add_environment main "string list" empty
.cindex "environment" "set values"
-.new
.option limits_advertise_hosts main "host list&!!" *
.cindex LIMITS "suppressing advertising"
.cindex "ESMTP extensions" LIMITS
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
.option local_from_check main boolean true
.cindex "&'Sender:'& header line" "disabling addition of"
Non-SMTP messages with too many recipients are failed, and no deliveries are
done.
-.new
For SMTP message the expansion is done after the connection is
accepted (but before any SMTP conversation) and may depend on
the IP addresses and port numbers of the connection.
&*Note*&: If an expansion is used for the option,
care should be taken that a resonable value results for
non-SMTP messages.
-.wen
.cindex "RCPT" "maximum number of incoming"
&*Note*&: The RFCs specify that an SMTP server should accept at least 100
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 (&<<SECTWELLKNOWNACL>>&).
-.wen
.option write_rejectlog main boolean true
.cindex "reject log" "disabling"
.cindex "transports" "&(lmtp)&"
.cindex "&(lmtp)& transport"
.cindex "LMTP" "over a pipe"
-.cindex "LMTP" "over a socket"
+.cindex "LMTP" "over a unix-domain socket"
The &(lmtp)& transport runs the LMTP protocol (RFC 2033) over a pipe to a
specified command
or by interacting with a Unix domain socket.
For testing purposes, this value can be overridden by the &%-oB%& command line
option.
-.new
.cindex "ESMTP extensions" LIMITS
If the peer advertises a LIMITS extension with a MAILMAX value,
and either TLSS is in use or was not advertised,
that value also constrains the result of this option.
-.wen
.option dane_require_tls_ciphers smtp string&!! unset
During the expansion of this option the &$item$& variable will have the
server's EHLO response.
-.new
For TLS-on-connect connections we do not have an EHLO
response to use. Because of this the default value of this option is
set to a static string for those cases, meaning that resumption will
always be attempted if permitted by the &%tls_resumption_hosts%& option.
-.wen
The result of the option expansion is included in the key used to store and
retrieve the TLS session, for session resumption.
so can cause parallel connections to the same host if &%remote_max_parallel%&
permits this.
-.new
.cindex "ESMTP extensions" LIMITS
If the peer advertises a LIMITS extension with a RCPTMAX value,
and either TLSS is in use or was not advertised,
that value also constrains the result of this option
and no parallel connections will be caused on meeting the RCPTMAX limit.
-.wen
.option message_linelength_limit smtp integer 998
only messages having the domain used for the DANE TLSA lookup are
sent on the connection.
-.new
.cindex "ESMTP extensions" LIMITS
If the peer advertises a LIMITS extension with a RCPTDOMAINMAX value,
and either TLSS is in use or was not advertised,
this option is regarded as being false.
-.wen
.option port smtp string&!! "see below"
deliveries into closed message stores. Exim also has support for running LMTP
over a pipe to a local process &-- see chapter &<<CHAPLMTP>>&.
+&*Note*&: When using LMTP it should be considered whether the default values
+for some other features, such as DANE, are appropriate.
+
If this option is set to &"smtps"&, the default value for the &%port%& option
changes to &"smtps"&, and the transport initiates TLS immediately after
connecting, as an outbound SSL-on-connect, instead of using STARTTLS to upgrade.
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%&"
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
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.
to a-label form.
For details see section &<<SECTi18nMTA>>&.
-.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 &<<SECTWELLKNOWNACL>>&.
-.wen
.endlist vlist
filename, and the default path is then used.
.endlist
The &%decode%& condition normally succeeds. It is only false for syntax
-errors or unusual circumstances such as memory shortages. You can easily decode
-a file with its original, proposed filename using
-.code
-decode = $mime_filename
-.endd
-However, you should keep in mind that &$mime_filename$& might contain
-anything. If you place files outside of the default path, they are not
+errors or unusual circumstances such as memory shortages.
+The variable &$mime_filename$& will have the suggested name for the file.
+Note however that this might contain anything, and is very difficult
+to safely use as all or even part of the filename.
+If you place files outside of the default path, they are not
automatically unlinked.
For RFC822 attachments (these are messages attached to messages, with a
.cindex log "DKIM verification"
.cindex DKIM "verification logging"
&%dkim_verbose%&: A log entry is written for each attempted DKIM verification.
-.new
Also, on message delivery lines signing information (domain and selector)
is added, tagged with DKIM=.
-.wen
.next
.cindex "log" "dnslist defer"
.cindex "DNS list" "logging defer"
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.
-.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
.option dkim_timestamps smtp integer&!! unset
This option controls the inclusion of timestamp information in the signature.
If not set, no such information will be included.
-.new
Otherwise, must be an unsigned number giving an offset in seconds from the
current time for the expiry tag (e.g. 1209600 for two weeks); both creation
(t=) and expiry (x=) tags will be included unless the offset is 0 (no expiry).
-.wen
RFC 6376 lists these tags as RECOMMENDED.
ACL condition that checks a colon-separated list of possible DKIM verification
results against the actual result of verification,
given by &$dkim_verify_status$& if that is non-empty or "none" if empty.
-.new
This condition may be used in DKIM, MIME, PRDR and DATA ACLs.
-.wen
A basic verification might be:
.code
for more information of what they mean.
The condition is true if the status
-.new
(or any of the list of status values)
-.wen
is any one of the supplied list.
.endlist
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"
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
. ////////////////////////////////////////////////////////////////////////////
. ////////////////////////////////////////////////////////////////////////////
affect Exim's operation, with an unchanged configuration file. For new
options, and new features, see the NewStuff file next to this ChangeLog.
-Since version 4.98
-------------------
+Exim version 4.98
+-----------------
JH/01 Use fewer forks & execs for sending many messages to a single host.
By passing back more info from the transport to the delivery process,
JH/34 Fix delivery ordering for 2-phase queue run combined with
queue_run_in_order.
+JH/35 Bug 3099: fix parsing of MIME filename= split over multiple paramemters.
+ Previously the $mime_filename variable would have an incorrect value.
+ While in the code, extend coverage to name= which previously was only
+ supported for single parameters, despite also filling in $mime_filename.
+
Exim version 4.97
-----------------
* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) The Exim Maintainers 2022 - 2023 */
+/* Copyright (c) The Exim Maintainers 2022 - 2024 */
/* Copyright (c) University of Cambridge 1995 - 2018 */
/* See the file NOTICE for conditions of use and distribution. */
/* SPDX-License-Identifier: GPL-2.0-or-later */
* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) The Exim Maintainers 2022 */
+/* Copyright (c) The Exim Maintainers 2022 - 2024 */
/* Copyright (c) University of Cambridge 1995 - 2021 */
/* See the file NOTICE for conditions of use and distribution. */
/* SPDX-License-Identifier: GPL-2.0-or-later */
* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) The Exim Maintainers 2010 - 2022 */
+/* Copyright (c) The Exim Maintainers 2010 - 2024 */
/* Copyright (c) University of Cambridge 1995 - 2009 */
/* See the file NOTICE for conditions of use and distribution. */
/* SPDX-License-Identifier: GPL-2.0-or-later */
Argument: the name of the lock file
-Copyright (c) The Exim Maintainers 2016 - 2021
+Copyright (c) The Exim Maintainers 2016 - 2024
SPDX-License-Identifier: GPL-2.0-or-later
*/
uschar *verify_mode = NULL;
uschar *version_copyright =
US"Copyright (c) University of Cambridge, 1995 - 2018\n"
- "(c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2022";
+ "(c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2024";
uschar *version_date = US"?";
uschar *version_cnumber = US"????";
uschar *version_string = US"?";
# error USE_SQLITE conflict with alternate definition
# endif
# include "hintsdb/hints_sqlite.h"
-
#elif defined(USE_TDB)
+
# if defined(USE_DB) || defined(USE_GDBM) || defined(USE_SQLITE)
# error USE_TDB conflict with alternate definition
# endif
*************************************************/
/*
- * Copyright (c) The Exim Maintainers 2015 - 2023
+ * Copyright (c) The Exim Maintainers 2015 - 2024
* Copyright (c) Tom Kistner <tom@duncanthrax.net> 2004 - 2015
* License: GPL
* SPDX-License-Identifier: GPL-2.0-or-later
static mime_parameter mime_parameter_list[] = {
/* name namelen value */
- { US"name=", 5, &mime_filename },
- { US"filename=", 9, &mime_filename },
- { US"charset=", 8, &mime_charset },
- { US"boundary=", 9, &mime_boundary }
+ { US"name", 4, &mime_filename },
+ { US"filename", 8, &mime_filename },
+ { US"charset", 7, &mime_charset },
+ { US"boundary", 8, &mime_boundary }
};
if (*(p = q)) p++; /* jump past the ; */
{
- uschar * mime_fname = NULL;
- uschar * mime_fname_rfc2231 = NULL;
+ gstring * mime_fname = NULL;
+ gstring * mime_fname_rfc2231 = NULL;
uschar * mime_filename_charset = NULL;
BOOL decoding_failed = FALSE;
while (*p)
{
- DEBUG(D_acl) debug_printf_indent("MIME: considering paramlist '%s'\n", p);
-
- if ( !mime_filename
- && strncmpic(CUS"content-disposition:", header, 20) == 0
- && strncmpic(CUS"filename*", p, 9) == 0
- )
- { /* RFC 2231 filename */
- uschar * q;
-
- /* find value of the filename */
- p += 9;
- while(*p != '=' && *p) p++;
- if (*p) p++; /* p is filename or NUL */
- q = mime_param_val(&p); /* p now trailing ; or NUL */
-
- if (q && *q)
+ DEBUG(D_acl)
+ debug_printf_indent("MIME: considering paramlist '%s'\n", p);
+
+ /* look for interesting parameters */
+ for (mime_parameter * mp = mime_parameter_list;
+ mp < mime_parameter_list + nelem(mime_parameter_list);
+ mp++
+ ) if (strncmpic(mp->name, p, mp->namelen) == 0)
+ {
+ p += mp->namelen;
+ if (*p == '*') /* RFC 2231 */
{
- uschar * temp_string, * err_msg;
- int slen;
-
- /* build up an un-decoded filename over successive
- filename*= parameters (for use when 2047 decode fails) */
-
- mime_fname_rfc2231 = string_sprintf("%#s%s",
- mime_fname_rfc2231, q);
-
- if (!decoding_failed)
+ while (isdigit(*++p)) ; /* ignore cont-cnt values */
+ if (*p == '*') p++; /* step over sep chset mark */
+ if (*p == '=')
{
- int size;
- if (!mime_filename_charset)
- {
- uschar * s = q;
-
- /* look for a ' in the "filename" */
- while(*s != '\'' && *s) s++; /* s is 1st ' or NUL */
-
- if ((size = s-q) > 0)
- mime_filename_charset = string_copyn(q, size);
-
- if (*(p = s)) p++;
- while(*p == '\'') p++; /* p is after 2nd ' */
- }
- else
- p = q;
-
- DEBUG(D_acl) debug_printf_indent("MIME: charset %s fname '%s'\n",
- mime_filename_charset ? mime_filename_charset : US"<NULL>", p);
-
- temp_string = rfc2231_to_2047(p, mime_filename_charset, &slen);
- DEBUG(D_acl) debug_printf_indent("MIME: 2047-name %s\n", temp_string);
+ uschar * q;
+ p++; /* step over = */
+ q = mime_param_val(&p); /* p now trailing ; or NUL */
- temp_string = rfc2047_decode(temp_string, FALSE, NULL, ' ',
- NULL, &err_msg);
- DEBUG(D_acl) debug_printf_indent("MIME: plain-name %s\n", temp_string);
-
- if (!temp_string || (size = Ustrlen(temp_string)) == slen)
- decoding_failed = TRUE;
- else
- /* build up a decoded filename over successive
- filename*= parameters */
-
- mime_filename = mime_fname = mime_fname
- ? string_sprintf("%s%s", mime_fname, temp_string)
- : temp_string;
- }
+ if (q && *q) /* q is the dequoted value */
+ {
+ uschar * err_msg, * fname = q;
+ int slen;
+
+ /* build up an un-decoded filename over successive
+ filename*= parameters (for use when 2047 decode fails) */
+
+ mime_fname_rfc2231 = string_cat(mime_fname_rfc2231, q);
+
+ if (!decoding_failed)
+ {
+ if (!mime_filename_charset)
+ { /* try for RFC 2231 chset/lang */
+ uschar * s = q;
+
+ /* look for a ' in the raw paramval */
+ while(*s != '\'' && *s) s++; /* s is 1st ' or NUL */
+
+ if (*s) /* there was a ' */
+ {
+ int size;
+ if ((size = s-q) > 0)
+ mime_filename_charset = string_copyn(q, size);
+
+ if (*(fname = s)) fname++;
+ while(*fname == '\'') fname++; /*fname is after 2nd '*/
+ }
+ }
+
+ DEBUG(D_acl)
+ debug_printf_indent("MIME: charset %s fname '%s'\n",
+ mime_filename_charset ? mime_filename_charset : US"<NULL>",
+ fname);
+
+ fname = rfc2231_to_2047(fname, mime_filename_charset,
+ &slen);
+ DEBUG(D_acl)
+ debug_printf_indent("MIME: 2047-name %s\n", fname);
+
+ fname = rfc2047_decode(fname, FALSE, NULL, ' ',
+ NULL, &err_msg);
+ DEBUG(D_acl) debug_printf_indent(
+ "MIME: plain-name %s\n", fname);
+
+ if (!fname || Ustrlen(fname) == slen)
+ decoding_failed = TRUE;
+ else if (mp->value == &mime_filename)
+ {
+ /* build up a decoded filename over successive
+ filename*= parameters */
+
+ mime_fname = string_cat(mime_fname, fname);
+ mime_filename = string_from_gstring(mime_fname);
+ }
+ } /*!decoding_failed*/
+ } /*q*/
+
+ if (*p) p++; /* p is past ; */
+ goto param_done; /* done matching param names */
+ } /*2231 param coding extension*/
}
- }
-
- else
- /* look for interesting parameters */
- for (mime_parameter * mp = mime_parameter_list;
- mp < mime_parameter_list + nelem(mime_parameter_list);
- mp++
- ) if (strncmpic(mp->name, p, mp->namelen) == 0)
- {
- uschar * q;
- uschar * dummy_errstr;
+ else if (*p == '=')
+ { /* non-2231 param */
+ uschar * q, * dummy_errstr;
/* grab the value and copy to its expansion variable */
- p += mp->namelen;
+
+ if (*p) p++; /* step over = */
q = mime_param_val(&p); /* p now trailing ; or NUL */
*mp->value = q && *q
"MIME: found %s parameter in %s header, value '%s'\n",
mp->name, mh->name, *mp->value);
- break; /* done matching param names */
+ if (*p) p++; /* p is past ; */
+ goto param_done; /* done matching param names */
}
-
+ } /* interesting parameters */
/* There is something, but not one of our interesting parameters.
- Advance past the next semicolon */
+ Advance past the next semicolon */
+
p = mime_next_semicolon(p);
if (*p) p++;
- } /* param scan on line */
+ param_done: ;
+ } /* param scan on line */
if (strncmpic(CUS"content-disposition:", header, 20) == 0)
{
- if (decoding_failed) mime_filename = mime_fname_rfc2231;
+ if (decoding_failed)
+ mime_filename = string_from_gstring(mime_fname_rfc2231);
DEBUG(D_acl) debug_printf_indent(
"MIME: found %s parameter in %s header, value is '%s'\n",
"filename", mh->name, mime_filename);
}
}
- }
+ break;
+ } /* interesting headers */
/* set additional flag variables (easier access) */
if ( mime_content_type
#endif /*WITH_CONTENT_SCAN*/
-/* vi: sw ai sw=2
+/* vi: aw ai sw=2
*/
/*
* PDKIM - a RFC4871 (DKIM) implementation
- * Copyright (c) The Exim Maintainers 1995 - 2023
+ * Copyright (c) The Exim Maintainers 1995 - 2024
* SPDX-License-Identifier: GPL-2.0-or-later
*
* signing/verification interface
Precision: dot, followed by decimal digits or *
Length modifiers: h L l ll z
Conversion specifiers: n d o u x X p f e E g G % c s S T W V Y D M
+Alternate-form: %#s is silent about a null string
Returns the possibly-new (if copy for growth or taint-handling was needed)
string, not nul-terminated.
# endif
return FAIL;
}
+ else DEBUG(D_transport)
+ debug_printf("lack of DNSSEC traceability precludes DANE\n");
}
#endif /*DANE*/
warn_message_file = OPT
.endif
-delay_warning = 1s
+delay_warning = 2s
# ----- Routers -----
begin acl
check_recipient:
-.ifdef RETRY2
- drop condition = ${if eq {SERVER}{server}}
- message = 550 we really do not like you
-.endif
accept hosts = :
accept domains = +local_domains
deny message = relay not permitted
remote_smtp:
driver = smtp
-.ifdef RETRY2
- hosts = 127.0.0.1 : HOSTIPV4
-.else
hosts = 127.0.0.1
-.endif
port = PORT_S
hosts_try_fastopen = :
.ifdef _HAVE_TLS
--- /dev/null
+# Exim test configuration 1166
+SERVER=
+
+exim_path = EXIM_PATH
+keep_environment =
+add_environment = SSLKEYLOGFILE=DIR/spool/sslkeys
+host_lookup_order = bydns
+spool_directory = DIR/spool
+log_file_path = DIR/spool/log/SERVER%slog
+gecos_pattern = ""
+gecos_name = CALLER_NAME
+chunking_advertise_hosts = *
+tls_advertise_hosts = *
+.ifdef _HAVE_PIPE_CONNECT
+pipelining_connect_advertise_hosts = :
+.endif
+.ifdef _HAVE_DMARC
+dmarc_tld_file =
+.endif
+.ifdef _OPT_MAIN_LIMITS_ADVERTISE_HOSTS
+limits_advertise_hosts = !*
+.endif
+
+# ----- Main settings -----
+
+primary_hostname = testhost.test.ex
+domainlist local_domains = @ : test.ex
+
+acl_smtp_rcpt = check_recipient
+acl_smtp_data = check_data
+trusted_users = CALLER
+queue_only
+smtp_receive_timeout = 2s
+
+log_selector = +received_recipients +connection_id +millisec
+
+tls_certificate = DIR/aux-fixed/cert1
+
+# ----- ACL -----
+
+begin acl
+
+check_recipient:
+ drop condition = ${if eq {SERVER}{server}}
+ message = 550 we really do not like you
+ accept hosts = :
+ accept domains = +local_domains
+ deny message = relay not permitted
+
+check_data:
+ warn message = X-acl-message-linecount: $message_linecount
+ accept
+
+# ----- Routers -----
+
+begin routers
+
+to_server:
+ driver = accept
+ condition = ${if !eq {SERVER}{server}}
+ transport = remote_smtp
+ errors_to = ""
+
+#fail_remote_domains:
+# driver = redirect
+# domains = ! +local_domains
+# data = :fail: unrouteable mail domain "$domain"
+#
+#localuser:
+# driver = accept
+# check_local_user
+# transport = local_delivery
+# headers_add = X-local-user: uid=$local_user_uid gid=$local_user_gid
+
+
+# ----- Transports -----
+
+begin transports
+
+#local_delivery:
+# driver = appendfile
+# delivery_date_add
+# envelope_to_add
+# file = DIR/test-mail/$local_part
+# create_file = DIR/test-mail
+# headers_add = "X-body-linecount: $body_linecount\n\
+# X-message-linecount: $message_linecount\n\
+# X-received-count: $received_count"
+# return_path_add
+
+remote_smtp:
+ driver = smtp
+ hosts = 127.0.0.1 : HOSTIPV4
+ port = PORT_S
+ hosts_try_fastopen = :
+ tls_verify_certificates = DIR/aux-fixed/cert1
+ tls_verify_cert_hostnames =
+ allow_localhost
+ command_timeout = 2s
+ final_timeout = 2s
+
+# ----- Retry -----
+
+begin retry
+* * F,30m,5m;
+# End
-2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 <= sender@source.dom U=root Ci=p1235 P=local-bsmtp S=sss for a@test.ex
+2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 <= sender@source.dom U=root Ci=p1234 P=local-bsmtp S=sss for a@test.ex
2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 => a@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat"
2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 Completed
-2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 <= sender@source.dom U=root Ci=p1236 P=local-bsmtp S=sss for c@test.ex
+2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 <= sender@source.dom U=root Ci=p1235 P=local-bsmtp S=sss for c@test.ex
2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 => c@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat"
2017-07-30 18:51:05.712 10HmaY-000000005vi-0000 Completed
-2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 <= sender@source.dom U=root Ci=p1237 P=local-bsmtp S=sss for d@test.ex
+2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 <= sender@source.dom U=root Ci=p1236 P=local-bsmtp S=sss for d@test.ex
2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 ** d@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 550 unacceptable mail-from
2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 d@test.ex: error ignored
2017-07-30 18:51:05.712 10HmaZ-000000005vi-0000 Completed
-2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 <= sender@source.dom U=root Ci=p1238 P=local-bsmtp S=sss for c1@test.ex
+2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 <= sender@source.dom U=root Ci=p1237 P=local-bsmtp S=sss for c1@test.ex
2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 450 greylisted mail-from
2017-07-30 18:51:05.712 10HmbA-000000005vi-0000 == c1@test.ex R=to_server T=remote_smtp defer (-45) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 450 greylisted mail-from
-2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 <= sender@source.dom U=root Ci=p1239 P=local-bsmtp S=sss for e@test.ex
+2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 <= sender@source.dom U=root Ci=p1238 P=local-bsmtp S=sss for e@test.ex
2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 ** e@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<e@test.ex>: 550 no such recipient
2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 e@test.ex: error ignored
2017-07-30 18:51:05.712 10HmbB-000000005vi-0000 Completed
-2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 <= sender@source.dom U=root Ci=p1240 P=local-bsmtp S=sss for f1@test.ex
-2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 peer close after all rcpt responses; converting i/o-error to no-error
-2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 ** f1@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes: SMTP error from remote mail server after RCPT TO:<f1@test.ex>: 550 we really do not like you
-2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 f1@test.ex: error ignored
+2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 <= sender@source.dom U=root Ci=p1239 P=local-bsmtp S=sss for g@test.ex
+2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 ** g@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 500 oops bdat
+2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 g@test.ex: error ignored
2017-07-30 18:51:05.712 10HmbC-000000005vi-0000 Completed
-2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 <= sender@source.dom U=root Ci=p1241 P=local-bsmtp S=sss for g@test.ex
-2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 ** g@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 500 oops bdat
-2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 g@test.ex: error ignored
-2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 Completed
-2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 <= sender@source.dom U=root Ci=p1242 P=local-bsmtp S=sss for h@test.ex
-2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 400 not right now bdat
-2017-07-30 18:51:05.712 10HmbE-000000005vi-0000 == h@test.ex R=to_server T=remote_smtp defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 400 not right now bdat
-
-******** SERVER ********
-2017-07-30 18:51:05.712 exim x.yz daemon started: pid=p1243, no queue runs, listening for SMTP on port PORT_S
-2017-07-30 18:51:05.712 H=localhost (testhost.test.ex) [127.0.0.1] Ci=p1234 X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no F=<> rejected RCPT <f1@test.ex>: 550 we really do not like you
+2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 <= sender@source.dom U=root Ci=p1240 P=local-bsmtp S=sss for h@test.ex
+2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 400 not right now bdat
+2017-07-30 18:51:05.712 10HmbD-000000005vi-0000 == h@test.ex R=to_server T=remote_smtp defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 400 not right now bdat
--- /dev/null
+2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 <= sender@source.dom U=root Ci=p1235 P=local-bsmtp S=sss for f1@test.ex
+2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 peer close after all rcpt responses; converting i/o-error to no-error
+2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 ** f1@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes: SMTP error from remote mail server after RCPT TO:<f1@test.ex>: 550 we really do not like you
+2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 f1@test.ex: error ignored
+2017-07-30 18:51:05.712 10HmaX-000000005vi-0000 Completed
+
+******** SERVER ********
+2017-07-30 18:51:05.712 exim x.yz daemon started: pid=p1236, no queue runs, listening for SMTP on port PORT_S
+2017-07-30 18:51:05.712 H=localhost (testhost.test.ex) [127.0.0.1] Ci=p1234 X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no F=<> rejected RCPT <f1@test.ex>: 550 we really do not like you
1999-03-02 09:44:33 10HmbE-000000005vi-0000 => userx <userx@test.ex> R=r1 T=t1
1999-03-02 09:44:33 10HmbE-000000005vi-0000 Completed
1999-03-02 09:44:33 10HmaX-000000005vi-0000 U=CALLER F=<CALLER@myhost.test.ex> rejected during MIME ACL checks: this is a deny from the mime acl
+1999-03-02 09:44:33 10HmbF-000000005vi-0000 <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss T="Bug 3099 (2)"
+1999-03-02 09:44:33 10HmbF-000000005vi-0000 => userx <userx@test.ex> R=r1 T=t1
+1999-03-02 09:44:33 10HmbF-000000005vi-0000 Completed
--- /dev/null
+1999-03-02 09:44:33 U=CALLER F=<CALLER@test.ex> temporarily rejected RCPT <t@daneservfail.test.ex>: Could not complete recipient verify callout: daneservfail.test.ex [127.0.0.1] : DANE error: tlsa lookup DEFER
--T4sUOijqQbZv57TR--
+From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999
+Received: from CALLER (helo=test.ex)
+ by myhost.test.ex with local-esmtp (Exim x.yz)
+ (envelope-from <CALLER@myhost.test.ex>)
+ id 10HmbF-000000005vi-0000
+ for userx@test.ex;
+ Tue, 2 Mar 1999 09:44:33 +0000
+From: localpart@test.example
+To: localpart@test.example
+Subject: Bug 3099 (2)
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----=_MIME_BOUNDARY_000_695039"
+Message-Id: <E10HmbF-000000005vi-0000@myhost.test.ex>
+Sender: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+X-0-content-type: multipart/mixed
+X-0-filename:
+X-0-charset:
+X-0-boundary: ----=_MIME_BOUNDARY_000_695039
+X-0-content-disposition:
+X-0-content-transfer-encoding:
+X-0-content-id:
+X-0-content-description:
+X-0-is-multipart: 1
+X-0-is-coverletter: 1
+X-0-is-rfc822: 0
+X-0-decode-filename: TESTSUITE/spool/scan/10HmbF-000000005vi-0000/10HmbF-000000005vi-0000-00000
+X-0-content-size: 1
+X-1-content-type: text/plain
+X-1-filename:
+X-1-charset:
+X-1-boundary:
+X-1-content-disposition:
+X-1-content-transfer-encoding:
+X-1-content-id:
+X-1-content-description:
+X-1-is-multipart: 0
+X-1-is-coverletter: 1
+X-1-is-rfc822: 0
+X-1-decode-filename: TESTSUITE/spool/scan/10HmbF-000000005vi-0000/10HmbF-000000005vi-0000-00001
+X-1-content-size: 1
+X-2-content-type: application/octet-stream
+X-2-filename: example3.exe
+X-2-charset:
+X-2-boundary:
+X-2-content-disposition: attachment
+X-2-content-transfer-encoding: base64
+X-2-content-id:
+X-2-content-description:
+X-2-is-multipart: 0
+X-2-is-coverletter: 0
+X-2-is-rfc822: 0
+X-2-decode-filename: TESTSUITE/spool/scan/10HmbF-000000005vi-0000/10HmbF-000000005vi-0000-00002
+X-2-content-size: 1
+X-3-content-type: application/octet-stream
+X-3-filename: example4.txt
+X-3-charset:
+X-3-boundary:
+X-3-content-disposition: attachment
+X-3-content-transfer-encoding: base64
+X-3-content-id:
+X-3-content-description:
+X-3-is-multipart: 0
+X-3-is-coverletter: 0
+X-3-is-rfc822: 0
+X-3-decode-filename: TESTSUITE/spool/scan/10HmbF-000000005vi-0000/10HmbF-000000005vi-0000-00003
+X-3-content-size: 1
+
+------=_MIME_BOUNDARY_000_695039
+Content-Type: text/plain
+
+This is a test mailing
+------=_MIME_BOUNDARY_000_695039
+Content-Type: application/octet-stream
+Content-Disposition: attachment;
+ filename*0*="example3";
+ filename*1*=".exe"
+Content-Transfer-Encoding: BASE64
+
+QmVpc3BpZWwK
+
+------=_MIME_BOUNDARY_000_695039
+Content-Type: application/octet-stream
+Content-Disposition: attachment;
+ name*0="example4";
+ name*1=".txt"
+Content-Transfer-Encoding: BASE64
+
+QmVpc3BpZWwK
+
+------=_MIME_BOUNDARY_000_695039--
+
+++ /dev/null
-
-******** SERVER ********
-2017-07-30 18:51:05.712 H=localhost (testhost.test.ex) [127.0.0.1] Ci=p1234 X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no F=<> rejected RCPT <f1@test.ex>: 550 we really do not like you
--- /dev/null
+
+******** SERVER ********
+2017-07-30 18:51:05.712 H=localhost (testhost.test.ex) [127.0.0.1] Ci=p1234 X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no F=<> rejected RCPT <f1@test.ex>: 550 we really do not like you
--- /dev/null
+1999-03-02 09:44:33 U=CALLER F=<CALLER@test.ex> temporarily rejected RCPT <t@daneservfail.test.ex>: Could not complete recipient verify callout: daneservfail.test.ex [127.0.0.1] : DANE error: tlsa lookup DEFER
my($date1,$date2,$date3,$expired) = ($1,$2,$3,$4);
$expired = '' if !defined $expired;
- # Round the time-difference up to nearest even value
- my($increment) = ((date_seconds($date3) - date_seconds($date2) + 1) >> 1) << 1;
+ # Make time-difference minimum 2, and rounded up to even value
+ my($increment) = date_seconds($date3) - date_seconds($date2) + 1;
+ $increment = 2 if ($increment == 0);
+ $increment = ($increment >> 1) << 1;
# We used to use globally unique replacement values, but timing
# differences make this impossible. Just show the increment on the
s/(TLS error on connection from .* \(SSL_\w+\): error:)(.*)/$1 <<detail omitted>>/;
next if /SSL verify error: depth=0 error=certificate not trusted/;
+ # OpenSSL 3.2.1
# OpenSSL 3.0.0
- s/TLS error \(D-H param setting .* error:\K.*dh key too small/xxxxxxxx:SSL routines::dh key too small/;
+ s/TLS\ error\ \(D-H\ param\ setting\ .*\ error:\K
+ .*
+ (?:dh\ key\ too\ small|unknown\ security\ bits)
+ /xxxxxxxx:SSL routines::dh key too small/x;
# OpenSSL 1.1.1
s/error:\K0B080074:x509 certificate routines:X509_check_private_key(?=:key values mismatch$)/05800074:x509 certificate routines:/;
# Hints DB use of lockfiles is provider-dependent
s/Failed to open \K(?:hintsdb|database lock) file (.*\/spool\/db\/[^. ]*)(?:.lockfile)?(?: for reading)?(?=: No such file or directory$)/hintsdb $1/;
-
# openssl version variances
# Error lines on stdout from SSL contain process id values and file names.
# They also contain a source file name and line number, which may vary from
next if /SSL verify error: depth=0 error=certificate not trusted/;
s/SSL3_READ_BYTES/ssl3_read_bytes/i;
s/CONNECT_CR_FINISHED/ssl3_read_bytes/i;
- s/^[[:xdigit:]]+:error:[[:xdigit:]]+(?:E[[:xdigit:]]+)?(:SSL routines:ssl3_read_bytes:[^:]+:).*(:SSL alert number \d\d)$/pppp:error:dddddddd$1\[...\]$2/;
+ s/^[[:xdigit:]]+:error:[[:xdigit:]]+(?:E[[:xdigit:]]+)?
+ (:SSL\ routines:ssl3_read_bytes:)
+ ssl(?:v3|\/tls)
+ ([^:]+:)
+ .*
+ (:SSL\ alert\ number\ \d\d)$
+ /pppp:error:dddddddd$1sslv3$2\[...\]$3/x;
s/^error:\K[^:]*:(SSL routines:ssl3_read_bytes:(tls|ssl)v\d+ alert)/dddddddd:$1/;
s/^error:\K[[:xdigit:]]+:SSL routines::(tlsv13 alert certificate required)$/dddddddd:SSL routines:ssl3_read_bytes:$1/;
- s/^error:\K[[:xdigit:]]+:SSL routines::((tlsv1|sslv3) alert (unknown ca|certificate revoked))$/dddddddd:SSL routines:ssl3_read_bytes:$1/;
+ s/^error:\K
+ [[:xdigit:]]+:SSL\ routines::
+ ((?:tlsv1|sslv3)\ alert\ (?:unknown\ ca|certificate\ revoked))$
+ /dddddddd:SSL routines:ssl3_read_bytes:$1/x;
+ s/^error:\K
+ [[:xdigit:]]+:SSL\ routines::
+ ssl\/tls\ (alert\ (?:unknown\ ca|certificate\ revoked))$
+ /dddddddd:SSL routines:ssl3_read_bytes:sslv3 $1/x;
# gnutls version variances
next if /^Error in the pull function./;
next if /in\s(?:tls_advertise_hosts\?|hosts_require_tls\?)
\sno\s\((option\sunset|end\sof\slist)\)/x;
+ # non-TLS builds cannot have DANE
+
+ next if /lack of DNSSEC traceability precludes DANE$/;
+
# Skip auxiliary group lists because they will vary.
next if /auxiliary group list:/;
exim -odf -DOPT='${if ={0}{0} {DIR/aux-fixed/TESTNUM.bounce.tmpl}{bad}}' delay_s@test.ex
Subject: test 2.7 - Specified, expansion good
****
-sleep 1
+# Wait past the delay_warning interval
+sleep 3
exim -M $msg1
****
exim -DOPT=DIR/aux-fixed/TESTNUM.bounce.tmpl -M $msg2
****
exim -DOPT=DIR/aux-fixed/TESTNUM.bounce.tmpl -M $msg4
****
-sleep 1
+#sleep 1
#
#
no_msglog_check
QUIT
****
#
-# server rejects RCPT cmd, and immediately drops the TCP conn
-sudo rm DIR/spool/db/retry
-exim -bd -DSERVER=server -DRETRY2 -DSRV=tls -oX PORT_S
-****
-sudo exim -DRETRY2 -odf -bS
-EHLO test
-MAIL FROM:<sender@source.dom>
-RCPT TO:<f1@test.ex>
-DATA
-Subject: foo
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
-
-data
-.
-QUIT
-****
-killdaemon
#
# server rejects BDAT cmd
server PORT_S
--- /dev/null
+# TLS client, CHUNKING, server rejects RCPT and drops TCP
+#
+#
+exim -bd -DSERVER=server -oX PORT_S
+****
+sudo exim -odf -bS
+EHLO test
+MAIL FROM:<sender@source.dom>
+RCPT TO:<f1@test.ex>
+DATA
+Subject: foo
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+BigHeader_500: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345
+
+data
+.
+QUIT
+****
+killdaemon
+#
+no_msglog_check
.
quit
****
+#
+#
+# Filename using parameter value continuation (RFC 2231 sec. 3)
+#
+exim -odi -bs
+ehlo test.ex
+mail from:<>
+rcpt to:<userx@test.ex>
+data
+From: localpart@test.example
+To: localpart@test.example
+Subject: Bug 3099 (2)
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----=_MIME_BOUNDARY_000_695039"
+
+------=_MIME_BOUNDARY_000_695039
+Content-Type: text/plain
+
+This is a test mailing
+------=_MIME_BOUNDARY_000_695039
+Content-Type: application/octet-stream
+Content-Disposition: attachment;
+ filename*0*="example3";
+ filename*1*=".exe"
+Content-Transfer-Encoding: BASE64
+
+QmVpc3BpZWwK
+
+------=_MIME_BOUNDARY_000_695039
+Content-Type: application/octet-stream
+Content-Disposition: attachment;
+ name*0="example4";
+ name*1=".txt"
+Content-Transfer-Encoding: BASE64
+
+QmVpc3BpZWwK
+
+------=_MIME_BOUNDARY_000_695039--
+.
+quit
+****
354 Enter message, ending with "." on a line by itself\r
550 this is a deny from the mime acl\r
221 myhost.test.ex closing connection\r
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250-myhost.test.ex Hello CALLER at test.ex\r
+250-SIZE 52428800\r
+250-LIMITS MAILMAX=1000 RCPTMAX=50000\r
+250-8BITMIME\r
+250-PIPELINING\r
+250 HELP\r
+250 OK\r
+250 Accepted\r
+354 Enter message, ending with "." on a line by itself\r
+250 OK id=10HmbF-000000005vi-0000\r
+221 myhost.test.ex closing connection\r
--- /dev/null
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250 myhost.test.ex Hello CALLER at test\r
+250 OK\r
+451 Could not complete recipient verify callout\r
+221 myhost.test.ex closing connection\r