1 21 package org.jsmtpd.plugins.acls; 22 23 import java.net.Inet4Address ; 24 import java.net.InetAddress ; 25 import java.net.UnknownHostException ; 26 import java.util.ArrayList ; 27 import java.util.Iterator ; 28 import java.util.List ; 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 48 public class SimpleACL implements IACL { 49 50 54 protected List <ExtendedInet4Address> validRelays = new ArrayList <ExtendedInet4Address>(); 55 58 protected List <EmailAddress> validAdresses = new ArrayList <EmailAddress>(); 59 60 protected List <EmailAddress> wildcardUsers = new ArrayList <EmailAddress>(); 61 62 66 public boolean isValidRelay(String hostIP) { 67 68 Inet4Address ag; 69 try { 70 ag = (Inet4Address ) InetAddress.getByName(hostIP); 71 for (Iterator <ExtendedInet4Address> iter = validRelays.iterator(); iter.hasNext();) { 72 ExtendedInet4Address element = iter.next(); 73 if (element.isEqualorInMask(ag)) 74 return true; 75 } 76 } catch (UnknownHostException e) { 77 e.printStackTrace(); 78 } 79 80 return false; 81 } 82 83 public String getPluginName() { 84 return "Simple Acces Control List plugin for jsmtp"; 85 } 86 87 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 <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 <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 public void setRelayedHosts(String cfg) { 121 String [] hosts = null; 122 if (cfg.contains(",")) { 123 hosts = cfg.split(","); 124 } else { 125 hosts = new String [1]; 126 hosts[0] = cfg; 127 } 128 129 for (int i = 0; i < hosts.length; i++) { 130 if (hosts[i].contains("/")) { 131 String [] sp = hosts[i].split("/"); 132 try { 133 Inet4Address host = (Inet4Address ) InetAddress.getByName(sp[0]); 134 Inet4Address mask = (Inet4Address ) InetAddress.getByName(sp[1]); 135 ExtendedInet4Address tmp = new ExtendedInet4Address(host, mask); 136 validRelays.add(tmp); 137 } catch (UnknownHostException e) { 138 e.printStackTrace(); 139 } 140 141 } else { 142 try { 143 ExtendedInet4Address tmp = new ExtendedInet4Address((Inet4Address ) InetAddress.getByName(hosts[i])); 144 validRelays.add(tmp); 145 } catch (UnknownHostException e) { 146 e.printStackTrace(); 147 } 148 } 149 150 } 151 152 } 153 154 public void setValidUsers(String cfg) { 156 157 if ((cfg==null) ||(cfg.equals(""))) 158 return; 159 160 String [] ret = null; 161 if (cfg.contains(",")) 162 ret = cfg.split(","); 163 else { 164 ret = new String [1]; 165 ret[0] = cfg; 166 } 167 168 for (int i = 0; i < ret.length; i++) { 169 String string = ret[i]; 170 addUser(string); 171 } 172 } 173 174 178 private void addUser(String user) { 179 if (user.contains("*")) { 180 181 try { 182 EmailAddress in = EmailAddress.parseAddress(user); 183 wildcardUsers.add(in); 184 } catch (InvalidAddress e) { 185 e.printStackTrace(); 187 } 188 return; 189 } 190 try { 191 EmailAddress in = EmailAddress.parseAddress(user); 192 validAdresses.add(in); 193 } catch (InvalidAddress e) { 194 e.printStackTrace(); 196 } 197 198 } 199 200 public void shutdownPlugin() { 201 202 } 203 204 } | Popular Tags |