Gnus development mailing list
 help / color / mirror / Atom feed
From: asjo@koldfront.dk (Adam Sjøgren)
Subject: Re: CRM114 Mailfilter and spam.el
Date: Tue, 06 Apr 2004 23:36:54 +0200	[thread overview]
Message-ID: <87brm4ss95.fsf@virgil.koldfront.dk> (raw)
In-Reply-To: <87ptangacp.fsf@virgil.koldfront.dk>

[-- Attachment #1: Type: text/plain, Size: 371 bytes --]

On Sun, 04 Apr 2004 15:07:34 +0200, Adam wrote:

>> [untested!]

> I will test, thanks!

Works great, thanks again.

Attached is a patch with the changes you suggested incorporated.


  Best regards,

-- 
 "Do not feed the oysters under the clouds"                   Adam Sjøgren
                                                         asjo@koldfront.dk

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: crm114-mailfilter-2.patch --]
[-- Type: text/x-patch, Size: 10232 bytes --]

Index: spam.el
===================================================================
RCS file: /usr/local/cvsroot/gnus/lisp/spam.el,v
retrieving revision 7.27
diff -u -r7.27 spam.el
--- spam.el	2 Apr 2004 19:09:16 -0000	7.27
+++ spam.el	6 Apr 2004 21:34:42 -0000
@@ -263,6 +263,11 @@
   :type 'boolean
   :group 'spam)
 
+(defcustom spam-use-crm114 nil
+  "Whether CRM114 Mailfilter should be used by `spam-split'."
+  :type 'boolean
+  :group 'spam)
+
 (defcustom spam-install-hooks (or
 			       spam-use-dig
 			       spam-use-gmane-xref
@@ -281,7 +286,8 @@
 			       spam-use-BBDB-exclusive
 			       spam-use-ifile
 			       spam-use-stat
-			       spam-use-spamoracle)
+			       spam-use-spamoracle
+                               spam-use-crm114)
   "Whether the spam hooks should be installed.
 Default to t if one of the spam-use-* variables is set."
   :group 'spam
@@ -515,6 +521,53 @@
   :type 'string
   :group 'spam-spamassassin)
 
+(defgroup spam-crm114 nil
+  "Spam CRM114 Mailfilter configuration."
+  :group 'spam)
+
+(defcustom spam-crm114-program (executable-find "mailfilter.crm")
+  "File path of the CRM114 Mailfilter executable program."
+  :type '(choice (file :tag "Location of CRM114 Mailfilter")
+		 (const :tag "CRM114 Mailfilter is not installed"))
+  :group 'spam-crm114)
+
+(defcustom spam-crm114-header "X-CRM114-Status"
+  "The header that CRM114 Mailfilter inserts in messages."
+  :type 'string
+  :group 'spam-crm114)
+
+(defcustom spam-crm114-spam-switch "--learnspam"
+  "The switch that CRM114 Mailfilter uses to register spam messages."
+  :type 'string
+  :group 'spam-crm114)
+
+(defcustom spam-crm114-ham-switch "--learnnonspam"
+  "The switch that CRM114 Mailfilter uses to register ham messages."
+  :type 'string
+  :group 'spam-crm114)
+
+(defcustom spam-crm114-spam-strong-switch "--UNKNOWN"
+  "The switch that CRM114 Mailfilter uses to unregister ham messages."
+  :type 'string
+  :group 'spam-crm114)
+
+(defcustom spam-crm114-ham-strong-switch "--UNKNOWN"
+  "The switch that CRM114 Mailfilter uses to unregister spam messages."
+  :type 'string
+  :group 'spam-crm114)
+
+(defcustom spam-crm114-positive-spam-header "^SPAM"
+  "The regex on `spam-crm114-header' for positive spam identification."
+  :type 'regexp
+  :group 'spam-crm114)
+
+(defcustom spam-crm114-database-directory nil
+  "Directory path of the CRM114 Mailfilter databases."
+  :type '(choice (directory
+		  :tag "Location of the CRM114 Mailfilter database directory")
+		 (const :tag "Use the default"))
+  :group 'spam-crm114)
+
 ;;; Key bindings for spam control.
 
 (gnus-define-keys gnus-summary-mode-map
@@ -605,6 +658,7 @@
     (gnus-group-spam-exit-processor-stat         spam spam-use-stat)
     (gnus-group-spam-exit-processor-spamoracle   spam spam-use-spamoracle)
     (gnus-group-spam-exit-processor-spamassassin spam spam-use-spamassassin)
+    (gnus-group-spam-exit-processor-crm114       spam spam-use-crm114)
     (gnus-group-ham-exit-processor-ifile         ham spam-use-ifile)
     (gnus-group-ham-exit-processor-bogofilter    ham spam-use-bogofilter)
     (gnus-group-ham-exit-processor-stat          ham spam-use-stat)
@@ -612,7 +666,8 @@
     (gnus-group-ham-exit-processor-BBDB          ham spam-use-BBDB)
     (gnus-group-ham-exit-processor-copy          ham spam-use-ham-copy)
     (gnus-group-ham-exit-processor-spamassassin  ham spam-use-spamassassin)
-    (gnus-group-ham-exit-processor-spamoracle    ham spam-use-spamoracle))
+    (gnus-group-ham-exit-processor-spamoracle    ham spam-use-spamoracle)
+    (gnus-group-ham-exit-processor-crm114        ham spam-use-crm114))
   "The `spam-list-of-processors' list.
 This list contains pairs associating a ham/spam exit processor
 variable with a classification and a spam-use-* variable.")
@@ -657,6 +712,9 @@
 (defun spam-group-spam-processor-spamoracle-p (group)
   (spam-group-processor-p group 'gnus-group-spam-exit-processor-spamoracle))
 
+(defun spam-group-spam-processor-crm114-p (group)
+  (spam-group-processor-p group 'gnus-group-spam-exit-processor-crm114))
+
 (defun spam-group-ham-processor-bogofilter-p (group)
   (spam-group-processor-p group 'gnus-group-ham-exit-processor-bogofilter))
 
@@ -678,6 +736,9 @@
 (defun spam-group-ham-processor-spamoracle-p (group)
   (spam-group-processor-p group 'gnus-group-ham-exit-processor-spamoracle))
 
+(defun spam-group-ham-processor-crm114-p (group)
+  (spam-group-processor-p group 'gnus-group-ham-exit-processor-crm114))
+
 (defun spam-report-articles-gmane (n)
   "Report the current message as spam.
 Respects the process/prefix convention."
@@ -686,6 +747,7 @@
     (gnus-summary-remove-process-mark article)
     (spam-report-gmane article)))
 
+; asjo: Perhaps add spam-crm114-score here? How?
 (defun spam-generic-score ()
   (interactive)
   "Invoke whatever scoring method we can."
@@ -776,8 +838,8 @@
       (spam-ham-copy-routine
        (gnus-parameter-ham-process-destination gnus-newsgroup-name)))
 
-    ;; now move all ham articles out of spam groups
-    (when (spam-group-spam-contents-p gnus-newsgroup-name)
+    ;; now move all ham articles out of non-ham groups
+    (when (not (spam-group-ham-contents-p gnus-newsgroup-name))
       (gnus-message 5 "Moving ham messages from spam group")
       (spam-ham-move-routine
        (gnus-parameter-ham-process-destination gnus-newsgroup-name))))
@@ -859,7 +921,7 @@
 	 (gnus-check-backend-function
 	  'request-move-article gnus-newsgroup-name))
 	(respool-method (gnus-find-method-for-group gnus-newsgroup-name))
-	article mark todo deletep respool)
+	article mark deletep respool)
 
     (when (member 'respool groups)
       (setq respool t)			; boolean for later
@@ -1006,7 +1068,8 @@
     (spam-use-spamassassin-headers 	. 	spam-check-spamassassin-headers)
     (spam-use-spamassassin 		. 	spam-check-spamassassin)
     (spam-use-bogofilter-headers 	. 	spam-check-bogofilter-headers)
-    (spam-use-bogofilter 	 	. 	spam-check-bogofilter))
+    (spam-use-bogofilter 	 	. 	spam-check-bogofilter)
+    (spam-use-crm114 	 	        . 	spam-check-crm114))
   "The spam-list-of-checks list contains pairs associating a
 parameter variable with a spam checking function.  If the
 parameter variable is true, then the checking function is called,
@@ -1028,7 +1091,8 @@
     spam-use-bogofilter
     spam-use-blackholes
     spam-use-spamassassin
-    spam-use-spamoracle)
+    spam-use-spamoracle
+    spam-use-crm114)
   "The spam-list-of-statistical-checks list contains all the mail
 splitters that need to have the full message body available.
 Note that you should fetch extra headers if you don't like this,
@@ -1209,7 +1273,12 @@
     (spam-use-bogofilter spam-bogofilter-register-ham-routine
 			 spam-bogofilter-register-spam-routine
 			 spam-bogofilter-unregister-ham-routine
-			 spam-bogofilter-unregister-spam-routine))
+			 spam-bogofilter-unregister-spam-routine)
+    (spam-use-crm114 spam-crm114-register-ham-routine
+		     spam-crm114-register-spam-routine
+                     ;; does CRM114 Mailfilter support unregistration?
+		     nil
+		     nil))
   "The spam-registration-functions list contains pairs
 associating a parameter variable with the ham and spam
 registration functions, and the ham and spam unregistration
@@ -2162,6 +2231,89 @@
 
 (defun spam-spamassassin-unregister-ham-routine (articles)
   (spam-spamassassin-register-with-sa-learn articles nil t))
+\f
+;;;; CRM114 Mailfilter
+(defun spam-check-crm114-headers (&optional score)
+  (let ((header (message-fetch-field spam-crm114-header))
+	(spam-split-group (if spam-split-symbolic-return
+			      'spam
+			    spam-split-group)))
+    (when header			; return nil when no header
+      (if score				; scoring mode
+	  (if (string-match "( pR: \\([0-9.-]+\\)" header)
+	      (match-string 1 header)
+	    "0")
+	;; spam detection mode
+	(when (string-match spam-crm114-positive-spam-header
+			    header)
+	  spam-split-group)))))
+
+;; return something sensible if the score can't be determined
+(defun spam-crm114-score ()
+  "Get the CRM114 Mailfilter pR"
+  (interactive)
+  (save-window-excursion
+    (gnus-summary-show-article t)
+    (set-buffer gnus-article-buffer)
+    (let ((score (or (spam-check-crm114-headers t)
+		     (spam-check-crm114 t))))
+      (gnus-summary-show-article)
+      (message "pR: %s" score)
+      (or score "0"))))
+
+(defun spam-check-crm114 (&optional score)
+  "Check the CRM114 Mailfilter backend for the classification of this message"
+  (let ((article-buffer-name (buffer-name))
+	(db spam-crm114-database-directory)
+	return)
+    (with-temp-buffer
+      (let ((temp-buffer-name (buffer-name)))
+	(save-excursion
+	  (set-buffer article-buffer-name)
+	  (apply 'call-process-region
+		 (point-min) (point-max)
+		 spam-crm114-program
+		 nil temp-buffer-name nil
+                 (when db (list (concat "--fileprefix=" db)))))
+	(setq return (spam-check-crm114-headers score))))
+    return))
+
+(defun spam-crm114-register-with-crm114 (articles
+						 spam
+						 &optional unregister)
+  "Register an article, given as a string, as spam or non-spam."
+  (dolist (article articles)
+    (let ((article-string (spam-get-article-as-string article))
+	  (db spam-crm114-database-directory)
+	  (switch (if unregister
+		      (if spam
+			  spam-crm114-spam-strong-switch
+			spam-crm114-ham-strong-switch)
+		    (if spam
+			spam-crm114-spam-switch
+		      spam-crm114-ham-switch))))
+      (when (stringp article-string)
+	(with-temp-buffer
+	  (insert article-string)
+
+	  (apply 'call-process-region
+		 (point-min) (point-max)
+		 spam-crm114-program
+		 nil nil nil
+                 (when db (list switch (concat "--fileprefix=" db)))))))))
+
+(defun spam-crm114-register-spam-routine (articles &optional unregister)
+  (spam-crm114-register-with-crm114 articles t unregister))
+
+(defun spam-crm114-unregister-spam-routine (articles)
+  (spam-crm114-register-spam-routine articles t))
+
+(defun spam-crm114-register-ham-routine (articles &optional unregister)
+  (spam-crm114-register-with-crm114 articles nil unregister))
+
+(defun spam-crm114-unregister-ham-routine (articles)
+  (spam-crm114-register-ham-routine articles t))
+
 \f
 ;;;; Hooks
 

  parent reply	other threads:[~2004-04-06 21:36 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-04-01 20:54 Adam Sjøgren
2004-04-02  6:22 ` Kai Grossjohann
2004-04-02 16:04   ` Adam Sjøgren
2004-04-03 13:28     ` Kai Grossjohann
2004-04-03 14:01       ` Adam Sjøgren
2004-04-05 13:21         ` Ted Zlatanov
2004-04-02 16:06   ` Adam Sjøgren
2004-04-02 17:14     ` Ted Zlatanov
2004-04-03 21:10       ` Adam Sjøgren
2004-04-03 21:19         ` Adam Sjøgren
2004-04-03 21:48           ` Adam Sjøgren
2004-04-03 21:58             ` Adam Sjøgren
2004-04-03 13:29     ` Kai Grossjohann
2004-04-03 13:49       ` Adam Sjøgren
2004-04-06  8:12         ` Kai Grossjohann
2004-04-06 21:40           ` Adam Sjøgren
2004-04-02 16:10   ` Jody Klymak
2004-04-02 17:07   ` Ted Zlatanov
2004-04-02 17:06 ` Ted Zlatanov
2004-04-02 17:26   ` Adam Sjøgren
2004-04-02 17:44     ` Ted Zlatanov
2004-04-03 14:22       ` Adam Sjøgren
2004-04-03 14:24         ` Adam Sjøgren
2004-04-03 23:59 ` Adam Sjøgren
2004-04-04  1:59   ` Jesper Harder
2004-04-04 13:07     ` Adam Sjøgren
2004-04-05 13:24       ` Ted Zlatanov
2004-04-05 15:50         ` Jesper Harder
2004-04-06 21:36       ` Adam Sjøgren [this message]
2004-05-20 18:39         ` Ted Zlatanov
2004-05-20 19:19           ` Adam Sjøgren
2004-05-22 23:44             ` Lars Magne Ingebrigtsen
2004-05-23 13:44               ` Adam Sjøgren
2004-05-26 16:23             ` Ted Zlatanov
2004-05-26 20:30               ` Adam Sjøgren

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87brm4ss95.fsf@virgil.koldfront.dk \
    --to=asjo@koldfront.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).