noel 2003/02/05 21:25:29 Modified: src/java/org/apache/james/transport/matchers Tag: branch_2_1_fcs NESSpamCheck.java Log: refactored as subclass of generic regex matcher Revision Changes Path No revision No revision 1.3.4.1 +43 -78 jakarta-james/src/java/org/apache/james/transport/matchers/NESSpamCheck.java Index: NESSpamCheck.java =================================================================== RCS file: /home/cvs/jakarta-james/src/java/org/apache/james/transport/matchers/NESSpamCheck.java,v retrieving revision 1.3 retrieving revision 1.3.4.1 diff -u -r1.3 -r1.3.4.1 --- NESSpamCheck.java 14 Sep 2002 06:22:37 -0000 1.3 +++ NESSpamCheck.java 6 Feb 2003 05:25:29 -0000 1.3.4.1 @@ -8,116 +8,81 @@ package org.apache.james.transport.matchers; import org.apache.james.util.RFC2822Headers; -import org.apache.mailet.GenericMatcher; import org.apache.mailet.Mail; import org.apache.oro.text.regex.MalformedPatternException; -import org.apache.oro.text.regex.Pattern; -import org.apache.oro.text.regex.Perl5Compiler; -import org.apache.oro.text.regex.Perl5Matcher; import javax.mail.MessagingException; -import javax.mail.internet.MimeMessage; -import java.util.Collection; /** * This is based on a sample filter.cfg for a Netscape Mail Server to stop * spam. * - * @author Serge Knystautas <[EMAIL PROTECTED]> */ -public class NESSpamCheck extends GenericMatcher { - - protected Perl5Matcher matcher; - protected Object patterns[][] = {{RFC2822Headers.RECEIVED, "GAA.*-0600.*EST"}, - {RFC2822Headers.RECEIVED, "XAA.*-0700.*EDT"}, - {RFC2822Headers.RECEIVED, "xxxxxxxxxxxxxxxxxxxxx"}, - {RFC2822Headers.RECEIVED, "untrace?able"}, - {RFC2822Headers.RECEIVED, "from (baby|bewellnet|kllklk) "}, - {RFC2822Headers.TO, "Friend@public\\.com"}, - {RFC2822Headers.TO, "user@the[-_]internet"}, - {RFC2822Headers.DATE, "/[0-9]+/.+[AP]M.+Time"}, - {RFC2822Headers.SUBJECT, "^\\(?ADV?[:;)]"}, - {RFC2822Headers.MESSAGE_ID, "<>"}, - {RFC2822Headers.MESSAGE_ID_VARIATION, "<>"}, - {RFC2822Headers.MESSAGE_ID_VARIATION, "<(419\\.43|989\\.28)"}, - {"X-MimeOLE", "MimeOLE V[^0-9]"}, +public class NESSpamCheck extends GenericRegexMatcher { + protected Object NESPatterns[][] = {{RFC2822Headers.RECEIVED, "GAA.*-0600.*EST"}, + {RFC2822Headers.RECEIVED, "XAA.*-0700.*EDT"}, + {RFC2822Headers.RECEIVED, "xxxxxxxxxxxxxxxxxxxxx"}, + {RFC2822Headers.RECEIVED, "untrace?able"}, + {RFC2822Headers.RECEIVED, "from (baby|bewellnet|kllklk) "}, + {RFC2822Headers.TO, "Friend@public\\.com"}, + {RFC2822Headers.TO, "user@the[-_]internet"}, + {RFC2822Headers.DATE, "/[0-9]+/.+[AP]M.+Time"}, + {RFC2822Headers.SUBJECT, "^\\(?ADV?[:;)]"}, + {RFC2822Headers.MESSAGE_ID, "<>"}, + {RFC2822Headers.MESSAGE_ID_VARIATION, "<>"}, + {RFC2822Headers.MESSAGE_ID_VARIATION, "<(419\\.43|989\\.28)"}, + {"X-MimeOLE", "MimeOLE V[^0-9]"}, //Added 20-Jun-1999. Appears to be broken spamware. - {"MIME-Version", "1.0From"}, + {"MIME-Version", "1.0From"}, //Added 28-July-1999. Check X-Mailer for spamware. - {"X-Mailer", "DiffondiCool"}, - {"X-Mailer", "Emailer Platinum"}, - {"X-Mailer", "eMerge"}, - {"X-Mailer", "Crescent Internet Tool"}, + {"X-Mailer", "DiffondiCool"}, + {"X-Mailer", "Emailer Platinum"}, + {"X-Mailer", "eMerge"}, + {"X-Mailer", "Crescent Internet Tool"}, //Added 4-Apr-2000. Check X-Mailer for Cybercreek Avalanche - {"X-Mailer", "Avalanche"}, + {"X-Mailer", "Avalanche"}, //Added 21-Oct-1999. Subject contains 20 or more consecutive spaces - {"Subject", " "}, + {"Subject", " "}, //Added 31-Mar-2000. Invalid headers from MyGuestBook.exe CGI spamware - {"MessageID", "<.+>"}, - {"X-References", "0[A-Z0-9]+, 0[A-Z0-9]+$"}, - {"X-Other-References", "0[A-Z0-9]+$"}, - {"X-See-Also", "0[A-Z0-9]+$"}, + {"MessageID", "<.+>"}, + {"X-References", "0[A-Z0-9]+, 0[A-Z0-9]+$"}, + {"X-Other-References", "0[A-Z0-9]+$"}, + {"X-See-Also", "0[A-Z0-9]+$"}, //Updated 28-Apr-1999. Check for "Sender", "Resent-From", or "Resent-By" // before "X-UIDL". If found, then exit. - {RFC2822Headers.SENDER, ".+"}, - {RFC2822Headers.RESENT_FROM, ".+"}, - {"Resent-By", ".+"}, + {RFC2822Headers.SENDER, ".+"}, + {RFC2822Headers.RESENT_FROM, ".+"}, + {"Resent-By", ".+"}, //Updated 19-May-1999. Check for "X-Mozilla-Status" before "X-UIDL". - {"X-Mozilla-Status", ".+"}, + {"X-Mozilla-Status", ".+"}, //Updated 20-Jul-1999. Check for "X-Mailer: Internet Mail Service" // before "X-UIDL". - {"X-Mailer", "Internet Mail Service"}, + {"X-Mailer", "Internet Mail Service"}, //Updated 25-Oct-1999. Check for "X-ID" before "X-UIDL". - {"X-ID", ".+"}, + {"X-ID", ".+"}, //X-UIDL is a POP3 header that should normally not be seen - {"X-UIDL", ".*"}, + {"X-UIDL", ".*"}, //Some headers are valid only for the Pegasus Mail client. So first check //for Pegasus header and exit if found. If not found, check for //invalid headers: "Comments: Authenticated sender", "X-PMFLAGS" and "X-pmrqc". - {"X-mailer", "Pegasus"}, + {"X-mailer", "Pegasus"}, //Added 27-Aug-1999. Pegasus now uses X-Mailer instead of X-mailer. - {"X-Mailer", "Pegasus"}, + {"X-Mailer", "Pegasus"}, //Added 25-Oct-1999. Check for X-Confirm-Reading-To. - {"X-Confirm-Reading-To", ".+"}, + {"X-Confirm-Reading-To", ".+"}, //Check for invalid Pegasus headers - {RFC2822Headers.COMMENTS, "Authenticated sender"}, - {"X-PMFLAGS", ".*"}, - {"X-Pmflags", ".*"}, - {"X-pmrqc", ".*"}, - {"Host-From:envonly", ".*"}}; + {RFC2822Headers.COMMENTS, "Authenticated sender"}, + {"X-PMFLAGS", ".*"}, + {"X-Pmflags", ".*"}, + {"X-pmrqc", ".*"}, + {"Host-From:envonly", ".*"}}; - public void init() { + public void init() throws MessagingException { //No condition passed... just compile a bunch of regular expressions try { - matcher = new Perl5Matcher(); - for (int i = 0; i < patterns.length; i++) { - String pattern = (String)patterns[i][1]; - patterns[i][1] = new Perl5Compiler().compile(pattern); - } + compile(NESPatterns); } catch(MalformedPatternException mp) { - log(mp.getMessage()); - } - } - - public Collection match(Mail mail) throws MessagingException { - MimeMessage message = mail.getMessage(); - - //Loop through all the patterns - for (int i = 0; i < patterns.length; i++) { - //Get the header name - String headerName = (String)patterns[i][0]; - //Get the patterns ro that header - Pattern pattern = (Pattern)patterns[i][1]; - //Get the array of header values that match that - String headers[] = message.getHeader(headerName); - //Loop through the header values - for (int j = 0; j < headers.length; j++) { - if (matcher.matches(headers[j], pattern)) { - return mail.getRecipients(); - } - - } + throw new MessagingException("Could not initialize NES patterns", mp); } - return null; } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]