KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jsmtpd > plugins > acls > SimpleACL


1 /*
2  *
3  * Jsmtpd, Java SMTP daemon
4  * Copyright (C) 2005 Jean-Francois POUX, jf.poux@laposte.net
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19  *
20  */

21 package org.jsmtpd.plugins.acls;
22
23 import java.net.Inet4Address JavaDoc;
24 import java.net.InetAddress JavaDoc;
25 import java.net.UnknownHostException JavaDoc;
26 import java.util.ArrayList JavaDoc;
27 import java.util.Iterator JavaDoc;
28 import java.util.List JavaDoc;
29
30 import org.jsmtpd.core.common.PluginInitException;
31 import org.jsmtpd.core.common.acl.ExtendedInet4Address;
32 import org.jsmtpd.core.common.acl.IACL;
33 import org.jsmtpd.core.mail.EmailAddress;
34 import org.jsmtpd.core.mail.InvalidAddress;
35
36 /**
37  * @author Jean-Francois POUX
38  * Jsmtp
39  *
40  * Basic and simpliest ACL.
41  *
42  * Loads one local domain and a list of users for this domain
43  * Loads a list of relayed ip/networks
44  *
45  *
46  *
47  */

48 public class SimpleACL implements IACL {
49
50     /**
51      * valid relayed hosts (open relay only for theses hosts)
52      *
53      */

54     protected List JavaDoc<ExtendedInet4Address> validRelays = new ArrayList JavaDoc<ExtendedInet4Address>();
55     /**
56      * Local domain adresses
57      */

58     protected List JavaDoc<EmailAddress> validAdresses = new ArrayList JavaDoc<EmailAddress>();
59
60     protected List JavaDoc<EmailAddress> wildcardUsers = new ArrayList JavaDoc<EmailAddress>();
61
62     /**
63      * @param hostIP the ip acessing to smtp service
64      * @return true if the ip is relayed
65      */

66     public boolean isValidRelay(String JavaDoc hostIP) {
67
68         Inet4Address JavaDoc ag;
69         try {
70             ag = (Inet4Address JavaDoc) InetAddress.getByName(hostIP);
71             for (Iterator JavaDoc<ExtendedInet4Address> iter = validRelays.iterator(); iter.hasNext();) {
72                 ExtendedInet4Address element = iter.next();
73                 if (element.isEqualorInMask(ag))
74                     return true;
75             }
76         } catch (UnknownHostException JavaDoc e) {
77             e.printStackTrace();
78         }
79
80         return false;
81     }
82
83     public String JavaDoc getPluginName() {
84         return "Simple Acces Control List plugin for jsmtp";
85     }
86
87     /**
88      * @return true if the adress is for local delivery, false otherwise
89      */

90     public boolean isValidAddress(EmailAddress e) {
91         if (isValidAddressWildCard(e))
92             return true;
93         else
94             return isValidAddressStandardUser(e);
95     }
96
97     public boolean isValidAddressStandardUser(EmailAddress e) {
98         for (Iterator JavaDoc<EmailAddress> iter = validAdresses.iterator(); iter.hasNext();) {
99             EmailAddress element = iter.next();
100             if (e.isEqual(element))
101                 return true;
102         }
103         return false;
104     }
105
106     public boolean isValidAddressWildCard(EmailAddress e) {
107         for (Iterator JavaDoc<EmailAddress> iter = wildcardUsers.iterator(); iter.hasNext();) {
108             EmailAddress element = iter.next();
109             if (e.isEqual(element))
110                 return true;
111         }
112         return false;
113     }
114
115     public void initPlugin() throws PluginInitException {
116
117     }
118
119     // Autoconf meth
120
public void setRelayedHosts(String JavaDoc cfg) {
121         String JavaDoc[] hosts = null;
122         if (cfg.contains(",")) {
123             hosts = cfg.split(",");
124         } else {
125             hosts = new String JavaDoc[1];
126             hosts[0] = cfg;
127         }
128
129         for (int i = 0; i < hosts.length; i++) {
130             if (hosts[i].contains("/")) {
131                 String JavaDoc[] sp = hosts[i].split("/");
132                 try {
133                     Inet4Address JavaDoc host = (Inet4Address JavaDoc) InetAddress.getByName(sp[0]);
134                     Inet4Address JavaDoc mask = (Inet4Address JavaDoc) InetAddress.getByName(sp[1]);
135                     ExtendedInet4Address tmp = new ExtendedInet4Address(host, mask);
136                     validRelays.add(tmp);
137                 } catch (UnknownHostException JavaDoc e) {
138                     e.printStackTrace();
139                 }
140
141             } else {
142                 try {
143                     ExtendedInet4Address tmp = new ExtendedInet4Address((Inet4Address JavaDoc) InetAddress.getByName(hosts[i]));
144                     validRelays.add(tmp);
145                 } catch (UnknownHostException JavaDoc e) {
146                     e.printStackTrace();
147                 }
148             }
149
150         }
151
152     }
153
154     // Autoconf meth
155
public void setValidUsers(String JavaDoc cfg) {
156         
157         if ((cfg==null) ||(cfg.equals("")))
158             return;
159         
160         String JavaDoc[] ret = null;
161         if (cfg.contains(","))
162             ret = cfg.split(",");
163         else {
164             ret = new String JavaDoc[1];
165             ret[0] = cfg;
166         }
167
168         for (int i = 0; i < ret.length; i++) {
169             String JavaDoc string = ret[i];
170             addUser(string);
171         }
172     }
173
174     /**
175      * adds a new local user to the accepted list
176      * @param user the user's name
177      */

178     private void addUser(String JavaDoc user) {
179         if (user.contains("*")) {
180
181             try {
182                 EmailAddress in = EmailAddress.parseAddress(user);
183                 wildcardUsers.add(in);
184             } catch (InvalidAddress e) {
185                 //DBG should not happen as adresses are checked by the receiving service
186
e.printStackTrace();
187             }
188             return;
189         }
190         try {
191             EmailAddress in = EmailAddress.parseAddress(user);
192             validAdresses.add(in);
193         } catch (InvalidAddress e) {
194             //DBG should not happen as adresses are checked by the receiving service
195
e.printStackTrace();
196         }
197
198     }
199
200     public void shutdownPlugin() {
201
202     }
203
204 }
Popular Tags