[exim-cvs] Logging-only patch for 8BITMIME; bug 817.

Top Page
Delete this message
Reply to this message
Author: Exim Git Commits Mailing List
Date:  
To: exim-cvs
Subject: [exim-cvs] Logging-only patch for 8BITMIME; bug 817.
Gitweb: http://git.exim.org/exim.git/commitdiff/3c0a92dcf8312d3071769e5a36946c651330e0e4
Commit:     3c0a92dcf8312d3071769e5a36946c651330e0e4
Parent:     4eae92ae55cd6904459eea8f4a2afe48cc0b5b66
Author:     Jeremy Harris <jgh146exb@???>
AuthorDate: Thu Oct 4 23:23:50 2012 +0100
Committer:  Jeremy Harris <jgh146exb@???>
CommitDate: Sat Oct 6 20:00:37 2012 +0100


    Logging-only patch for 8BITMIME; bug 817.
---
 doc/doc-docbook/spec.xfpt    |    7 +++++
 doc/doc-txt/ChangeLog        |    4 +++
 doc/doc-txt/NewStuff         |    2 +
 src/ACKNOWLEDGMENTS          |    1 +
 src/src/globals.c            |    2 +
 src/src/globals.h            |    1 +
 src/src/macros.h             |    1 +
 src/src/receive.c            |    9 +++++++
 src/src/smtp_in.c            |   18 +++++++++++---
 test/confs/0566              |    3 +-
 test/log/0566                |   10 ++++++++
 test/mail/0566.userx         |   39 ++++++++++++++++++++++++++++++
 test/rejectlog/0566          |    1 +
 test/scripts/0000-Basic/0566 |   53 ++++++++++++++++++++++++++++++++++++++++++
 test/stdout/0566             |   48 ++++++++++++++++++++++++++++++++++++++
 15 files changed, 194 insertions(+), 5 deletions(-)


diff --git a/doc/doc-docbook/spec.xfpt b/doc/doc-docbook/spec.xfpt
index 4ba31a0..2555139 100644
--- a/doc/doc-docbook/spec.xfpt
+++ b/doc/doc-docbook/spec.xfpt
@@ -13099,6 +13099,7 @@ Those options that undergo string expansion before use are marked with
.option accept_8bitmime main boolean true
.cindex "8BITMIME"
.cindex "8-bit characters"
+.cindex "log" "selectors"
This option causes Exim to send 8BITMIME in its response to an SMTP
EHLO command, and to accept the BODY= parameter on MAIL commands.
However, though Exim is 8-bit clean, it is not a protocol converter, and it
@@ -13112,6 +13113,11 @@ A more detailed analysis of the issues is provided by Dan Bernstein:
&url(http://cr.yp.to/smtp/8bitmime.html)
.endd

+To log received 8BITMIME status use
+.code
+log_selector = +8bitmime
+.endd
+
 .option acl_not_smtp main string&!! unset
 .cindex "&ACL;" "for non-SMTP messages"
 .cindex "non-SMTP messages" "ACLs for"
@@ -33824,6 +33830,7 @@ log_selector = +arguments -retry_defer
 The list of optional log items is in the following table, with the default
 selection marked by asterisks:
 .display
+&` 8bitmime                   `&  received 8BITMIME status
 &`*acl_warn_skipped           `&  skipped &%warn%& statement in ACL
 &` address_rewrite            `&  address rewriting
 &` all_parents                `&  all parents in => lines
diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog
index 84948f6..db1c525 100644
--- a/doc/doc-txt/ChangeLog
+++ b/doc/doc-txt/ChangeLog
@@ -78,6 +78,10 @@ JH/09 Add $headers_added variable, with content from use of ACL modifier
       add_header (but not yet added to the message).  Bugzilla 199.



+JH/10 Add 8bitmime log_selector, for 8bitmime status on the received line.
+      Pulled from Bugzilla 817 by Wolfgang Breyha.
+
+


 Exim version 4.80
 -----------------
diff --git a/doc/doc-txt/NewStuff b/doc/doc-txt/NewStuff
index 680d96c..2982fc4 100644
--- a/doc/doc-txt/NewStuff
+++ b/doc/doc-txt/NewStuff
@@ -118,6 +118,8 @@ Version 4.81
 14. New expansion variable $headers_added with content from ACL add_header
     modifier (but not yet added to messsage).


+15. New 8bitmime status logging option for received messages.
+

 Version 4.80
 ------------
diff --git a/src/ACKNOWLEDGMENTS b/src/ACKNOWLEDGMENTS
index a66512f..4361d67 100644
--- a/src/ACKNOWLEDGMENTS
+++ b/src/ACKNOWLEDGMENTS
@@ -98,6 +98,7 @@ Matt Bernstein            LMTP over socket
 Mike Bethune              Help with debugging an elusive ALRM signal bug
 Ard Biesheuvel            Lookup code for accessing an Interbase database
 Richard Birkett           Fix for empty -f address crash
+Wolfgang Breyha           Logging of 8bitmime reception
 Dean Brooks               Fix for ratelimit per_rcpt in acl_not_smtp.
 Nick Burrett              Patch for CONFIGURE_FILE_USE_EUID in exicyclog
 Matthew Byng-Maddick      Patch for qualify_domain in redirect router
diff --git a/src/src/globals.c b/src/src/globals.c
index bcbe12d..ba6c8c6 100644
--- a/src/src/globals.c
+++ b/src/src/globals.c
@@ -271,6 +271,7 @@ uschar *acl_wherecodes[]       = { US"550",     /* RCPT */


 BOOL    active_local_from_check = FALSE;
 BOOL    active_local_sender_retain = FALSE;
+int     body_8bitmime = 0;
 BOOL    accept_8bitmime        = TRUE; /* deliberately not RFC compliant */
 address_item  *addr_duplicate  = NULL;


@@ -734,6 +735,7 @@ selectors was getting close to filling a 32-bit word. */
/* Note that this list must be in alphabetical order. */

 bit_table log_options[]        = {
+  { US"8bitmime",                     LX_8bitmime },
   { US"acl_warn_skipped",             LX_acl_warn_skipped },
   { US"address_rewrite",              L_address_rewrite },
   { US"all",                          L_all },
diff --git a/src/src/globals.h b/src/src/globals.h
index 16caa41..a27f62c 100644
--- a/src/src/globals.h
+++ b/src/src/globals.h
@@ -133,6 +133,7 @@ extern uschar **address_expansions[ADDRESS_EXPANSIONS_COUNT];
 /* General global variables */


 extern BOOL    accept_8bitmime;        /* Allow *BITMIME incoming */
+extern int     body_8bitmime;          /* sender declared BODY= ; 7=7BIT, 8=8BITMIME */
 extern header_line *acl_added_headers; /* Headers added by an ACL */
 extern tree_node *acl_anchor;          /* Tree of named ACLs */
 extern uschar *acl_arg[9];             /* Argument to ACL call */
diff --git a/src/src/macros.h b/src/src/macros.h
index cec4733..3052002 100644
--- a/src/src/macros.h
+++ b/src/src/macros.h
@@ -409,6 +409,7 @@ set all the bits in a multi-word selector. */
 #define LX_tls_peerdn                  0x80400000
 #define LX_tls_sni                     0x80800000
 #define LX_unknown_in_list             0x81000000
+#define LX_8bitmime                    0x82000000


 #define L_default     (L_connection_reject        | \
                        L_delay_delivery           | \
diff --git a/src/src/receive.c b/src/src/receive.c
index 7b51805..8ac381a 100644
--- a/src/src/receive.c
+++ b/src/src/receive.c
@@ -3610,6 +3610,15 @@ if (sender_host_authenticated != NULL)
 sprintf(CS big_buffer, "%d", msg_size);
 s = string_append(s, &size, &sptr, 2, US" S=", big_buffer);


+/* log 8BITMIME mode announced in MAIL_FROM
+   0 ... no BODY= used
+   7 ... 7BIT
+   8 ... 8BITMIME */
+if (log_extra_selector & LX_8bitmime) {
+  sprintf(CS big_buffer, "%d", body_8bitmime);
+  s = string_append(s, &size, &sptr, 2, US" M8S=", big_buffer);
+}
+
 /* If an addr-spec in a message-id contains a quoted string, it can contain
 any characters except " \ and CR and so in particular it can contain NL!
 Therefore, make sure we use a printing-characters only version for the log.
diff --git a/src/src/smtp_in.c b/src/src/smtp_in.c
index b1fea9d..e3746d9 100644
--- a/src/src/smtp_in.c
+++ b/src/src/smtp_in.c
@@ -3320,10 +3320,20 @@ while (done <= 0)
         some sites want the action that is provided. We recognize both "8BITMIME"
         and "7BIT" as body types, but take no action. */
         case ENV_MAIL_OPT_BODY:
-          if (accept_8bitmime &&
-              (strcmpic(value, US"8BITMIME") == 0 ||
-               strcmpic(value, US"7BIT") == 0) )
-            break;
+          if (accept_8bitmime) {
+            if (strcmpic(value, US"8BITMIME") == 0) {
+              body_8bitmime = 8;
+            } else if (strcmpic(value, US"7BIT") == 0) {
+              body_8bitmime = 7;
+            } else {
+              body_8bitmime = 0;
+              done = synprot_error(L_smtp_syntax_error, 501, NULL,
+                US"invalid data for BODY");
+              goto COMMAND_LOOP;
+            }
+            DEBUG(D_receive) debug_printf("8BITMIME: %d\n", body_8bitmime);
+        break;
+          }
           arg_error = TRUE;
           break;


diff --git a/test/confs/0566 b/test/confs/0566
index e7a91c6..83e97fb 100644
--- a/test/confs/0566
+++ b/test/confs/0566
@@ -1,4 +1,4 @@
-# Exim test configuration 0028
+# Exim test configuration 0566

exim_path = EXIM_PATH
host_lookup_order = bydns
@@ -6,6 +6,7 @@ primary_hostname = myhost.test.ex
rfc1413_query_timeout = 0s
spool_directory = DIR/spool
log_file_path = DIR/spool/log/%slog
+log_selector = +8bitmime
gecos_pattern = ""
gecos_name = CALLER_NAME

diff --git a/test/log/0566 b/test/log/0566
index e59c733..0922615 100644
--- a/test/log/0566
+++ b/test/log/0566
@@ -3,3 +3,13 @@
 1999-03-02 09:44:33 ignoring AUTH=x@y from U=CALLER (client not authenticated)
 1999-03-02 09:44:33 U=CALLER F=<x@y> rejected RCPT <userx@???>: SIZE value too big
 1999-03-02 09:44:33 U=CALLER F=<x@y> rejected RCPT <userx@???>: SIZE value too big
+1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@??? U=CALLER P=local-esmtp S=sss M8S=0
+1999-03-02 09:44:33 10HmaX-0005vi-00 => userx <userx@???> R=r2 T=local_delivery
+1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
+1999-03-02 09:44:33 10HmaY-0005vi-00 <= CALLER@??? U=CALLER P=local-esmtp S=sss M8S=7
+1999-03-02 09:44:33 10HmaY-0005vi-00 => userx <userx@???> R=r2 T=local_delivery
+1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
+1999-03-02 09:44:33 10HmaZ-0005vi-00 <= CALLER@??? U=CALLER P=local-esmtp S=sss M8S=8
+1999-03-02 09:44:33 10HmaZ-0005vi-00 => userx <userx@???> R=r2 T=local_delivery
+1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
+1999-03-02 09:44:33 SMTP call from CALLER dropped: too many syntax or protocol errors (last command was "foo")
diff --git a/test/mail/0566.userx b/test/mail/0566.userx
new file mode 100644
index 0000000..e5f0975
--- /dev/null
+++ b/test/mail/0566.userx
@@ -0,0 +1,39 @@
+From CALLER@??? Tue Mar 02 09:44:33 1999
+Received: from CALLER (helo=Testing)
+    by myhost.test.ex with local-esmtp (Exim x.yz)
+    (envelope-from <CALLER@???>)
+    id 10HmaX-0005vi-00
+    for userx@???; Tue, 2 Mar 1999 09:44:33 +0000
+Subject: test
+Message-Id: <E10HmaX-0005vi-00@???>
+From: CALLER_NAME <CALLER@???>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+foo
+
+From CALLER@??? Tue Mar 02 09:44:33 1999
+Received: from CALLER (helo=Testing)
+    by myhost.test.ex with local-esmtp (Exim x.yz)
+    (envelope-from <CALLER@???>)
+    id 10HmaY-0005vi-00
+    for userx@???; Tue, 2 Mar 1999 09:44:33 +0000
+Subject: test
+Message-Id: <E10HmaY-0005vi-00@???>
+From: CALLER_NAME <CALLER@???>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+foo
+
+From CALLER@??? Tue Mar 02 09:44:33 1999
+Received: from CALLER (helo=Testing)
+    by myhost.test.ex with local-esmtp (Exim x.yz)
+    (envelope-from <CALLER@???>)
+    id 10HmaZ-0005vi-00
+    for userx@???; Tue, 2 Mar 1999 09:44:33 +0000
+Subject: test
+Message-Id: <E10HmaZ-0005vi-00@???>
+From: CALLER_NAME <CALLER@???>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+foo
+
diff --git a/test/rejectlog/0566 b/test/rejectlog/0566
index 67b5dc2..7a420d0 100644
--- a/test/rejectlog/0566
+++ b/test/rejectlog/0566
@@ -1,2 +1,3 @@
 1999-03-02 09:44:33 U=CALLER F=<x@y> rejected RCPT <userx@???>: SIZE value too big
 1999-03-02 09:44:33 U=CALLER F=<x@y> rejected RCPT <userx@???>: SIZE value too big
+1999-03-02 09:44:33 SMTP call from CALLER dropped: too many syntax or protocol errors (last command was "foo")
diff --git a/test/scripts/0000-Basic/0566 b/test/scripts/0000-Basic/0566
index c4dc0d8..b2c5f75 100644
--- a/test/scripts/0000-Basic/0566
+++ b/test/scripts/0000-Basic/0566
@@ -70,4 +70,57 @@ mail from:<x@y> BODY=8BITMIME SIZE=40004
 rcpt to:<userx@???>
 quit
 ****
+# no BODY, data
+exim -bs
+ehlo Testing
+mail from:<x@y>
+rcpt to:<userx@???>
+data
+Subject: test
+
+foo
+.
+quit
+****
+sleep 1
+# 7bit BODY, data
+exim -bs
+ehlo Testing
+mail from:<x@y> BODY=7BIT
+rcpt to:<userx@???>
+data
+Subject: test
+
+foo
+.
+quit
+****
+sleep 1
+# 8bit BODY, data
+exim -bs
+ehlo Testing
+mail from:<x@y> BODY=8BITMIME
+rcpt to:<userx@???>
+data
+Subject: test
+
+foo
+.
+quit
+****
+sleep 1
+# bad BODY, data
+# should fail
+1
+exim -bs
+ehlo Testing
+mail from:<x@y> BODY=wrong
+rcpt to:<userx@???>
+data
+Subject: test
+
+foo
+.
+quit
+****
 no_msglog_check
diff --git a/test/stdout/0566 b/test/stdout/0566
index cb221f6..d3465d4 100644
--- a/test/stdout/0566
+++ b/test/stdout/0566
@@ -88,3 +88,51 @@
 250 OK
 550 SIZE value too big
 221 myhost.test.ex closing connection
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250-myhost.test.ex Hello CALLER at Testing
+250-SIZE 52428800
+250-8BITMIME
+250-PIPELINING
+250 HELP
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmaX-0005vi-00
+221 myhost.test.ex closing connection
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250-myhost.test.ex Hello CALLER at Testing
+250-SIZE 52428800
+250-8BITMIME
+250-PIPELINING
+250 HELP
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmaY-0005vi-00
+221 myhost.test.ex closing connection
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250-myhost.test.ex Hello CALLER at Testing
+250-SIZE 52428800
+250-8BITMIME
+250-PIPELINING
+250 HELP
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmaZ-0005vi-00
+221 myhost.test.ex closing connection
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250-myhost.test.ex Hello CALLER at Testing
+250-SIZE 52428800
+250-8BITMIME
+250-PIPELINING
+250 HELP
+501 invalid data for BODY
+503 sender not yet given
+503-All RCPT commands were rejected with this error:
+503-503 sender not yet given
+503 Valid RCPT command must precede DATA
+500 unrecognized command
+500 unrecognized command
+500-unrecognized command
+500 Too many syntax or protocol errors