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.james.util.NetMatcher;
21 import javax.mail.MessagingException;
22 import java.util.StringTokenizer;
23 import java.util.Collection;
24
25 /***
26 * AbstractNetworkMatcher makes writing IP Address matchers easier.
27 *
28 * AbstractNetworkMatcher provides a means for checking to see whether
29 * a particular IP address or domain is within a set of subnets
30 * These subnets may be expressed in one of several formats:
31 *
32 * Format Example
33 * explicit address 127.0.0.1
34 * address with a wildcard 127.0.0.*
35 * domain name myHost.com
36 * domain name + prefix-length myHost.com/24
37 * domain name + mask myHost.com/255.255.255.0
38 * IP address + prefix-length 127.0.0.0/8
39 * IP + mask 127.0.0.0/255.0.0.0
40 *
41 * For more information, see also: RFC 1518 and RFC 1519.
42 *
43 * @version $ID$
44 */
45 public abstract class AbstractNetworkMatcher extends org.apache.mailet.GenericMatcher {
46
47 /***
48 * This is a Network Matcher that should be configured to contain
49 * authorized networks
50 */
51 private NetMatcher authorizedNetworks = null;
52
53 public void init() throws MessagingException {
54 Collection nets = allowedNetworks();
55 if (nets != null) {
56 authorizedNetworks = new NetMatcher() {
57 protected void log(String s) {
58 AbstractNetworkMatcher.this.log(s);
59 }
60 };
61 authorizedNetworks.initInetNetworks(allowedNetworks());
62 log("Authorized addresses: " + authorizedNetworks.toString());
63 }
64 }
65
66 protected Collection allowedNetworks() {
67 Collection networks = null;
68 if (getCondition() != null) {
69 StringTokenizer st = new StringTokenizer(getCondition(), ", ", false);
70 networks = new java.util.ArrayList();
71 while (st.hasMoreTokens()) networks.add(st.nextToken());
72 }
73 return networks;
74 }
75
76 protected boolean matchNetwork(java.net.InetAddress addr) {
77 return authorizedNetworks == null ? false : authorizedNetworks.matchInetNetwork(addr);
78 }
79
80 protected boolean matchNetwork(String addr) {
81 return authorizedNetworks == null ? false : authorizedNetworks.matchInetNetwork(addr);
82 }
83 }