1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.james.transport.matchers;
23
24 import org.apache.avalon.framework.service.ServiceManager;
25 import org.apache.james.Constants;
26 import org.apache.james.api.dnsservice.DNSService;
27 import org.apache.james.api.dnsservice.util.NetMatcher;
28
29 import javax.mail.MessagingException;
30 import java.util.StringTokenizer;
31 import java.util.Collection;
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 public abstract class AbstractNetworkMatcher extends org.apache.mailet.base.GenericMatcher {
54
55
56
57
58
59 private NetMatcher authorizedNetworks = null;
60
61
62
63
64 private DNSService dnsServer;
65
66
67
68
69 private ServiceManager compMgr;
70
71 public void init() throws MessagingException {
72
73 setServiceManager((ServiceManager)getMailetContext().getAttribute(Constants.AVALON_COMPONENT_MANAGER));
74
75 try {
76
77 setDNSServer((DNSService) compMgr.lookup(DNSService.ROLE));
78 } catch (Exception e) {
79 throw new MessagingException("Failed to retrieve DNSService:" + e.getMessage());
80 }
81
82 Collection nets = allowedNetworks();
83
84 if (nets != null) {
85 authorizedNetworks = new NetMatcher(allowedNetworks(),dnsServer) {
86 protected void log(String s) {
87 AbstractNetworkMatcher.this.log(s);
88 }
89 };
90 authorizedNetworks.initInetNetworks(allowedNetworks());
91 log("Authorized addresses: " + authorizedNetworks.toString());
92 }
93 }
94
95 protected Collection allowedNetworks() {
96 Collection networks = null;
97 if (getCondition() != null) {
98 StringTokenizer st = new StringTokenizer(getCondition(), ", ", false);
99 networks = new java.util.ArrayList();
100 while (st.hasMoreTokens()) networks.add(st.nextToken());
101 }
102 return networks;
103 }
104
105 protected boolean matchNetwork(java.net.InetAddress addr) {
106 return authorizedNetworks == null ? false : authorizedNetworks.matchInetNetwork(addr);
107 }
108
109 protected boolean matchNetwork(String addr) {
110 return authorizedNetworks == null ? false : authorizedNetworks.matchInetNetwork(addr);
111 }
112
113
114 private void setDNSServer(DNSService dnsServer) {
115 this.dnsServer = dnsServer;
116 }
117
118 private void setServiceManager(ServiceManager compMgr) {
119 this.compMgr = compMgr;
120 }
121 }