X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2FGraylist.java;h=1f65dd40a6b2fe50bb30fbff25a381e4cfbfc623;hb=d0300cbd91cfb6c17cab5f201074b439ac270eac;hp=ec1fe128834a8b332a688aefcba24f97f5b4d663;hpb=4ca1c5dde661520f29ec5faf80db43e1a68aeb5f;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/Graylist.java b/src/org/ibex/mail/Graylist.java index ec1fe12..1f65dd4 100644 --- a/src/org/ibex/mail/Graylist.java +++ b/src/org/ibex/mail/Graylist.java @@ -9,13 +9,11 @@ import java.sql.Timestamp; public class Graylist extends SqliteDB { - public Graylist(String filename) { - super(filename, - new String[] { - "create table if not exists 'whitelist' (ip unique)", - "create table if not exists 'graylist' (ip,fromaddr,toaddr,date, primary key(ip,fromaddr,toaddr))" - }); - reap("graylist", "date"); + public Graylist(String filename) throws SQLException { + super(filename); + SqliteTable whitelist = getTable("whitelist", "(ip unique)"); + SqliteTable graylist = getTable("graylist", "(ip,fromaddr,toaddr,date,PRIMARY KEY(ip,fromaddr,toaddr))"); + graylist.reap("date"); } public synchronized void addWhitelist(InetAddress ip) { @@ -39,7 +37,7 @@ public class Graylist extends SqliteDB { try { PreparedStatement check = conn.prepareStatement("select date from graylist where ip=? and fromaddr=? and toaddr=?"); - check.setString(1, ip.getHostAddress()); + check.setString(1, graylistAddress(ip)); check.setString(2, from); check.setString(3, to); ResultSet rs = check.executeQuery(); @@ -52,7 +50,7 @@ public class Graylist extends SqliteDB { try { PreparedStatement check = conn.prepareStatement("insert or replace into graylist (ip,fromaddr,toaddr,date) values(?,?,?,?)"); - check.setString(1, ip.getHostAddress()); + check.setString(1, graylistAddress(ip)); check.setString(2, from); check.setString(3, to); check.setTimestamp(4, new Timestamp(date)); @@ -60,5 +58,19 @@ public class Graylist extends SqliteDB { } catch (SQLException e) { throw new RuntimeException(e); } } + // + // this is mostly to deal with comcast's pathetic retry policy and + // rotating pool of outbound servers + // see: http://lists.puremagic.com/pipermail/greylist-users/2006-November/001255.html + // + private static String graylistAddress(InetAddress ipa) { + byte[] ip = ipa.getAddress(); + return + (ip[0] & 0xff)+"."+ + (ip[1] & 0xff)+"."+ + (ip[2] & 0xff)+"."+ + ".0"; + } + }