Merge branch '4.next'
authorJeremy Harris <jgh146exb@wizmail.org>
Thu, 11 Jul 2024 18:18:13 +0000 (19:18 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Thu, 11 Jul 2024 18:18:13 +0000 (19:18 +0100)
31 files changed:
doc/doc-docbook/filter.xfpt
doc/doc-docbook/spec.xfpt
doc/doc-txt/ChangeLog
src/src/buildconfig.c
src/src/dbfunctions.h
src/src/directory.c
src/src/exim_lock.c
src/src/globals.c
src/src/hintsdb.h
src/src/mime.c
src/src/pdkim/signing.c
src/src/string.c
src/src/transports/smtp.c
test/confs/0608
test/confs/0900
test/confs/1166 [new file with mode: 0644]
test/log/0905
test/log/1166 [new file with mode: 0644]
test/log/4000
test/log/5803 [new file with mode: 0644]
test/mail/4000.userx
test/rejectlog/0905 [deleted file]
test/rejectlog/1166 [new file with mode: 0644]
test/rejectlog/5803 [new file with mode: 0644]
test/runtest
test/scripts/0000-Basic/0608
test/scripts/0000-Basic/0905
test/scripts/1100-Basic-TLS/1166 [new file with mode: 0644]
test/scripts/4000-scanning/4000
test/stdout/4000
test/stdout/5803 [new file with mode: 0644]

index c1e1d8fce28c455285f3713ef968629e736e3d33..77b295ce9b2b4e12d61e42faa3353f6d5b1ad2e7 100644 (file)
@@ -286,10 +286,8 @@ The Exim Sieve implementation offers the core as defined by RFC 3028,
 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
index 202c2765954dbe6d5dfe4a3d5804131904569b3a..9a52502d25a63dbde91e308424835722590dc5bc 100644 (file)
@@ -1,4 +1,3 @@
-
 . /////////////////////////////////////////////////////////////////////////////
 . 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
@@ -46,7 +45,7 @@
 . 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)"
@@ -55,7 +54,7 @@
 .set drivernamemax "64"
 
 .macro copyyear
-2023
+2024
 .endmacro
 
 . /////////////////////////////////////////////////////////////////////////////
@@ -1806,10 +1805,8 @@ 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"
@@ -2893,11 +2890,9 @@ 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'&>
@@ -6853,9 +6848,7 @@ by default, but has an option to omit them (see section &<<SECTdbmbuild>>&).
 .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"
@@ -8180,7 +8173,6 @@ option, you can still update it by a query of this form:
 ${lookup pgsql,servers=master/db/name/pw {UPDATE ...} }
 .endd
 
-.new
 A now-deprecated syntax places the servers specification before the query,
 semicolon separated:
 .code
@@ -8192,7 +8184,6 @@ The entire string within the braces becomes tainted,
 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.
 
@@ -8221,10 +8212,8 @@ 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
@@ -11594,14 +11583,12 @@ These convert EAI mail name components between UTF-8 and a-label forms.
 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
 
 
 
@@ -15264,12 +15251,10 @@ received. See chapter &<<CHAPACL>>& for further details.
 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"
@@ -16615,7 +16600,6 @@ has been built with LDAP support.
 
 
 
-.new
 .option limits_advertise_hosts main "host list&!!" *
 .cindex LIMITS "suppressing advertising"
 .cindex "ESMTP extensions" LIMITS
@@ -16625,7 +16609,6 @@ 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
 
 .option local_from_check main boolean true
 .cindex "&'Sender:'& header line" "disabling addition of"
@@ -17541,14 +17524,12 @@ all recipients over the limit; earlier recipients are delivered as normal.
 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
@@ -18942,13 +18923,11 @@ 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 (&<<SECTWELLKNOWNACL>>&).
-.wen
 
 .option write_rejectlog main boolean true
 .cindex "reject log" "disabling"
@@ -24588,7 +24567,7 @@ when the message is specified by the transport.
 .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.
@@ -25445,12 +25424,10 @@ over a single TCP/IP connection. If the value is zero, there is no limit.
 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
@@ -25675,12 +25652,10 @@ suffices for one known case.
 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.
@@ -26028,13 +26003,11 @@ each set of addresses is treated independently, and
 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
@@ -26067,12 +26040,10 @@ If the connection is DANE-enabled then this option is ignored;
 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"
@@ -26108,6 +26079,9 @@ protocol (RFC 2033) instead of SMTP. This protocol is sometimes used for local
 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.
@@ -30892,7 +30866,6 @@ 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%&"
@@ -30945,7 +30918,6 @@ 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
@@ -31120,9 +31092,7 @@ when the ACL is not defined is &"accept"&.
 
 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.
@@ -32232,12 +32202,10 @@ This control enables conversion of UTF-8 in message envelope addresses
 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
 
 
@@ -35227,13 +35195,11 @@ If the string does not start with a slash, it is used as the
 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
@@ -39393,10 +39359,8 @@ verifies successfully a tag of DKIM is added, with one of the verified domains.
 .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"
@@ -41744,10 +41708,8 @@ Exim's DKIM implementation allows for
 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
@@ -41955,11 +41917,9 @@ name will be appended.
 .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.
 
@@ -42233,9 +42193,7 @@ for that check for empty &$h_DKIM-Signature:$& in the data ACL.
 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
@@ -42257,9 +42215,7 @@ see the documentation of the &%$dkim_verify_status%& expansion variable above
 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
 
@@ -43143,9 +43099,7 @@ 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"
@@ -43233,10 +43187,8 @@ 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
 
 . ////////////////////////////////////////////////////////////////////////////
 . ////////////////////////////////////////////////////////////////////////////
index 2965c7c658053b9e19f480d38d02def30e48424f..fadb4995a6a0616272b4a4a6dae5a0922d48e399 100644 (file)
@@ -2,8 +2,8 @@ This document describes *changes* to previous versions, that might
 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,
@@ -181,6 +181,11 @@ JH/33 Bug 2994: A subdir dsearch lookup should permit a directory name that star
 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
 -----------------
index bfd267929814f8990b4c47d4187b6ef42eef0169..e594bf6f289f71d596e19bbaa21c634cb5aec136 100644 (file)
@@ -2,7 +2,7 @@
 *     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 */
index 64d82a024431417de3df2b0f853dc37c5a76d3bb..0aa3b777cd3932d97abb6975c79c7f9ebb700671 100644 (file)
@@ -2,7 +2,7 @@
 *     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 */
index 876d097b51551ea8b3018b783dbea3a293fa0a1b..84646b4b3017396f58188ee7c01feee7ec57bc43 100644 (file)
@@ -2,7 +2,7 @@
 *     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 */
index b37f962d284883f0e08af15e7bb370158b5a153a..070dfd780710f4d80f32b9ae79ae693dfacf8b29 100644 (file)
@@ -10,7 +10,7 @@ Default is -fcntl -lockfile.
 
 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
 */
 
index 0f7f5a217e33eeddb274ff029af167ee239234f7..a4b142bc04420a59e2b412d52183445ea9d1753e 100644 (file)
@@ -1669,7 +1669,7 @@ uschar *uucp_from_sender       = US"$1";
 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"?";
index f20b07ce2ac0b540f5d490a150ef4d0f12745259..ba50ae1b976bfd75b4224d0ebb5cc064283cfc0c 100644 (file)
@@ -72,8 +72,8 @@ required by Exim's process transitions)?
 #  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
index 975ddca857b24256be218e5497e08ef0819b1013..b9442af23c50b05013dfbb9eb42194444ef510ab 100644 (file)
@@ -3,7 +3,7 @@
 *************************************************/
 
 /*
- * 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
@@ -30,10 +30,10 @@ static int mime_header_list_size = nelem(mime_header_list);
 
 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 }
 };
 
 
@@ -577,8 +577,8 @@ while(1)
       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;
 
@@ -587,86 +587,95 @@ while(1)
 
        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
@@ -677,26 +686,31 @@ while(1)
                "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
@@ -800,5 +814,5 @@ return rc;
 
 #endif /*WITH_CONTENT_SCAN*/
 
-/* vi: sw ai sw=2
+/* vi: aw ai sw=2
 */
index b4754c1a1022fdb9bed69b1d8bbb37835af269af..b564fb9299d670b0647474db529ba53d354774cd 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  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
index 113c05754ba8f39aba7b658fdb7559b7c9113af6..aa768d03c8f0c528cac7113c92575de3849b821e 100644 (file)
@@ -1342,6 +1342,7 @@ Field width:              decimal digits, or *
 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.
index 3780f5ca929b4a84ebde3643b1d6916c9d6570f5..581e94f76e3cb534d3ce376f2ec44c2bb00c995a 100644 (file)
@@ -2316,6 +2316,8 @@ if (!continue_hostname)
 # endif
       return FAIL;
       }
+      else DEBUG(D_transport)
+       debug_printf("lack of DNSSEC traceability precludes DANE\n");
     }
 #endif /*DANE*/
 
index a2ec1be27a849e4aa79f97e5814ca67bd268178f..34638d2e89104371c37774b2898a60a10faa8ae1 100644 (file)
@@ -15,7 +15,7 @@ bounce_message_file = OPT
 warn_message_file = OPT
 .endif
 
-delay_warning =        1s
+delay_warning =        2s
 
 # ----- Routers -----
 
index 80c0211a936743bd1e85005703aa6a5f8c07b365..219751ec16d8ff2171a6f8eb01f8fc482cff65fd 100644 (file)
@@ -57,10 +57,6 @@ ALLOW
 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
@@ -112,11 +108,7 @@ local_delivery:
 
 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
diff --git a/test/confs/1166 b/test/confs/1166
new file mode 100644 (file)
index 0000000..1f43976
--- /dev/null
@@ -0,0 +1,106 @@
+# 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
index d53fe9dbf827b47d06c234b44815a646fc72f2ff..1bda25abce22ee7c3c7d64dd3934ca81d9f0ffb4 100644 (file)
@@ -1,33 +1,24 @@
-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
diff --git a/test/log/1166 b/test/log/1166
new file mode 100644 (file)
index 0000000..db58a43
--- /dev/null
@@ -0,0 +1,9 @@
+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
index 4aed68039382725c5c1975b2860beb5d534983d0..912a32a1a23f491d8f00542f73b70bbee929517d 100644 (file)
@@ -20,3 +20,6 @@
 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
diff --git a/test/log/5803 b/test/log/5803
new file mode 100644 (file)
index 0000000..61e3565
--- /dev/null
@@ -0,0 +1 @@
+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
index 569813066a599bc89daf6978e8fa80ad3073a85a..99f71010c5ca9ffdd0d9c06990fc3361c8fe2167 100644 (file)
@@ -406,3 +406,95 @@ foobar
 
 --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--
+
diff --git a/test/rejectlog/0905 b/test/rejectlog/0905
deleted file mode 100644 (file)
index d1aa48b..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-******** 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
diff --git a/test/rejectlog/1166 b/test/rejectlog/1166
new file mode 100644 (file)
index 0000000..d1aa48b
--- /dev/null
@@ -0,0 +1,3 @@
+
+******** 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
diff --git a/test/rejectlog/5803 b/test/rejectlog/5803
new file mode 100644 (file)
index 0000000..61e3565
--- /dev/null
@@ -0,0 +1 @@
+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
index d550998b76dcb707436657703f453a5dddf1b60d..2264d801472bffde992534895511bec5e111b7b7 100755 (executable)
@@ -495,8 +495,10 @@ RESET_AFTER_EXTRA_LINE_READ:
     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
@@ -963,8 +965,12 @@ RESET_AFTER_EXTRA_LINE_READ:
   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:/;
@@ -1058,7 +1064,6 @@ RESET_AFTER_EXTRA_LINE_READ:
     # 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
@@ -1068,10 +1073,23 @@ RESET_AFTER_EXTRA_LINE_READ:
     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./;
@@ -1349,6 +1367,10 @@ RESET_AFTER_EXTRA_LINE_READ:
     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:/;
index f3016f2cfd0d2d871116d265e3c0d7f990f7794d..a3065d097f4cdd8f4f6bfcda18cddda952d6771e 100644 (file)
@@ -34,7 +34,8 @@ Subject: test 2.3 - Specified, missing delay message file
 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
@@ -43,7 +44,7 @@ exim -DOPT=DIR/aux-fixed/TESTNUM.nonexist.tmpl -M $msg3
 ****
 exim -DOPT=DIR/aux-fixed/TESTNUM.bounce.tmpl -M $msg4
 ****
-sleep 1
+#sleep 1
 #
 #
 no_msglog_check
index 390b19c2ed39f9cf3b8bfddb79f8ae6c4657c2f1..baeecc2adc41b23b86736832fa26b6147559ee11 100644 (file)
@@ -182,40 +182,6 @@ data
 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
diff --git a/test/scripts/1100-Basic-TLS/1166 b/test/scripts/1100-Basic-TLS/1166
new file mode 100644 (file)
index 0000000..033e8d6
--- /dev/null
@@ -0,0 +1,37 @@
+# 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
index 623c5420f014ccf25de2a7686ead7049425df319..b10f13d00c5d8d8e130c96c9f557e5175962f728 100644 (file)
@@ -272,3 +272,44 @@ foobar
 .
 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
+****
index b9098d5541710ff3971a723b6bb0177c2ba2e7e1..ec6593646a07d3bf61aed4c15fef0d56322476d6 100644 (file)
 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
diff --git a/test/stdout/5803 b/test/stdout/5803
new file mode 100644 (file)
index 0000000..bfc1a0a
--- /dev/null
@@ -0,0 +1,5 @@
+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