Code for verify=header_names_ascii
authorMichael Fischer v. Mollard <info@konfusator.de>
Thu, 6 Mar 2014 02:19:24 +0000 (18:19 -0800)
committerTodd Lyons <tlyons@exim.org>
Thu, 6 Mar 2014 16:28:36 +0000 (08:28 -0800)
Documentation and test included.

Fixed Conflicts:
doc/doc-txt/ChangeLog

12 files changed:
doc/doc-docbook/spec.xfpt
doc/doc-txt/ChangeLog
doc/doc-txt/NewStuff
src/src/acl.c
src/src/functions.h
src/src/verify.c
test/confs/0569 [new file with mode: 0644]
test/log/0027
test/rejectlog/0027
test/scripts/0000-Basic/0569 [new file with mode: 0644]
test/stderr/0569 [new file with mode: 0644]
test/stdout/0569 [new file with mode: 0644]

index 40384c3ebabc6acaa6641838beb9460324017cf7..28c2ceb621f7edbe1b22b75312f2a6e547a9d8b3 100644 (file)
@@ -27983,6 +27983,23 @@ This condition checks whether the sending host (the client) is authorized to
 send email. Details of how this works are given in section
 &<<SECTverifyCSA>>&.
 
+.new
+.vitem &*verify&~=&~header_names_ascii*&
+.cindex "&%verify%& ACL condition"
+.cindex "&ACL;" "verifying header names only ASCII"
+.cindex "header lines" "verifying header names only ASCII"
+.cindex "verifying" "header names only ASCII"
+This condition is relevant only in an ACL that is run after a message has been
+received, that is, in an ACL specified by &%acl_smtp_data%& or
+&%acl_not_smtp%&.  It checks all header names (not the content) to make sure
+there are no non-ASCII characters, also excluding control characters.  The
+allowable characters are decimal ASCII values 33 through 126.
+
+Exim itself will handle headers with non-ASCII characters, but it can cause
+problems for downstream applications, so this option will allow their
+detection and rejection in the DATA ACL's.
+.wen
+
 .vitem &*verify&~=&~header_sender/*&<&'options'&>
 .cindex "&%verify%& ACL condition"
 .cindex "&ACL;" "verifying sender in the header"
index 331842f83db4a1738abc3b0d9b00f773f478bfa1..889d6a464b8145a69261deaf09e319bdc99c242c 100644 (file)
@@ -37,6 +37,10 @@ PP/01 Continue incomplete 4.82 PP/19 by fixing docs too: use dns_dnssec_ok
 
 JH/03 Bugzilla 1157: support log_selector smtp_confirmation for lmtp.
 
+TL/04 Add verify = header_names_ascii check to reject email with non-ASCII
+      characters in header names, implemented as a verify condition.
+      Contributed by Michael Fischer v. Mollard.
+
 
 Exim version 4.82
 -----------------
index 11cfcffa07e5f0932fac089fda8ec0fa2f83c079..dd3e5871422670a5414b404c739cfb21eef6d52d 100644 (file)
@@ -14,6 +14,11 @@ Version 4.83
     actual external source IP:host be used in exim instead of the IP of the
     proxy that is connecting to it.
 
+ 2. New verify option header_names_ascii, which will check to make sure
+    there are no non-ASCII characters in header names.  Exim itself handles
+    those non-ASCII characters, but downstream apps may not, so Exim can
+    detect and reject if those characters are present.
+
 
 Version 4.82
 ------------
index 29e0617d9565f2c6862a00accc2a51c055178bde..386754fcf9920abc6ef6d9f1ff77b92dc56a2779 100644 (file)
@@ -1650,7 +1650,8 @@ switch (dns_lookup(&dnsa, target, type, NULL))
 *************************************************/
 
 enum { VERIFY_REV_HOST_LKUP, VERIFY_CERT, VERIFY_HELO, VERIFY_CSA, VERIFY_HDR_SYNTAX,
-  VERIFY_NOT_BLIND, VERIFY_HDR_SNDR, VERIFY_SNDR, VERIFY_RCPT
+       VERIFY_NOT_BLIND, VERIFY_HDR_SNDR, VERIFY_SNDR, VERIFY_RCPT,
+       VERIFY_HDR_NAMES_ASCII
   };
 typedef struct {
   uschar * name;
@@ -1670,7 +1671,8 @@ static verify_type_t verify_type_list[] = {
     { US"sender",              VERIFY_SNDR,            (1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_RCPT)
                        |(1<<ACL_WHERE_PREDATA)|(1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP),
                                                                                FALSE, 6 },
-    { US"recipient",           VERIFY_RCPT,            (1<<ACL_WHERE_RCPT),    FALSE, 0 }
+    { US"recipient",           VERIFY_RCPT,            (1<<ACL_WHERE_RCPT),    FALSE, 0 },
+    { US"header_names_ascii",  VERIFY_HDR_NAMES_ASCII, (1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP), TRUE, 0 }
   };
 
 
@@ -1820,6 +1822,15 @@ switch(vp->value)
       *user_msgptr = string_sprintf("Rejected after DATA: %s", *log_msgptr);
     return rc;
 
+  case VERIFY_HDR_NAMES_ASCII:
+    /* Check that all header names are true 7 bit strings
+    See RFC 5322, 2.2. and RFC 6532, 3. */
+
+    rc = verify_check_header_names_ascii(log_msgptr);
+    if (rc != OK && smtp_return_error_details && *log_msgptr != NULL)
+      *user_msgptr = string_sprintf("Rejected after DATA: %s", *log_msgptr);
+    return rc;
+
   case VERIFY_NOT_BLIND:
     /* Check that no recipient of this message is "blind", that is, every envelope
     recipient must be mentioned in either To: or Cc:. */
@@ -2202,8 +2213,8 @@ return rc;
 
 BAD_VERIFY:
 *log_msgptr = string_sprintf("expected \"sender[=address]\", \"recipient\", "
-  "\"helo\", \"header_syntax\", \"header_sender\" or "
-  "\"reverse_host_lookup\" at start of ACL condition "
+  "\"helo\", \"header_syntax\", \"header_sender\", \"header_names_ascii\" "
+  "or \"reverse_host_lookup\" at start of ACL condition "
   "\"verify %s\"", arg);
 return ERROR;
 }
index 9d933fea77b37e09092ac3a0d58d3fab6ea4f9be..c6cb30119f860c87040bc1cbfa2aa2961c2cdb64 100644 (file)
@@ -402,6 +402,7 @@ extern int     verify_check_dnsbl(uschar **);
 extern int     verify_check_header_address(uschar **, uschar **, int, int, int,
                  uschar *, uschar *, int, int *);
 extern int     verify_check_headers(uschar **);
+extern int     verify_check_header_names_ascii(uschar **);
 extern int     verify_check_host(uschar **);
 extern int     verify_check_notblind(void);
 extern int     verify_check_this_host(uschar **, unsigned int *, uschar*,
index 711b3af5a93bca4a8a661d44c955629e88c1bc2e..3d3bfdaf017968f0dd9c28c19b0b2037870d02b8 100644 (file)
@@ -538,7 +538,7 @@ else
     #endif
       if (!(done= smtp_read_response(&inblock, responsebuffer, sizeof(responsebuffer), '2', callout)))
         goto RESPONSE_FAILED;
-    
+
     /* Not worth checking greeting line for ESMTP support */
     if (!(esmtp = verify_check_this_host(&(ob->hosts_avoid_esmtp), NULL,
       host->name, host->address, NULL) != OK))
@@ -2155,6 +2155,41 @@ return yield;
 }
 
 
+/*************************************************
+*      Check header names for 8-bit characters   *
+*************************************************/
+
+/* This function checks for invalid charcters in header names. See
+RFC 5322, 2.2. and RFC 6532, 3.
+
+Arguments:
+  msgptr     where to put an error message
+
+Returns:     OK
+             FAIL
+*/
+
+int
+verify_check_header_names_ascii(uschar **msgptr)
+{
+header_line *h;
+uschar *colon, *s;
+
+for (h = header_list; h != NULL; h = h->next)
+  {
+   colon = Ustrchr(h->text, ':');
+   for(s = h->text; s < colon; s++)
+     {
+        if ((*s < 33) || (*s > 126))
+        {
+                *msgptr = string_sprintf("Invalid character in header \"%.*s\" found",
+                                         colon - h->text, h->text);
+                return FAIL;
+        }
+     }
+  }
+return OK;
+}
 
 /*************************************************
 *          Check for blind recipients            *
diff --git a/test/confs/0569 b/test/confs/0569
new file mode 100644 (file)
index 0000000..0987e7e
--- /dev/null
@@ -0,0 +1,34 @@
+# Exim test configuration 0569
+
+exim_path = EXIM_PATH
+host_lookup_order = bydns
+primary_hostname = myhost.test.ex
+rfc1413_query_timeout = 0s
+spool_directory = DIR/spool
+log_file_path = DIR/spool/log/%slog
+gecos_pattern = ""
+gecos_name = CALLER_NAME
+
+# ----- Main settings -----
+
+acl_smtp_mail = check_from
+acl_smtp_rcpt = accept
+acl_smtp_data = check_message
+
+recipient_unqualified_hosts = V4NET.10.10.9
+
+# ----- ACL -----
+
+begin acl
+
+check_from:
+  accept senders = usery@exim.test.ex
+         set acl_m_message = I do not like your message
+  accept
+
+check_message:
+  require message = ${if def:acl_m_message {$acl_m_message}}
+          verify = header_names_ascii
+  accept
+
+# End
index 9aade88691253c4bec2dd8fd56f5b032f99ca662..3dbfa0258934a19f6d67cc9c9b49ac3c9a6832cf 100644 (file)
@@ -3,7 +3,7 @@
 1999-03-02 09:44:33 U=CALLER F=<x@y> rejected RCPT <postmaster@test.ex>: Sender verify failed
 1999-03-02 09:44:33 U=CALLER F=<userx@test.ex> rejected RCPT <userx@test.ex>: deny for userx
 1999-03-02 09:44:33 U=CALLER F=<> temporarily rejected RCPT <"deny verify = header_syntax"@test.ex>: cannot verify header_syntax in ACL for RCPT
-1999-03-02 09:44:33 U=CALLER F=<> temporarily rejected RCPT <"deny verify = junk"@test.ex>: expected "sender[=address]", "recipient", "helo", "header_syntax", "header_sender" or "reverse_host_lookup" at start of ACL condition "verify junk"
+1999-03-02 09:44:33 U=CALLER F=<> temporarily rejected RCPT <"deny verify = junk"@test.ex>: expected "sender[=address]", "recipient", "helo", "header_syntax", "header_sender", "header_names_ascii" or "reverse_host_lookup" at start of ACL condition "verify junk"
 1999-03-02 09:44:33 U=CALLER F=<> temporarily rejected RCPT <"deny vorify = junk"@test.ex>: unknown ACL condition/modifier in "deny vorify = junk"
 1999-03-02 09:44:33 U=CALLER F=<> temporarily rejected RCPT <"dony verify = junk"@test.ex>: unknown ACL verb "dony" in "dony verify = junk"
 1999-03-02 09:44:33 U=CALLER F=<> temporarily rejected RCPT <"deny !message = abcd"@test.ex>: ACL error: negation is not allowed with "message"
index 24bcc70e95a57a2d864fa95142769a2f8a3b17fc..b80e61635f90bd9ee8be75ad4828be406d6e9dc3 100644 (file)
@@ -3,7 +3,7 @@
 1999-03-02 09:44:33 U=CALLER F=<x@y> rejected RCPT <postmaster@test.ex>: Sender verify failed
 1999-03-02 09:44:33 U=CALLER F=<userx@test.ex> rejected RCPT <userx@test.ex>: deny for userx
 1999-03-02 09:44:33 U=CALLER F=<> temporarily rejected RCPT <"deny verify = header_syntax"@test.ex>: cannot verify header_syntax in ACL for RCPT
-1999-03-02 09:44:33 U=CALLER F=<> temporarily rejected RCPT <"deny verify = junk"@test.ex>: expected "sender[=address]", "recipient", "helo", "header_syntax", "header_sender" or "reverse_host_lookup" at start of ACL condition "verify junk"
+1999-03-02 09:44:33 U=CALLER F=<> temporarily rejected RCPT <"deny verify = junk"@test.ex>: expected "sender[=address]", "recipient", "helo", "header_syntax", "header_sender", "header_names_ascii" or "reverse_host_lookup" at start of ACL condition "verify junk"
 1999-03-02 09:44:33 U=CALLER F=<> temporarily rejected RCPT <"deny vorify = junk"@test.ex>: unknown ACL condition/modifier in "deny vorify = junk"
 1999-03-02 09:44:33 U=CALLER F=<> temporarily rejected RCPT <"dony verify = junk"@test.ex>: unknown ACL verb "dony" in "dony verify = junk"
 1999-03-02 09:44:33 U=CALLER F=<> temporarily rejected RCPT <"deny !message = abcd"@test.ex>: ACL error: negation is not allowed with "message"
diff --git a/test/scripts/0000-Basic/0569 b/test/scripts/0000-Basic/0569
new file mode 100644 (file)
index 0000000..41cdb87
--- /dev/null
@@ -0,0 +1,147 @@
+# verify = header_names_ascii
+# 1. Headers are good, make sure no misfires.
+exim -bh V4NET.10.10.10
+mail from:<userx@exim.test.ex>
+rcpt to:<userx@test.ex>
+data
+Received: from mail.example.com([10.11.12.13] helo=mail.example.com)
+       by mail1-int.example.com with esmtp (Exim 4.80)
+       envelope-from <userx@exim.test.ex>
+       id 1WIJRL-0005Dw-MW
+       for XX@YY; Tue, 25 Feb 2014 15:57:00 +0000
+Received: from mail1-int.example.com([10.120.12.12] helo=mail1-int.example.com)
+       by webmail1.example.com with esmtp (Exim 4.80)
+       envelope-from <userx@exim.test.ex>
+       id 1WIJRK-0005Dw-MW
+       for XX@YY; Tue, 25 Feb 2014 15:56:58 +0000
+From: userx@exim.test.ex
+To: userx@test.ex
+Cc: <abcd@x.y.z
+Subject: testing
+
+.
+QUIT
+****
+# 2. A non-ASCII in header name, uses default rejection message
+exim -bh V4NET.10.10.10
+mail from:<userx@exim.test.ex>
+rcpt to:<userx@test.ex>
+data
+Received: from mail.example.com([10.11.12.13] helo=mail.example.com)
+       by mail1-int.example.com with esmtp (Exim 4.80)
+       envelope-from <userx@exim.test.ex>
+       id 1WIJRL-0005Dw-MW
+       for XX@YY; Tue, 25 Feb 2014 15:57:00 +0000
+Received: from mail1-int.example.com([10.120.12.12] helo=mail1-int.example.com)
+       by webmail1.example.com with esmtp (Exim 4.80)
+       envelope-from <userx@exim.test.ex>
+       id 1WIJRK-0005Dw-MW
+       for XX@YY; Tue, 25 Feb 2014 15:56:58 +0000
+From: userx@exim.test.ex
+To: userx@test.ex
+Cc: <abcd@x.y.z>
+Subject: testing
+
+.
+QUIT
+****
+# 3. A non-ASCII character in header name, different from sets an acl variable
+#    causing custom log message
+exim -bh V4NET.10.10.10
+mail from:<usery@exim.test.ex>
+rcpt to:<userx@test.ex>
+data
+Received: from mail.example.com([10.11.12.13] helo=mail.example.com)
+       by mail1-int.example.com with esmtp (Exim 4.80)
+       envelope-from <userx@exim.test.ex>
+       id 1WIJRL-0005Dw-MW
+       for XX@YY; Tue, 25 Feb 2014 15:57:00 +0000
+Received: from mail1-int.example.com([10.120.12.12] helo=mail1-int.example.com)
+       by webmail1.example.com with esmtp (Exim 4.80)
+       envelope-from <userx@exim.test.ex>
+       id 1WIJRK-0005Dw-MW
+       for XX@YY; Tue, 25 Feb 2014 15:56:58 +0000
+From: userx@exim.test.ex
+To: userx@test.ex
+Cc: <abcd@x.y.z>
+Subjec⍅: testing
+
+.
+QUIT
+****
+# 4. A non-ASCII character in header name, uses default rejection message
+exim -bh V4NET.10.10.10
+mail from:<userx@exim.test.ex>
+rcpt to:<userx@test.ex>
+data
+Received: from mail.example.com([10.11.12.13] helo=mail.example.com)
+       by mail1-int.example.com with esmtp (Exim 4.80)
+       envelope-from <userx@exim.test.ex>
+       id 1WIJRL-0005Dw-MW
+       for XX@YY; Tue, 25 Feb 2014 15:57:00 +0000
+Received: from mail1-int.example.com([10.120.12.12] helo=mail1-int.example.com)
+       by webmail1.example.com with esmtp (Exim 4.80)
+       envelope-from <userx@exim.test.ex>
+       id 1WIJRK-0005Dw-MW
+       for XX@YY; Tue, 25 Feb 2014 15:56:58 +0000
+From: userx@exim.test.ex
+To: userx@test.ex
+Cc: <abcd@x.y.z>
+Subjec⍅: testing
+
+.
+QUIT
+****
+# 5. Headers are good, Unicode in message body, make sure no misfires.
+exim -bh V4NET.10.10.10
+mail from:<userx@exim.test.ex>
+rcpt to:<userx@test.ex>
+data
+Received: from mail.example.com([10.11.12.13] helo=mail.example.com)
+       by mail1-int.example.com with esmtp (Exim 4.80)
+       envelope-from <userx@exim.test.ex>
+       id 1WIJRL-0005Dw-MW
+       for XX@YY; Tue, 25 Feb 2014 15:57:00 +0000
+Received: from mail1-int.example.com([10.120.12.12] helo=mail1-int.example.com)
+       by webmail1.example.com with esmtp (Exim 4.80)
+       envelope-from <userx@exim.test.ex>
+       id 1WIJRK-0005Dw-MW
+       for XX@YY; Tue, 25 Feb 2014 15:56:58 +0000
+From: userx@exim.test.ex
+To: userx@test.ex
+Cc: <abcd@x.y.z>
+Subject: testing
+
+Some unicode characters: 顷晦٦
+This email should be accepted because the headers are ok.
+.
+QUIT
+****
+# 6. Headers are good, Unicode in a header content *and* message body,
+#    make sure no misfires.
+exim -bh V4NET.10.10.10
+mail from:<userx@exim.test.ex>
+rcpt to:<userx@test.ex>
+data
+Received: from mail.example.com([10.11.12.13] helo=mail.example.com)
+       by mail1-int.example.com with esmtp (Exim 4.80)
+       envelope-from <userx@exim.test.ex>
+       id 1WIJRL-0005Dw-MW
+       for XX@YY; Tue, 25 Feb 2014 15:57:00 +0000
+Received: from mail1-int.example.com([10.120.12.12] helo=mail1-int.example.com)
+       by webmail1.example.com with esmtp (Exim 4.80)
+       envelope-from <userx癑@exim.test.ex>
+       id 1WIJRK-0005Dw-MW
+       for XX@YY; Tue, 25 Feb 2014 15:56:58 +0000
+From: userx@exim.test.ex
+To: userx@test.ex
+Cc: <abcd@x.y.z>
+Subject: testing
+
+Some unicode characters: 顷晦٦
+This email should be accepted because the headers are ok even though the
+content of one of the headers has unicode.
+.
+QUIT
+****
+no_msglog_check
diff --git a/test/stderr/0569 b/test/stderr/0569
new file mode 100644 (file)
index 0000000..b17c2ac
--- /dev/null
@@ -0,0 +1,144 @@
+>>> host in hosts_connection_nolog? no (option unset)
+>>> host in host_lookup? no (option unset)
+>>> host in host_reject_connection? no (option unset)
+>>> host in sender_unqualified_hosts? no (option unset)
+>>> host in recipient_unqualified_hosts? no (end of list)
+>>> host in helo_verify_hosts? no (option unset)
+>>> host in helo_try_verify_hosts? no (option unset)
+>>> host in helo_accept_junk_hosts? no (option unset)
+>>> using ACL "check_from"
+>>> processing "accept"
+>>> check senders = usery@exim.test.ex
+>>> userx@exim.test.ex in "usery@exim.test.ex"? no (end of list)
+>>> accept: condition test failed in ACL "check_from"
+>>> processing "accept"
+>>> accept: condition test succeeded in ACL "check_from"
+>>> processing "accept"
+>>> accept: condition test succeeded in inline ACL
+>>> host in ignore_fromline_hosts? no (option unset)
+>>> using ACL "check_message"
+>>> processing "require"
+>>> check verify = header_names_ascii
+>>> require: condition test succeeded in ACL "check_message"
+>>> processing "accept"
+>>> accept: condition test succeeded in ACL "check_message"
+LOG: 10HmaX-0005vi-00 <= userx@exim.test.ex H=[V4NET.10.10.10] P=smtp S=sss
+>>> host in hosts_connection_nolog? no (option unset)
+>>> host in host_lookup? no (option unset)
+>>> host in host_reject_connection? no (option unset)
+>>> host in sender_unqualified_hosts? no (option unset)
+>>> host in recipient_unqualified_hosts? no (end of list)
+>>> host in helo_verify_hosts? no (option unset)
+>>> host in helo_try_verify_hosts? no (option unset)
+>>> host in helo_accept_junk_hosts? no (option unset)
+>>> using ACL "check_from"
+>>> processing "accept"
+>>> check senders = usery@exim.test.ex
+>>> userx@exim.test.ex in "usery@exim.test.ex"? no (end of list)
+>>> accept: condition test failed in ACL "check_from"
+>>> processing "accept"
+>>> accept: condition test succeeded in ACL "check_from"
+>>> processing "accept"
+>>> accept: condition test succeeded in inline ACL
+>>> host in ignore_fromline_hosts? no (option unset)
+>>> using ACL "check_message"
+>>> processing "require"
+>>> check verify = header_names_ascii
+>>> require: condition test failed in ACL "check_message"
+LOG: 10HmbA-0005vi-00 H=[V4NET.10.10.10] F=<userx@exim.test.ex> rejected after DATA: Invalid character in header "Received" found
+>>> host in hosts_connection_nolog? no (option unset)
+>>> host in host_lookup? no (option unset)
+>>> host in host_reject_connection? no (option unset)
+>>> host in sender_unqualified_hosts? no (option unset)
+>>> host in recipient_unqualified_hosts? no (end of list)
+>>> host in helo_verify_hosts? no (option unset)
+>>> host in helo_try_verify_hosts? no (option unset)
+>>> host in helo_accept_junk_hosts? no (option unset)
+>>> using ACL "check_from"
+>>> processing "accept"
+>>> check senders = usery@exim.test.ex
+>>> exim.test.ex in "exim.test.ex"? yes (matched "exim.test.ex")
+>>> usery@exim.test.ex in "usery@exim.test.ex"? yes (matched "usery@exim.test.ex")
+>>> check set acl_m_message = I do not like your message
+>>> accept: condition test succeeded in ACL "check_from"
+>>> processing "accept"
+>>> accept: condition test succeeded in inline ACL
+>>> host in ignore_fromline_hosts? no (option unset)
+>>> using ACL "check_message"
+>>> processing "require"
+>>> check verify = header_names_ascii
+>>> require: condition test failed in ACL "check_message"
+LOG: 10HmbB-0005vi-00 H=[V4NET.10.10.10] F=<usery@exim.test.ex> rejected after DATA: Invalid character in header "Subjec⍅" found
+>>> host in hosts_connection_nolog? no (option unset)
+>>> host in host_lookup? no (option unset)
+>>> host in host_reject_connection? no (option unset)
+>>> host in sender_unqualified_hosts? no (option unset)
+>>> host in recipient_unqualified_hosts? no (end of list)
+>>> host in helo_verify_hosts? no (option unset)
+>>> host in helo_try_verify_hosts? no (option unset)
+>>> host in helo_accept_junk_hosts? no (option unset)
+>>> using ACL "check_from"
+>>> processing "accept"
+>>> check senders = usery@exim.test.ex
+>>> userx@exim.test.ex in "usery@exim.test.ex"? no (end of list)
+>>> accept: condition test failed in ACL "check_from"
+>>> processing "accept"
+>>> accept: condition test succeeded in ACL "check_from"
+>>> processing "accept"
+>>> accept: condition test succeeded in inline ACL
+>>> host in ignore_fromline_hosts? no (option unset)
+>>> using ACL "check_message"
+>>> processing "require"
+>>> check verify = header_names_ascii
+>>> require: condition test failed in ACL "check_message"
+LOG: 10HmbC-0005vi-00 H=[V4NET.10.10.10] F=<userx@exim.test.ex> rejected after DATA: Invalid character in header "Subjec⍅" found
+>>> host in hosts_connection_nolog? no (option unset)
+>>> host in host_lookup? no (option unset)
+>>> host in host_reject_connection? no (option unset)
+>>> host in sender_unqualified_hosts? no (option unset)
+>>> host in recipient_unqualified_hosts? no (end of list)
+>>> host in helo_verify_hosts? no (option unset)
+>>> host in helo_try_verify_hosts? no (option unset)
+>>> host in helo_accept_junk_hosts? no (option unset)
+>>> using ACL "check_from"
+>>> processing "accept"
+>>> check senders = usery@exim.test.ex
+>>> userx@exim.test.ex in "usery@exim.test.ex"? no (end of list)
+>>> accept: condition test failed in ACL "check_from"
+>>> processing "accept"
+>>> accept: condition test succeeded in ACL "check_from"
+>>> processing "accept"
+>>> accept: condition test succeeded in inline ACL
+>>> host in ignore_fromline_hosts? no (option unset)
+>>> using ACL "check_message"
+>>> processing "require"
+>>> check verify = header_names_ascii
+>>> require: condition test succeeded in ACL "check_message"
+>>> processing "accept"
+>>> accept: condition test succeeded in ACL "check_message"
+LOG: 10HmaY-0005vi-00 <= userx@exim.test.ex H=[V4NET.10.10.10] P=smtp S=sss
+>>> host in hosts_connection_nolog? no (option unset)
+>>> host in host_lookup? no (option unset)
+>>> host in host_reject_connection? no (option unset)
+>>> host in sender_unqualified_hosts? no (option unset)
+>>> host in recipient_unqualified_hosts? no (end of list)
+>>> host in helo_verify_hosts? no (option unset)
+>>> host in helo_try_verify_hosts? no (option unset)
+>>> host in helo_accept_junk_hosts? no (option unset)
+>>> using ACL "check_from"
+>>> processing "accept"
+>>> check senders = usery@exim.test.ex
+>>> userx@exim.test.ex in "usery@exim.test.ex"? no (end of list)
+>>> accept: condition test failed in ACL "check_from"
+>>> processing "accept"
+>>> accept: condition test succeeded in ACL "check_from"
+>>> processing "accept"
+>>> accept: condition test succeeded in inline ACL
+>>> host in ignore_fromline_hosts? no (option unset)
+>>> using ACL "check_message"
+>>> processing "require"
+>>> check verify = header_names_ascii
+>>> require: condition test succeeded in ACL "check_message"
+>>> processing "accept"
+>>> accept: condition test succeeded in ACL "check_message"
+LOG: 10HmaZ-0005vi-00 <= userx@exim.test.ex H=[V4NET.10.10.10] P=smtp S=sss
diff --git a/test/stdout/0569 b/test/stdout/0569
new file mode 100644 (file)
index 0000000..9d82558
--- /dev/null
@@ -0,0 +1,75 @@
+
+**** SMTP testing session as if from host V4NET.10.10.10
+**** but without any ident (RFC 1413) callback.
+**** This is not for real!
+
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250 OK\r
+250 Accepted\r
+354 Enter message, ending with "." on a line by itself\r
+250 OK id=10HmaX-0005vi-00\r
+
+**** SMTP testing: that is not a real message id!
+
+221 myhost.test.ex closing connection\r
+
+**** SMTP testing session as if from host V4NET.10.10.10
+**** but without any ident (RFC 1413) callback.
+**** This is not for real!
+
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250 OK\r
+250 Accepted\r
+354 Enter message, ending with "." on a line by itself\r
+550 Administrative prohibition\r
+221 myhost.test.ex closing connection\r
+
+**** SMTP testing session as if from host V4NET.10.10.10
+**** but without any ident (RFC 1413) callback.
+**** This is not for real!
+
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250 OK\r
+250 Accepted\r
+354 Enter message, ending with "." on a line by itself\r
+550 I do not like your message\r
+221 myhost.test.ex closing connection\r
+
+**** SMTP testing session as if from host V4NET.10.10.10
+**** but without any ident (RFC 1413) callback.
+**** This is not for real!
+
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250 OK\r
+250 Accepted\r
+354 Enter message, ending with "." on a line by itself\r
+550 Administrative prohibition\r
+221 myhost.test.ex closing connection\r
+
+**** SMTP testing session as if from host V4NET.10.10.10
+**** but without any ident (RFC 1413) callback.
+**** This is not for real!
+
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250 OK\r
+250 Accepted\r
+354 Enter message, ending with "." on a line by itself\r
+250 OK id=10HmaY-0005vi-00\r
+
+**** SMTP testing: that is not a real message id!
+
+221 myhost.test.ex closing connection\r
+
+**** SMTP testing session as if from host V4NET.10.10.10
+**** but without any ident (RFC 1413) callback.
+**** This is not for real!
+
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250 OK\r
+250 Accepted\r
+354 Enter message, ending with "." on a line by itself\r
+250 OK id=10HmaZ-0005vi-00\r
+
+**** SMTP testing: that is not a real message id!
+
+221 myhost.test.ex closing connection\r