From 770747fd28008931d72a9f87be83286eaf626a95 Mon Sep 17 00:00:00 2001 From: "Michael Fischer v. Mollard" Date: Wed, 5 Mar 2014 18:19:24 -0800 Subject: [PATCH] Code for verify=header_names_ascii Documentation and test included. Fixed Conflicts: doc/doc-txt/ChangeLog --- doc/doc-docbook/spec.xfpt | 17 ++++ doc/doc-txt/ChangeLog | 4 + doc/doc-txt/NewStuff | 5 ++ src/src/acl.c | 19 ++++- src/src/functions.h | 1 + src/src/verify.c | 37 ++++++++- test/confs/0569 | 34 ++++++++ test/log/0027 | 2 +- test/rejectlog/0027 | 2 +- test/scripts/0000-Basic/0569 | 147 +++++++++++++++++++++++++++++++++++ test/stderr/0569 | 144 ++++++++++++++++++++++++++++++++++ test/stdout/0569 | 75 ++++++++++++++++++ 12 files changed, 480 insertions(+), 7 deletions(-) create mode 100644 test/confs/0569 create mode 100644 test/scripts/0000-Basic/0569 create mode 100644 test/stderr/0569 create mode 100644 test/stdout/0569 diff --git a/doc/doc-docbook/spec.xfpt b/doc/doc-docbook/spec.xfpt index 40384c3eb..28c2ceb62 100644 --- a/doc/doc-docbook/spec.xfpt +++ b/doc/doc-docbook/spec.xfpt @@ -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 &<>&. +.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" diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index 331842f83..889d6a464 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -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 ----------------- diff --git a/doc/doc-txt/NewStuff b/doc/doc-txt/NewStuff index 11cfcffa0..dd3e58714 100644 --- a/doc/doc-txt/NewStuff +++ b/doc/doc-txt/NewStuff @@ -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 ------------ diff --git a/src/src/acl.c b/src/src/acl.c index 29e0617d9..386754fcf 100644 --- a/src/src/acl.c +++ b/src/src/acl.c @@ -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<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; } diff --git a/src/src/functions.h b/src/src/functions.h index 9d933fea7..c6cb30119 100644 --- a/src/src/functions.h +++ b/src/src/functions.h @@ -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*, diff --git a/src/src/verify.c b/src/src/verify.c index 711b3af5a..3d3bfdaf0 100644 --- a/src/src/verify.c +++ b/src/src/verify.c @@ -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 index 000000000..0987e7ed0 --- /dev/null +++ b/test/confs/0569 @@ -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 diff --git a/test/log/0027 b/test/log/0027 index 9aade8869..3dbfa0258 100644 --- a/test/log/0027 +++ b/test/log/0027 @@ -3,7 +3,7 @@ 1999-03-02 09:44:33 U=CALLER F= rejected RCPT : Sender verify failed 1999-03-02 09:44:33 U=CALLER F= rejected RCPT : 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/rejectlog/0027 b/test/rejectlog/0027 index 24bcc70e9..b80e61635 100644 --- a/test/rejectlog/0027 +++ b/test/rejectlog/0027 @@ -3,7 +3,7 @@ 1999-03-02 09:44:33 U=CALLER F= rejected RCPT : Sender verify failed 1999-03-02 09:44:33 U=CALLER F= rejected RCPT : 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 index 000000000..41cdb8731 --- /dev/null +++ b/test/scripts/0000-Basic/0569 @@ -0,0 +1,147 @@ +# verify = header_names_ascii +# 1. Headers are good, make sure no misfires. +exim -bh V4NET.10.10.10 +mail from: +rcpt to: +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 + 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 + 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: +rcpt to: +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 + 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 + 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: +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: +rcpt to: +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 + 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 + 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: +Subjec⍅: testing + +. +QUIT +**** +# 4. A non-ASCII character in header name, uses default rejection message +exim -bh V4NET.10.10.10 +mail from: +rcpt to: +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 + 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 + 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: +Subjec⍅: testing + +. +QUIT +**** +# 5. Headers are good, Unicode in message body, make sure no misfires. +exim -bh V4NET.10.10.10 +mail from: +rcpt to: +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 + 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 + 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: +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: +rcpt to: +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 + 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 + 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: +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 index 000000000..b17c2ac20 --- /dev/null +++ b/test/stderr/0569 @@ -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= 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= 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= 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 index 000000000..9d825581c --- /dev/null +++ b/test/stdout/0569 @@ -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 +250 OK +250 Accepted +354 Enter message, ending with "." on a line by itself +250 OK id=10HmaX-0005vi-00 + +**** SMTP testing: that is not a real message id! + +221 myhost.test.ex closing connection + +**** 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 +250 OK +250 Accepted +354 Enter message, ending with "." on a line by itself +550 Administrative prohibition +221 myhost.test.ex closing connection + +**** 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 +250 OK +250 Accepted +354 Enter message, ending with "." on a line by itself +550 I do not like your message +221 myhost.test.ex closing connection + +**** 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 +250 OK +250 Accepted +354 Enter message, ending with "." on a line by itself +550 Administrative prohibition +221 myhost.test.ex closing connection + +**** 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 +250 OK +250 Accepted +354 Enter message, ending with "." on a line by itself +250 OK id=10HmaY-0005vi-00 + +**** SMTP testing: that is not a real message id! + +221 myhost.test.ex closing connection + +**** 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 +250 OK +250 Accepted +354 Enter message, ending with "." on a line by itself +250 OK id=10HmaZ-0005vi-00 + +**** SMTP testing: that is not a real message id! + +221 myhost.test.ex closing connection -- 2.25.1