Make spam-checking in Exim really work
authorroot <root@deleuze.hcoop.net>
Thu, 27 Sep 2007 03:10:02 +0000 (23:10 -0400)
committerroot <root@deleuze.hcoop.net>
Tue, 17 Jun 2008 04:21:51 +0000 (00:21 -0400)
conf.d/acl/40_exim4-config_check_data
conf.d/router/250_exim4-config_spamcheck_vmail [new file with mode: 0644]
conf.d/router/550_exim4-config_spamcheck_localuser [new file with mode: 0644]
conf.d/transport/20_exim4-config_spamcheck [new file with mode: 0644]

index 5f8f25b..fb219a0 100644 (file)
@@ -61,15 +61,6 @@ acl_check_data:
   #             X-Spam_bar: $spam_bar\n\
   #             X-Spam_report: $spam_report
 
-  # hcoop-change: Our more-competent solution
-  warn
-    # Only run through spamassassin if the user wants this
-    condition = ${if exists{/etc/spamassassin/addrs/${local_part}@${domain}}\
-                     {yes}{no}}
-    spam = nobody:true
-    add_header = X-Spam-Score: $spam_score ($spam_bar)
-    add_header = X-Spam-Report: $spam_report
-
 
   # This hook allows you to hook in your own ACLs without having to
   # modify this file. If you do it like we suggest, you'll end up with
diff --git a/conf.d/router/250_exim4-config_spamcheck_vmail b/conf.d/router/250_exim4-config_spamcheck_vmail
new file mode 100644 (file)
index 0000000..1b46a4a
--- /dev/null
@@ -0,0 +1,9 @@
+# hcoop-change: Pass email through spamc if it has not already been
+# scanned.
+
+spamcheck_router_vmail:
+  no_verify
+  condition = "${if !eq {$received_protocol}{spam-scanned} {1}{0}}"
+  require_files = /etc/spamassassin/addrs/${local_part}@${domain}
+  driver = accept
+  transport = spamcheck
diff --git a/conf.d/router/550_exim4-config_spamcheck_localuser b/conf.d/router/550_exim4-config_spamcheck_localuser
new file mode 100644 (file)
index 0000000..1bedd3f
--- /dev/null
@@ -0,0 +1,10 @@
+# hcoop-change: Pass email through spamc if its recipient is a valid
+# HCoop user and it has not yet been scanned.
+
+spamcheck_router_localuser:
+  no_verify
+  condition = "${if !eq {$received_protocol}{spam-scanned} {1}{0}}"
+  check_local_user
+  require_files = /etc/spamassassin/addrs/${local_part}@localhost
+  driver = accept
+  transport = spamcheck
diff --git a/conf.d/transport/20_exim4-config_spamcheck b/conf.d/transport/20_exim4-config_spamcheck
new file mode 100644 (file)
index 0000000..c44f0a4
--- /dev/null
@@ -0,0 +1,18 @@
+# hcoop-change: Pass email through spamc, back through exim again,
+# marking it as scanned.  Also, remove any pre-existing X-Spam
+# headers from the message.
+
+spamcheck:
+  debug_print = "T: spamassassin_pipe for $local_part@$domain"
+  driver = pipe
+  command = /usr/sbin/exim4 -oMr spam-scanned -bS
+  use_bsmtp
+  transport_filter = /usr/bin/spamc
+  home_directory = "/tmp/exim4"
+  current_directory = "/tmp/exim4"
+  user = Debian-exim
+  group = Debian-exim
+  return_fail_output
+  message_prefix =
+  message_suffix =
+  headers_remove = X-Spam-Flag:X-Spam-Status:X-Spam-Level