summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/doc-docbook/spec.xfpt7
-rw-r--r--doc/doc-txt/ChangeLog4
-rw-r--r--doc/doc-txt/NewStuff2
-rw-r--r--src/ACKNOWLEDGMENTS1
-rw-r--r--src/src/globals.c2
-rw-r--r--src/src/globals.h1
-rw-r--r--src/src/macros.h1
-rw-r--r--src/src/receive.c9
-rw-r--r--src/src/smtp_in.c18
-rw-r--r--test/confs/05663
-rw-r--r--test/log/056610
-rw-r--r--test/mail/0566.userx39
-rw-r--r--test/rejectlog/05661
-rw-r--r--test/scripts/0000-Basic/056653
-rw-r--r--test/stdout/056648
15 files changed, 194 insertions, 5 deletions
diff --git a/doc/doc-docbook/spec.xfpt b/doc/doc-docbook/spec.xfpt
index 4ba31a0ce..255513921 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 84948f6ac..db1c5254c 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 680d96cd1..2982fc4b5 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 a66512f36..4361d6776 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 bcbe12d82..ba6c8c6ba 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 16caa41e9..a27f62cfe 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 cec4733f6..305200211 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 7b51805dc..8ac381add 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 b1fea9daf..e3746d99d 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 e7a91c694..83e97fb18 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 e59c7336d..0922615b3 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@test.ex>: SIZE value too big
1999-03-02 09:44:33 U=CALLER F=<x@y> rejected RCPT <userx@test.ex>: SIZE value too big
+1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss M8S=0
+1999-03-02 09:44:33 10HmaX-0005vi-00 => userx <userx@test.ex> 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@myhost.test.ex U=CALLER P=local-esmtp S=sss M8S=7
+1999-03-02 09:44:33 10HmaY-0005vi-00 => userx <userx@test.ex> 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@myhost.test.ex U=CALLER P=local-esmtp S=sss M8S=8
+1999-03-02 09:44:33 10HmaZ-0005vi-00 => userx <userx@test.ex> 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 000000000..e5f0975da
--- /dev/null
+++ b/test/mail/0566.userx
@@ -0,0 +1,39 @@
+From CALLER@myhost.test.ex 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@myhost.test.ex>)
+ id 10HmaX-0005vi-00
+ for userx@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
+Subject: test
+Message-Id: <E10HmaX-0005vi-00@myhost.test.ex>
+From: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+foo
+
+From CALLER@myhost.test.ex 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@myhost.test.ex>)
+ id 10HmaY-0005vi-00
+ for userx@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
+Subject: test
+Message-Id: <E10HmaY-0005vi-00@myhost.test.ex>
+From: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+foo
+
+From CALLER@myhost.test.ex 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@myhost.test.ex>)
+ id 10HmaZ-0005vi-00
+ for userx@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
+Subject: test
+Message-Id: <E10HmaZ-0005vi-00@myhost.test.ex>
+From: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+foo
+
diff --git a/test/rejectlog/0566 b/test/rejectlog/0566
index 67b5dc277..7a420d042 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@test.ex>: SIZE value too big
1999-03-02 09:44:33 U=CALLER F=<x@y> rejected RCPT <userx@test.ex>: 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 c4dc0d8aa..b2c5f75b4 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@test.ex>
quit
****
+# no BODY, data
+exim -bs
+ehlo Testing
+mail from:<x@y>
+rcpt to:<userx@test.ex>
+data
+Subject: test
+
+foo
+.
+quit
+****
+sleep 1
+# 7bit BODY, data
+exim -bs
+ehlo Testing
+mail from:<x@y> BODY=7BIT
+rcpt to:<userx@test.ex>
+data
+Subject: test
+
+foo
+.
+quit
+****
+sleep 1
+# 8bit BODY, data
+exim -bs
+ehlo Testing
+mail from:<x@y> BODY=8BITMIME
+rcpt to:<userx@test.ex>
+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@test.ex>
+data
+Subject: test
+
+foo
+.
+quit
+****
no_msglog_check
diff --git a/test/stdout/0566 b/test/stdout/0566
index cb221f611..d3465d49e 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