Changeset 220

Show
Ignore:
Timestamp:
08/31/08 22:52:40 (3 months ago)
Author:
jfp
Message:

Improve fix #69

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/jsmtpd-1.x/jsmtpd/src/org/jsmtpd/plugins/filters/builtin/RcptMatcher.java

    r218 r220  
    2121package org.jsmtpd.plugins.filters.builtin; 
    2222 
    23 import java.util.Iterator
     23import java.util.ArrayList
    2424import java.util.LinkedList; 
    2525import java.util.List; 
     
    6060     */ 
    6161    public boolean doFilter(Email input) throws FilterTreeFailureException, FilterTreeSuccesException { 
    62         List<Rcpt> rcptInMail = input.getRcpt(); 
    63         boolean res = false; 
    64         boolean found = false; 
    65         if (orOperator) { 
    66             for (Iterator iterator = rcptInMail.iterator(); iterator.hasNext();) { 
    67                 Rcpt element = (Rcpt) iterator.next(); 
    68                 EmailAddress oneRcptInMail = element.getEmailAddress(); 
    69                 for (Iterator iter = rcptToMatch.iterator(); iter.hasNext();) { 
    70                     EmailAddress oneRcptToMatch = (EmailAddress) iter.next(); 
    71                     if (oneRcptToMatch.isEqual(oneRcptInMail)) { 
    72                         found = true; 
    73                         break; 
    74                     } 
    75                 } 
    76                 if (found) { 
    77                     break; 
    78                 } 
    79             } 
    80         } else { 
    81             log.debug("Plugin: " + getPluginName() + " Start validating without orOperator"); 
    82             for (Iterator iterator = rcptInMail.iterator(); iterator.hasNext();) { 
    83                 Rcpt element = (Rcpt) iterator.next(); 
    84                 EmailAddress oneRcptInMail = element.getEmailAddress(); 
    85                 found = false; 
    86                 for (Iterator iter = rcptToMatch.iterator(); iter.hasNext();) { 
    87                     EmailAddress oneRcptToMatch = (EmailAddress) iter.next(); 
    88                     if (oneRcptToMatch.isEqual(oneRcptInMail)) { 
    89                         found = true; 
    90                         break; 
    91                     } 
    92                 } 
    93                 if (!found) { 
    94                     break; 
    95                 } 
    96             } 
    97         } 
    98         if (found) { 
    99             res = true; 
    100         } 
    101         if (failOnError && (!res)) { 
    102             throw new FilterTreeFailureException(); 
    103         } 
     62         
     63        boolean res = doFilterInternal(input);  
     64         
     65        if (failOnError && (!res)) throw new FilterTreeFailureException(); 
    10466 
    105         if (validateOnSucces && res) 
    106             throw new FilterTreeSuccesException(); 
     67        if (validateOnSucces && res) throw new FilterTreeSuccesException(); 
    10768 
    10869        return res; 
    10970    } 
    11071 
     72    private boolean doFilterInternal (Email input) { 
     73        List<EmailAddress> addressesInMail = new ArrayList<EmailAddress>(); 
     74        for (Rcpt rcpt : input.getRcpt()) { 
     75                        addressesInMail.add(rcpt.getEmailAddress()); 
     76                } 
     77         
     78                if (orOperator) { 
     79                        for (EmailAddress emailAddress : addressesInMail) { 
     80                                if (rcptToMatch.contains(emailAddress)) 
     81                                        return true; 
     82                        } 
     83                        return false; 
     84                } else { 
     85                        for (EmailAddress emailAddress : rcptToMatch) { 
     86                                if (! addressesInMail.contains(emailAddress)) 
     87                                        return false; 
     88                        } 
     89                        return true; 
     90                } 
     91    } 
     92     
    11193    /* (non-Javadoc) 
    11294     * @see org.jsmtpd.core.common.IGenericPlugin#getPluginName()