View Javadoc

1   /************************************************************************
2    * Copyright (c) 2000-2006 The Apache Software Foundation.             *
3    * All rights reserved.                                                *
4    * ------------------------------------------------------------------- *
5    * Licensed under the Apache License, Version 2.0 (the "License"); you *
6    * may not use this file except in compliance with the License. You    *
7    * may obtain a copy of the License at:                                *
8    *                                                                     *
9    *     http://www.apache.org/licenses/LICENSE-2.0                      *
10   *                                                                     *
11   * Unless required by applicable law or agreed to in writing, software *
12   * distributed under the License is distributed on an "AS IS" BASIS,   *
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or     *
14   * implied.  See the License for the specific language governing       *
15   * permissions and limitations under the License.                      *
16   ***********************************************************************/
17  
18  package org.apache.james.transport.matchers;
19  
20  import org.apache.mailet.GenericMatcher;
21  import org.apache.mailet.Mail;
22  
23  import java.util.Collection;
24  
25  /***
26   * Does a DNS lookup (MX and A/CNAME records) on the sender's domain.  If
27   * there are no entries, the domain is considered fake and the match is 
28   * successful.
29   *
30   */
31  public class SenderInFakeDomain extends AbstractNetworkMatcher {
32  
33      public Collection match(Mail mail) {
34          if (mail.getSender() == null) {
35              return null;
36          }
37          String domain = mail.getSender().getHost();
38          //DNS Lookup for this domain
39          Collection servers = getMailetContext().getMailServers(domain);
40          if (servers.size() == 0) {
41              //No records...could not deliver to this domain, so matches criteria.
42              log("No MX, A, or CNAME record found for domain: " + domain);
43              return mail.getRecipients();
44          } else if (matchNetwork(servers.iterator().next().toString())){
45              /*
46               * It could be a wildcard address like these:
47               *
48               * 64.55.105.9/32          # Allegiance Telecom Companies Worldwide (.nu)
49               * 64.94.110.11/32         # VeriSign (.com .net)
50               * 194.205.62.122/32       # Network Information Center - Ascension Island (.ac)
51               * 194.205.62.62/32        # Internet Computer Bureau (.sh)
52               * 195.7.77.20/32          # Fredrik Reutersward Data (.museum)
53               * 206.253.214.102/32      # Internap Network Services (.cc)
54               * 212.181.91.6/32         # .NU Domain Ltd. (.nu)
55               * 219.88.106.80/32        # Telecom Online Solutions (.cx)
56               * 194.205.62.42/32        # Internet Computer Bureau (.tm)
57               * 216.35.187.246/32       # Cable & Wireless (.ws)
58               * 203.119.4.6/32          # .PH TLD (.ph)
59               *
60               */
61              log("Banned IP found for domain: " + domain);
62              log(" --> :" + servers.iterator().next().toString());
63              return mail.getRecipients();
64          } else {
65              // Some servers were found... the domain is not fake.
66  
67              return null;
68          }
69      }
70  }