ph10 2005/04/04 11:33:49 BST
Modified files:
exim-doc/doc-txt ChangeLog NewStuff OptionLists.txt
exim-src/src functions.h globals.c globals.h mime.c
readconf.c receive.c
exim-test-orig/AutoTest/confs 598
exim-test-orig/AutoTest/log 598
exim-test-orig/AutoTest/mail 598.ph10
exim-test-orig/AutoTest/scripts 598
Log:
Added acl_not_smtp_mime. This involved a bit of refactoring of the
content scanning code. Also, updated doc/OptionList.txt with all the
content-scanning options (none had been added.)
Revision Changes Path
1.107 +2 -0 exim/exim-doc/doc-txt/ChangeLog
1.32 +4 -0 exim/exim-doc/doc-txt/NewStuff
1.7 +4 -0 exim/exim-doc/doc-txt/OptionLists.txt
1.13 +2 -2 exim/exim-src/src/functions.h
1.21 +3 -0 exim/exim-src/src/globals.c
1.14 +3 -0 exim/exim-src/src/globals.h
1.7 +5 -5 exim/exim-src/src/mime.c
1.6 +3 -0 exim/exim-src/src/readconf.c
1.13 +188 -145 exim/exim-src/src/receive.c
1.3 +1 -0 exim/exim-test-orig/AutoTest/confs/598
1.6 +9 -6 exim/exim-test-orig/AutoTest/log/598
1.6 +138 -6 exim/exim-test-orig/AutoTest/mail/598.ph10
1.3 +55 -0 exim/exim-test-orig/AutoTest/scripts/598
Index: ChangeLog
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -r1.106 -r1.107
--- ChangeLog 29 Mar 2005 15:53:12 -0000 1.106
+++ ChangeLog 4 Apr 2005 10:33:49 -0000 1.107
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.106 2005/03/29 15:53:12 ph10 Exp $
+$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.107 2005/04/04 10:33:49 ph10 Exp $
Change log file for Exim from version 4.21
-------------------------------------------
@@ -116,6 +116,8 @@
(an event I could not check), uninitialized data bytes were printed.
There were reports of junk text (parts of files, etc) appearing after
"input=".
+
+PH/21 Added acl_not_smtp_mime to allow for MIME scanning for non-SMTP messages.
A note about Exim versions 4.44 and 4.50
Index: NewStuff
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/NewStuff,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- NewStuff 29 Mar 2005 14:19:21 -0000 1.31
+++ NewStuff 4 Apr 2005 10:33:49 -0000 1.32
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.31 2005/03/29 14:19:21 ph10 Exp $
+$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.32 2005/04/04 10:33:49 ph10 Exp $
New Features in Exim
--------------------
@@ -95,6 +95,10 @@
Local/Makefile. It is RADIUSCLIENTNEW, and it requests that the new API,
in use from radiusclient 0.4.0 onwards, be used. It does not appear to be
possible to detect the different versions automatically.
+
+PH/04 There is a new option called acl_not_smtp_mime that allows you to scan
+ MIME parts in non-SMTP messages. It operates in exactly the same way as
+ acl_smtp_mime
Version 4.50
Index: OptionLists.txt
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/OptionLists.txt,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- OptionLists.txt 3 Mar 2005 08:54:59 -0000 1.6
+++ OptionLists.txt 4 Apr 2005 10:33:49 -0000 1.7
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/OptionLists.txt,v 1.6 2005/03/03 08:54:59 ph10 Exp $
+$Cambridge: exim/exim-doc/doc-txt/OptionLists.txt,v 1.7 2005/04/04 10:33:49 ph10 Exp $
LISTS OF EXIM OPTIONS
---------------------
@@ -52,6 +52,7 @@
-----------------------------------------------------------------------------------------
accept_8bitmime boolean false main 1.60
acl_not_smtp string* unset main 4.11
+acl_not_smtp_mime string* unset main 4.51 with content scan
acl_smtp_auth string* unset main 4.00
acl_smtp_connect string* unset main 4.11
acl_smtp_data string* unset main 4.00
@@ -60,6 +61,7 @@
acl_smtp_helo string* unset main 4.20
acl_smtp_mail string* unset main 4.11
acl_smtp_mailauth string* unset main 4.21
+acl_smtp_mime string* unset main 4.50 with content scan
acl_smtp_predata string* unset main 4.43
acl_smtp_quit string* unset main 4.43
acl_smtp_rcpt string* unset main 4.00
@@ -83,6 +85,7 @@
authenticated_sender string* unset smtp 4.14
authenticate_hosts host list unset smtp 3.13
auto_thaw time 0s main
+av_scanner string* + main 4.50 with content scan
batch_id string unset appendfile 4.00
unset lmtp 4.00
unset pipe 4.00
@@ -466,6 +469,7 @@
smtp_reserve_hosts host list unset main
smtp_return_error_details boolean false main 4.11
socket string* unset lmtp 4.11
+spamd_address string + main 4.50 with content scan
split_spool_directory boolean false main 1.70
spool_directory string ++ main
srv_fail_domains domain list unset dnslookup 4.43
Index: functions.h
===================================================================
RCS file: /home/cvs/exim/exim-src/src/functions.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- functions.h 8 Mar 2005 15:32:02 -0000 1.12
+++ functions.h 4 Apr 2005 10:33:49 -0000 1.13
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/functions.h,v 1.12 2005/03/08 15:32:02 tom Exp $ */
+/* $Cambridge: exim/exim-src/src/functions.h,v 1.13 2005/04/04 10:33:49 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -152,8 +152,8 @@
extern void millisleep(int);
#ifdef WITH_CONTENT_SCAN
struct mime_boundary_context;
-extern int mime_acl_check(FILE *f, struct mime_boundary_context *,
- uschar **, uschar **);
+extern int mime_acl_check(uschar *acl, FILE *f,
+ struct mime_boundary_context *, uschar **, uschar **);
extern int mime_decode(uschar **);
extern int mime_regex(uschar **);
#endif
Index: globals.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/globals.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- globals.c 22 Mar 2005 14:11:54 -0000 1.20
+++ globals.c 4 Apr 2005 10:33:49 -0000 1.21
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/globals.c,v 1.20 2005/03/22 14:11:54 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/globals.c,v 1.21 2005/04/04 10:33:49 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -160,6 +160,9 @@
tree_node *acl_anchor = NULL;
uschar *acl_not_smtp = NULL;
+#ifdef WITH_CONTENT_SCAN
+uschar *acl_not_smtp_mime = NULL;
+#endif
uschar *acl_smtp_auth = NULL;
uschar *acl_smtp_connect = NULL;
uschar *acl_smtp_data = NULL;
Index: globals.h
===================================================================
RCS file: /home/cvs/exim/exim-src/src/globals.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- globals.h 22 Mar 2005 14:11:54 -0000 1.13
+++ globals.h 4 Apr 2005 10:33:49 -0000 1.14
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/globals.h,v 1.13 2005/03/22 14:11:54 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/globals.h,v 1.14 2005/04/04 10:33:49 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -102,6 +102,9 @@
extern BOOL accept_8bitmime; /* Allow *BITMIME incoming */
extern tree_node *acl_anchor; /* Tree of named ACLs */
extern uschar *acl_not_smtp; /* ACL run for non-SMTP messages */
+#ifdef WITH_CONTENT_SCAN
+extern uschar *acl_not_smtp_mime; /* For MIME parts of ditto */
+#endif
extern uschar *acl_smtp_auth; /* ACL run for AUTH */
extern uschar *acl_smtp_connect; /* ACL run on SMTP connection */
extern uschar *acl_smtp_data; /* ACL run after DATA received */
Index: mime.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/mime.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- mime.c 8 Mar 2005 16:57:28 -0000 1.6
+++ mime.c 4 Apr 2005 10:33:49 -0000 1.7
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/mime.c,v 1.6 2005/03/08 16:57:28 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/mime.c,v 1.7 2005/04/04 10:33:49 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -502,8 +502,8 @@
}
-int mime_acl_check(FILE *f, struct mime_boundary_context *context, uschar
- **user_msgptr, uschar **log_msgptr) {
+int mime_acl_check(uschar *acl, FILE *f, struct mime_boundary_context *context,
+ uschar **user_msgptr, uschar **log_msgptr) {
int rc = OK;
uschar *header = NULL;
struct mime_boundary_context nested_context;
@@ -512,7 +512,7 @@
header = (uschar *)malloc(MIME_MAX_HEADER_SIZE+1);
if (header == NULL) {
log_write(0, LOG_PANIC,
- "acl_smtp_mime: can't allocate %d bytes of memory.", MIME_MAX_HEADER_SIZE+1);
+ "MIME ACL: can't allocate %d bytes of memory.", MIME_MAX_HEADER_SIZE+1);
return DEFER;
};
@@ -659,7 +659,7 @@
mime_is_coverletter = !(context && context->context == MBC_ATTACHMENT);
/* call ACL handling function */
- rc = acl_check(ACL_WHERE_MIME, NULL, acl_smtp_mime, user_msgptr, log_msgptr);
+ rc = acl_check(ACL_WHERE_MIME, NULL, acl, user_msgptr, log_msgptr);
mime_stream = NULL;
mime_current_boundary = NULL;
@@ -680,7 +680,7 @@
else
nested_context.context = MBC_COVERLETTER_ONESHOT;
- rc = mime_acl_check(f, &nested_context, user_msgptr, log_msgptr);
+ rc = mime_acl_check(acl, f, &nested_context, user_msgptr, log_msgptr);
if (rc != OK) break;
}
else if ( (mime_content_type != NULL) &&
Index: readconf.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/readconf.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- readconf.c 17 Feb 2005 11:58:26 -0000 1.5
+++ readconf.c 4 Apr 2005 10:33:49 -0000 1.6
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/readconf.c,v 1.5 2005/02/17 11:58:26 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/readconf.c,v 1.6 2005/04/04 10:33:49 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -135,6 +135,9 @@
{ "*set_system_filter_user", opt_bool|opt_hidden, &system_filter_uid_set },
{ "accept_8bitmime", opt_bool, &accept_8bitmime },
{ "acl_not_smtp", opt_stringptr, &acl_not_smtp },
+#ifdef WITH_CONTENT_SCAN
+ { "acl_not_smtp_mime", opt_stringptr, &acl_not_smtp_mime },
+#endif
{ "acl_smtp_auth", opt_stringptr, &acl_smtp_auth },
{ "acl_smtp_connect", opt_stringptr, &acl_smtp_connect },
{ "acl_smtp_data", opt_stringptr, &acl_smtp_data },
Index: receive.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/receive.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- receive.c 8 Mar 2005 15:32:02 -0000 1.12
+++ receive.c 4 Apr 2005 10:33:49 -0000 1.13
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/receive.c,v 1.12 2005/03/08 15:32:02 tom Exp $ */
+/* $Cambridge: exim/exim-src/src/receive.c,v 1.13 2005/04/04 10:33:49 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -510,7 +510,7 @@
{
if ((--recipients_count - count) > 0)
memmove(recipients_list + count, recipients_list + count + 1,
- (recipients_count - count)*sizeof(recipient_item));
+ (recipients_count - count)*sizeof(recipient_item));
return TRUE;
}
}
@@ -1009,6 +1009,146 @@
/*************************************************
+* Run the MIME ACL on a message *
+*************************************************/
+
+/* This code is in a subroutine so that it can be used for both SMTP
+and non-SMTP messages. It is called with a non-NULL ACL pointer.
+
+Arguments:
+ acl The ACL to run (acl_smtp_mime or acl_not_smtp_mime)
+ smtp_yield_ptr Set FALSE to kill messages after dropped connection
+ smtp_reply_ptr Where SMTP reply is being built
+ blackholed_by_ptr Where "blackholed by" message is being built
+
+Returns: TRUE to carry on; FALSE to abandon the message
+*/
+
+static BOOL
+run_mime_acl(uschar *acl, BOOL *smtp_yield_ptr, uschar **smtp_reply_ptr,
+ uschar **blackholed_by_ptr)
+{
+FILE *mbox_file;
+uschar rfc822_file_path[2048];
+unsigned long mbox_size;
+header_line *my_headerlist;
+uschar *user_msg, *log_msg;
+int mime_part_count_buffer = -1;
+int rc;
+
+memset(CS rfc822_file_path,0,2048);
+
+/* check if it is a MIME message */
+my_headerlist = header_list;
+while (my_headerlist != NULL) {
+ /* skip deleted headers */
+ if (my_headerlist->type == '*') {
+ my_headerlist = my_headerlist->next;
+ continue;
+ };
+ if (strncmpic(my_headerlist->text, US"Content-Type:", 13) == 0) {
+ DEBUG(D_receive) debug_printf("Found Content-Type: header - executing acl_smtp_mime.\n");
+ goto DO_MIME_ACL;
+ };
+ my_headerlist = my_headerlist->next;
+};
+
+DEBUG(D_receive) debug_printf("No Content-Type: header - presumably not a MIME message.\n");
+return TRUE;
+
+DO_MIME_ACL:
+/* make sure the eml mbox file is spooled up */
+mbox_file = spool_mbox(&mbox_size);
+if (mbox_file == NULL) {
+ /* error while spooling */
+ log_write(0, LOG_MAIN|LOG_PANIC,
+ "acl_smtp_mime: error while creating mbox spool file, message temporarily rejected.");
+ Uunlink(spool_name);
+ unspool_mbox();
+ smtp_respond(451, TRUE, US"temporary local problem");
+ message_id[0] = 0; /* Indicate no message accepted */
+ *smtp_reply_ptr = US""; /* Indicate reply already sent */
+ return FALSE; /* Indicate skip to end of receive function */
+};
+
+mime_is_rfc822 = 0;
+
+MIME_ACL_CHECK:
+mime_part_count = -1;
+rc = mime_acl_check(acl, mbox_file, NULL, &user_msg, &log_msg);
+fclose(mbox_file);
+
+if (Ustrlen(rfc822_file_path) > 0) {
+ mime_part_count = mime_part_count_buffer;
+
+ if (unlink(CS rfc822_file_path) == -1) {
+ log_write(0, LOG_PANIC,
+ "acl_smtp_mime: can't unlink RFC822 spool file, skipping.");
+ goto END_MIME_ACL;
+ };
+};
+
+/* check if we must check any message/rfc822 attachments */
+if (rc == OK) {
+ uschar temp_path[1024];
+ int n;
+ struct dirent *entry;
+ DIR *tempdir;
+
+ snprintf(CS temp_path, 1024, "%s/scan/%s", spool_directory, message_id);
+
+ tempdir = opendir(CS temp_path);
+ n = 0;
+ do {
+ entry = readdir(tempdir);
+ if (entry == NULL) break;
+ if (strncmpic(US entry->d_name,US"__rfc822_",9) == 0) {
+ snprintf(CS rfc822_file_path, 2048,"%s/scan/%s/%s", spool_directory, message_id, entry->d_name);
+ debug_printf("RFC822 attachment detected: running MIME ACL for '%s'\n", rfc822_file_path);
+ break;
+ };
+ } while (1);
+ closedir(tempdir);
+
+ if (entry != NULL) {
+ mbox_file = Ufopen(rfc822_file_path,"r");
+ if (mbox_file == NULL) {
+ log_write(0, LOG_PANIC,
+ "acl_smtp_mime: can't open RFC822 spool file, skipping.");
+ unlink(CS rfc822_file_path);
+ goto END_MIME_ACL;
+ };
+ /* set RFC822 expansion variable */
+ mime_is_rfc822 = 1;
+ mime_part_count_buffer = mime_part_count;
+ goto MIME_ACL_CHECK;
+ };
+};
+
+END_MIME_ACL:
+add_acl_headers(US"MIME");
+if (rc == DISCARD)
+ {
+ recipients_count = 0;
+ *blackholed_by_ptr = US"MIME ACL";
+ }
+else if (rc != OK)
+ {
+ Uunlink(spool_name);
+ unspool_mbox();
+ if (smtp_handle_acl_fail(ACL_WHERE_MIME, rc, user_msg, log_msg) != 0)
+ *smtp_yield_ptr = FALSE; /* No more messsages after dropped connection */
+ *smtp_reply_ptr = US""; /* Indicate reply already sent */
+ message_id[0] = 0; /* Indicate no message accepted */
+ return FALSE; /* Cause skip to end of receive function */
+ };
+
+return TRUE;
+}
+
+
+
+/*************************************************
* Receive message *
*************************************************/
@@ -2754,127 +2894,13 @@
#endif
#ifdef WITH_CONTENT_SCAN
- /* MIME ACL hook */
- if (acl_smtp_mime != NULL && recipients_count > 0)
- {
- FILE *mbox_file;
- uschar rfc822_file_path[2048];
- unsigned long mbox_size;
- header_line *my_headerlist;
- uschar *user_msg, *log_msg;
- int mime_part_count_buffer = -1;
-
- memset(CS rfc822_file_path,0,2048);
-
- /* check if it is a MIME message */
- my_headerlist = header_list;
- while (my_headerlist != NULL) {
- /* skip deleted headers */
- if (my_headerlist->type == '*') {
- my_headerlist = my_headerlist->next;
- continue;
- };
- if (strncmpic(my_headerlist->text, US"Content-Type:", 13) == 0) {
- DEBUG(D_receive) debug_printf("Found Content-Type: header - executing acl_smtp_mime.\n");
- goto DO_MIME_ACL;
- };
- my_headerlist = my_headerlist->next;
- };
-
- DEBUG(D_receive) debug_printf("No Content-Type: header - presumably not a MIME message.\n");
- goto NO_MIME_ACL;
-
- DO_MIME_ACL:
- /* make sure the eml mbox file is spooled up */
- mbox_file = spool_mbox(&mbox_size);
- if (mbox_file == NULL) {
- /* error while spooling */
- log_write(0, LOG_MAIN|LOG_PANIC,
- "acl_smtp_mime: error while creating mbox spool file, message temporarily rejected.");
- Uunlink(spool_name);
- unspool_mbox();
- smtp_respond(451, TRUE, US"temporary local problem");
- message_id[0] = 0; /* Indicate no message accepted */
- smtp_reply = US""; /* Indicate reply already sent */
- goto TIDYUP; /* Skip to end of function */
- };
-
- mime_is_rfc822 = 0;
-
- MIME_ACL_CHECK:
- mime_part_count = -1;
- rc = mime_acl_check(mbox_file, NULL, &user_msg, &log_msg);
- fclose(mbox_file);
-
- if (Ustrlen(rfc822_file_path) > 0) {
- mime_part_count = mime_part_count_buffer;
-
- if (unlink(CS rfc822_file_path) == -1) {
- log_write(0, LOG_PANIC,
- "acl_smtp_mime: can't unlink RFC822 spool file, skipping.");
- goto END_MIME_ACL;
- };
- };
-
- /* check if we must check any message/rfc822 attachments */
- if (rc == OK) {
- uschar temp_path[1024];
- int n;
- struct dirent *entry;
- DIR *tempdir;
-
- snprintf(CS temp_path, 1024, "%s/scan/%s", spool_directory, message_id);
-
- tempdir = opendir(CS temp_path);
- n = 0;
- do {
- entry = readdir(tempdir);
- if (entry == NULL) break;
- if (strncmpic(US entry->d_name,US"__rfc822_",9) == 0) {
- snprintf(CS rfc822_file_path, 2048,"%s/scan/%s/%s", spool_directory, message_id, entry->d_name);
- debug_printf("RFC822 attachment detected: running MIME ACL for '%s'\n", rfc822_file_path);
- break;
- };
- } while (1);
- closedir(tempdir);
-
- if (entry != NULL) {
- mbox_file = Ufopen(rfc822_file_path,"r");
- if (mbox_file == NULL) {
- log_write(0, LOG_PANIC,
- "acl_smtp_mime: can't open RFC822 spool file, skipping.");
- unlink(CS rfc822_file_path);
- goto END_MIME_ACL;
- };
- /* set RFC822 expansion variable */
- mime_is_rfc822 = 1;
- mime_part_count_buffer = mime_part_count;
- goto MIME_ACL_CHECK;
- };
- };
-
- END_MIME_ACL:
- add_acl_headers(US"MIME");
- if (rc == DISCARD)
- {
- recipients_count = 0;
- blackholed_by = US"MIME ACL";
- }
- else if (rc != OK)
- {
- Uunlink(spool_name);
- unspool_mbox();
- if (smtp_handle_acl_fail(ACL_WHERE_MIME, rc, user_msg, log_msg) != 0)
- smtp_yield = FALSE; /* No more messsages after dropped connection */
- smtp_reply = US""; /* Indicate reply already sent */
- message_id[0] = 0; /* Indicate no message accepted */
- goto TIDYUP; /* Skip to end of function */
- };
- }
-
- NO_MIME_ACL:
+ if (acl_smtp_mime != NULL &&
+ !run_mime_acl(acl_smtp_mime, &smtp_yield, &smtp_reply, &blackholed_by))
+ goto TIDYUP;
#endif /* WITH_CONTENT_SCAN */
+ /* Check the recipients count again, as the MIME ACL might have changed
+ them. */
if (acl_smtp_data != NULL && recipients_count > 0)
{
@@ -2906,38 +2932,55 @@
/* Handle non-SMTP and batch SMTP (i.e. non-interactive) messages. Note that
we cannot take different actions for permanent and temporary rejections. */
- else if (acl_not_smtp != NULL)
+ else
{
- uschar *user_msg, *log_msg;
- rc = acl_check(ACL_WHERE_NOTSMTP, NULL, acl_not_smtp, &user_msg, &log_msg);
- if (rc == DISCARD)
- {
- recipients_count = 0;
- blackholed_by = US"non-SMTP ACL";
- if (log_msg != NULL) blackhole_log_msg = string_sprintf(": %s", log_msg);
- }
- else if (rc != OK)
- {
- Uunlink(spool_name);
- log_write(0, LOG_MAIN|LOG_REJECT, "F=<%s> rejected by non-SMTP ACL: %s",
- sender_address, log_msg);
- if (user_msg == NULL) user_msg = US"local configuration problem";
- if (smtp_batched_input)
+
+#ifdef WITH_CONTENT_SCAN
+ if (acl_not_smtp_mime != NULL &&
+ !run_mime_acl(acl_not_smtp_mime, &smtp_yield, &smtp_reply,
+ &blackholed_by))
+ goto TIDYUP;
+#endif /* WITH_CONTENT_SCAN */
+
+ if (acl_not_smtp != NULL)
+ {
+ uschar *user_msg, *log_msg;
+ rc = acl_check(ACL_WHERE_NOTSMTP, NULL, acl_not_smtp, &user_msg, &log_msg);
+ if (rc == DISCARD)
{
- moan_smtp_batch(NULL, "%d %s", 550, user_msg);
- /* Does not return */
+ recipients_count = 0;
+ blackholed_by = US"non-SMTP ACL";
+ if (log_msg != NULL)
+ blackhole_log_msg = string_sprintf(": %s", log_msg);
}
- else
+ else if (rc != OK)
{
- fseek(data_file, (long int)SPOOL_DATA_START_OFFSET, SEEK_SET);
- give_local_error(ERRMESS_LOCAL_ACL, user_msg,
- US"message rejected by non-SMTP ACL: ", error_rc, data_file,
- header_list);
- /* Does not return */
+ Uunlink(spool_name);
+#ifdef WITH_CONTENT_SCAN
+ unspool_mbox();
+#endif
+ log_write(0, LOG_MAIN|LOG_REJECT, "F=<%s> rejected by non-SMTP ACL: %s",
+ sender_address, log_msg);
+ if (user_msg == NULL) user_msg = US"local configuration problem";
+ if (smtp_batched_input)
+ {
+ moan_smtp_batch(NULL, "%d %s", 550, user_msg);
+ /* Does not return */
+ }
+ else
+ {
+ fseek(data_file, (long int)SPOOL_DATA_START_OFFSET, SEEK_SET);
+ give_local_error(ERRMESS_LOCAL_ACL, user_msg,
+ US"message rejected by non-SMTP ACL: ", error_rc, data_file,
+ header_list);
+ /* Does not return */
+ }
}
+ add_acl_headers(US"non-SMTP");
}
- add_acl_headers(US"non-SMTP");
}
+
+ /* The applicable ACLs have been run */
if (deliver_freeze) frozen_by = US"ACL"; /* for later logging */
if (queue_only_policy) queued_by = US"ACL";
Index: 598
===================================================================
RCS file: /home/cvs/exim/exim-test-orig/AutoTest/confs/598,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- 598 29 Dec 2004 16:34:31 -0000 1.2
+++ 598 4 Apr 2005 10:33:49 -0000 1.3
@@ -15,6 +15,7 @@
acl_smtp_data = check_data
acl_not_smtp = check_data
acl_smtp_mime = check_mime
+acl_not_smtp_mime = check_mime
# ----- ACL -----
Index: 598
===================================================================
RCS file: /home/cvs/exim/exim-test-orig/AutoTest/log/598,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- 598 4 Jan 2005 11:28:17 -0000 1.5
+++ 598 4 Apr 2005 10:33:49 -0000 1.6
@@ -1,18 +1,21 @@
-1999-03-02 09:44:33 10HmaX-0005vi-00 <= ph10@??? U=ph10 P=local-esmtp S=1080
+1999-03-02 09:44:33 10HmaX-0005vi-00 <= ph10@??? U=ph10 P=local-esmtp S=1066
1999-03-02 09:44:33 10HmaX-0005vi-00 => ph10 <ph10@???> R=r1 T=t1
1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
-1999-03-02 09:44:33 10HmaY-0005vi-00 <= ph10@??? U=ph10 P=local-esmtp S=1198 id=41C2F849.3060203@???
+1999-03-02 09:44:33 10HmaY-0005vi-00 <= ph10@??? U=ph10 P=local-esmtp S=1184 id=41C2F849.3060203@???
1999-03-02 09:44:33 10HmaY-0005vi-00 => ph10 <ph10@???> R=r1 T=t1
1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
-1999-03-02 09:44:33 10HmaZ-0005vi-00 <= ph10@??? U=ph10 P=local-esmtp S=1501 id=abcde
+1999-03-02 09:44:33 10HmaZ-0005vi-00 <= ph10@??? U=ph10 P=local-esmtp S=1487 id=abcde
1999-03-02 09:44:33 10HmaZ-0005vi-00 => ph10 <ph10@???> R=r1 T=t1
1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbA-0005vi-00 <= ph10@??? U=ph10 P=local-esmtp S=1314 id=41C2F849.3060203@???
+1999-03-02 09:44:33 10HmbA-0005vi-00 <= ph10@??? U=ph10 P=local-esmtp S=1300 id=41C2F849.3060203@???
1999-03-02 09:44:33 10HmbA-0005vi-00 => ph10 <ph10@???> R=r1 T=t1
1999-03-02 09:44:33 10HmbA-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbB-0005vi-00 <= ph10@??? U=ph10 P=local-esmtp S=4384 id=20041217133501.GA3058@???
+1999-03-02 09:44:33 10HmbB-0005vi-00 <= ph10@??? U=ph10 P=local-esmtp S=4370 id=20041217133501.GA3058@???
1999-03-02 09:44:33 10HmbB-0005vi-00 => ph10 <ph10@???> R=r1 T=t1
1999-03-02 09:44:33 10HmbB-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbC-0005vi-00 <= ph10@??? U=ph10 P=local S=1058
+1999-03-02 09:44:33 10HmbC-0005vi-00 <= ph10@??? U=ph10 P=local S=1044
1999-03-02 09:44:33 10HmbC-0005vi-00 => ph10 <ph10@???> R=r1 T=t1
1999-03-02 09:44:33 10HmbC-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbD-0005vi-00 <= ph10@??? U=ph10 P=local S=4348 id=20041217133501.GA3058@???
+1999-03-02 09:44:33 10HmbD-0005vi-00 => ph10 <ph10@???> R=r1 T=t1
+1999-03-02 09:44:33 10HmbD-0005vi-00 Completed
Index: 598.ph10
===================================================================
RCS file: /home/cvs/exim/exim-test-orig/AutoTest/mail/598.ph10,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- 598.ph10 4 Jan 2005 11:28:17 -0000 1.5
+++ 598.ph10 4 Apr 2005 10:33:49 -0000 1.6
@@ -9,7 +9,7 @@
X-Spam_score: -0.7
X-Spam_score_int: -6
X-Spam_bar: /
-X-Spam_report: Spam detection software, running on the system "xoanon.csi.cam.ac.uk", has
+X-Spam_report: Spam detection software, running on the system "xoanon", has
identified this incoming email as possible spam. The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email. If you have any questions, see
@@ -39,7 +39,7 @@
X-Spam_score: -1.7
X-Spam_score_int: -16
X-Spam_bar: -
-X-Spam_report: Spam detection software, running on the system "xoanon.csi.cam.ac.uk", has
+X-Spam_report: Spam detection software, running on the system "xoanon", has
identified this incoming email as possible spam. The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email. If you have any questions, see
@@ -68,7 +68,7 @@
X-Spam_score: 1.9
X-Spam_score_int: 19
X-Spam_bar: +
-X-Spam_report: Spam detection software, running on the system "xoanon.csi.cam.ac.uk", has
+X-Spam_report: Spam detection software, running on the system "xoanon", has
identified this incoming email as possible spam. The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email. If you have any questions, see
@@ -104,7 +104,7 @@
X-Spam_score: -1.7
X-Spam_score_int: -16
X-Spam_bar: -
-X-Spam_report: Spam detection software, running on the system "xoanon.csi.cam.ac.uk", has
+X-Spam_report: Spam detection software, running on the system "xoanon", has
identified this incoming email as possible spam. The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email. If you have any questions, see
@@ -195,7 +195,7 @@
X-Spam_score: -1.7
X-Spam_score_int: -16
X-Spam_bar: -
-X-Spam_report: Spam detection software, running on the system "xoanon.csi.cam.ac.uk", has
+X-Spam_report: Spam detection software, running on the system "xoanon", has
identified this incoming email as possible spam. The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email. If you have any questions, see
@@ -265,7 +265,7 @@
X-Spam_score: -0.7
X-Spam_score_int: -6
X-Spam_bar: /
-X-Spam_report: Spam detection software, running on the system "xoanon.csi.cam.ac.uk", has
+X-Spam_report: Spam detection software, running on the system "xoanon", has
identified this incoming email as possible spam. The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email. If you have any questions, see
@@ -280,4 +280,136 @@
X-Router-SSint: -6
A message without any headers.
+
+From ph10@??? Tue Mar 02 09:44:33 1999
+Received: from ph10 by myhost.test.ex with local (Exim x.yz)
+ id 10HmbD-0005vi-00
+ for ph10@???; Tue, 2 Mar 1999 09:44:33 +0000
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+From: J Caesar <eximusers@???>
+To: exim-users@???
+Message-ID: <20041217133501.GA3058@???>
+Mime-Version: 1.0
+Content-Type: multipart/mixed; boundary="T4sUOijqQbZv57TR"
+Content-Disposition: inline
+Subject: [exim] Re: Bug#286074: eximstats: uses message count as data for
+ the "volume" charts
+X-BeenThere: exim-users@???
+X-Mailman-Version: 2.1.5
+Precedence: list
+Sender: Philip Hazel <ph10@???>
+X-0-content-type: multipart/mixed
+X-0-filename:
+X-0-charset:
+X-0-boundary: T4sUOijqQbZv57TR
+X-0-content-disposition: inline
+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: /source/exim4/AutoTest/spool/scan/10HmbD-0005vi-00/10HmbD-0005vi-00-00000
+X-0-content-size: 2
+X-1-content-type: text/plain
+X-1-filename:
+X-1-charset: us-ascii
+X-1-boundary:
+X-1-content-disposition: inline
+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: /source/exim4/AutoTest/spool/scan/10HmbD-0005vi-00/10HmbD-0005vi-00-00001
+X-1-content-size: 1
+X-2-content-type: text/plain
+X-2-filename: working-patch
+X-2-charset: us-ascii
+X-2-boundary:
+X-2-content-disposition: attachment
+X-2-content-transfer-encoding:
+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: /source/exim4/AutoTest/spool/scan/10HmbD-0005vi-00/10HmbD-0005vi-00-00002
+X-2-content-size: 1
+X-3-content-type: text/plain
+X-3-filename:
+X-3-charset: us-ascii
+X-3-boundary:
+X-3-content-disposition: inline
+X-3-content-transfer-encoding: 7bit
+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: /source/exim4/AutoTest/spool/scan/10HmbD-0005vi-00/10HmbD-0005vi-00-00003
+X-3-content-size: 1
+X-Spam_score: -1.7
+X-Spam_score_int: -16
+X-Spam_bar: -
+X-Spam_report: Spam detection software, running on the system "xoanon", has
+ identified this incoming email as possible spam. The original message
+ has been attached to this so you can view it (if it isn't spam) or label
+ similar future email. If you have any questions, see
+ the administrator of that system for details.
+ Content preview: There was a part of the patch missing, complete one is
+ attached. sorry for wasting your time --- /usr/sbin/eximstats
+ 2004-12-17 13:36:44.381983753 +0100 +++ eximstats 2004-12-17
+ 13:47:37.763185260 +0100 @@ -1107,11 +1107,11 @@ if (scalar
+ @chartdatanames < $ntopchart) { push(@chartdatanames, $key); -
+ push(@chartdatavals, $$m_count{$key}); + push(@chartdatavals,
+ $$m_data{$key}); } else { - $chartotherval += $$m_count{$key}; +
+ $chartotherval += $$m_data{$key}; } } push(@chartdatanames, "Other");
+ [...]
+ Content analysis details: (-1.7 points, 5.0 required)
+ pts rule name description
+ ---- ---------------------- --------------------------------------------------
+ 1.1 DATE_IN_PAST_96_XX Date: is 96 hours or more before Received: date
+ -2.8 ALL_TRUSTED Did not pass through any untrusted hosts
+X-Router-SSint: -16
+
+--T4sUOijqQbZv57TR
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+
+There was a part of the patch missing, complete one is attached.
+ sorry for wasting your time
+
+--T4sUOijqQbZv57TR
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: attachment; filename=working-patch
+
+--- /usr/sbin/eximstats 2004-12-17 13:36:44.381983753 +0100
++++ eximstats 2004-12-17 13:47:37.763185260 +0100
+@@ -1107,11 +1107,11 @@
+ if (scalar @chartdatanames < $ntopchart)
+ {
+ push(@chartdatanames, $key);
+- push(@chartdatavals, $$m_count{$key});
++ push(@chartdatavals, $$m_data{$key});
+ }
+ else
+ {
+- $chartotherval += $$m_count{$key};
++ $chartotherval += $$m_data{$key};
+ }
+ }
+ push(@chartdatanames, "Other");
+
+--T4sUOijqQbZv57TR
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+--
+## List details at http://www.exim.org/mailman/listinfo/exim-users Exim details at http://www.exim.org/ ##
+
+--T4sUOijqQbZv57TR--
Index: 598
===================================================================
RCS file: /home/cvs/exim/exim-test-orig/AutoTest/scripts/598,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- 598 29 Dec 2004 16:34:31 -0000 1.2
+++ 598 4 Apr 2005 10:33:49 -0000 1.3
@@ -123,3 +123,58 @@
A message without any headers.
.
****
+# Non-smtp MIME message
+0
+exim -odi ph10@???
+Date: Fri, 17 Dec 2004 14:35:01 +0100
+From: J Caesar <eximusers@???>
+To: exim-users@???
+Message-ID: <20041217133501.GA3058@???>
+Mime-Version: 1.0
+Content-Type: multipart/mixed; boundary="T4sUOijqQbZv57TR"
+Content-Disposition: inline
+Subject: [exim] Re: Bug#286074: eximstats: uses message count as data for
+ the "volume" charts
+X-BeenThere: exim-users@???
+X-Mailman-Version: 2.1.5
+Precedence: list
+
+--T4sUOijqQbZv57TR
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+
+There was a part of the patch missing, complete one is attached.
+ sorry for wasting your time
+
+--T4sUOijqQbZv57TR
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: attachment; filename=working-patch
+
+--- /usr/sbin/eximstats 2004-12-17 13:36:44.381983753 +0100
++++ eximstats 2004-12-17 13:47:37.763185260 +0100
+@@ -1107,11 +1107,11 @@
+ if (scalar @chartdatanames < $ntopchart)
+ {
+ push(@chartdatanames, $key);
+- push(@chartdatavals, $$m_count{$key});
++ push(@chartdatavals, $$m_data{$key});
+ }
+ else
+ {
+- $chartotherval += $$m_count{$key};
++ $chartotherval += $$m_data{$key};
+ }
+ }
+ push(@chartdatanames, "Other");
+
+--T4sUOijqQbZv57TR
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+--
+## List details at http://www.exim.org/mailman/listinfo/exim-users Exim details at http://www.exim.org/ ##
+
+--T4sUOijqQbZv57TR--
+****