X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2FWhitelist.java;h=9842320d23bdaa8f05e21f1bb67d2a11f01b290f;hb=7e5f113841114ac4b0ef469ef286bd31fd9da6cb;hp=1d76bfc16307c964faac0f59d1ec9aa0bfd5bd5a;hpb=7ba51cf938eafe8f5a0e7f1a5dba98f8d5a0c032;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/Whitelist.java b/src/org/ibex/mail/Whitelist.java index 1d76bfc..9842320 100644 --- a/src/org/ibex/mail/Whitelist.java +++ b/src/org/ibex/mail/Whitelist.java @@ -12,17 +12,16 @@ import java.util.*; import java.sql.Timestamp; import java.sql.Connection; -public class Whitelist extends SqliteTable { - - public Whitelist(String filename) { - super(filename, - new String[] { - "create table if not exists 'whitelist' (email)", - "create table if not exists 'pending' (spamid,email,message,date)" - }, - true, - "pending", - "date"); +public class Whitelist extends SqliteDB { + + public Whitelist(String filename) throws SQLException { + super(filename); + SqliteTable whitelist = getTable("whitelist", "(email)"); + whitelist.createIndex("email"); + SqliteTable pending = getTable("pending", "(spamid,email,message,date)"); + pending.reap("date"); + pending.createIndex("spamid"); + pending.createIndex("email"); } public boolean handleRequest(org.ibex.net.Connection c) { @@ -100,6 +99,9 @@ public class Whitelist extends SqliteTable { a = m.envelopeFrom; if (a!=null) addWhitelist(a); hsm.add(m); + if (m.cc != null) for(Address aa : m.cc) { + if (aa!= null) addWhitelist(aa); + } } while (rs.next()); } for(Message m : hsm) @@ -139,6 +141,10 @@ public class Whitelist extends SqliteTable { "with Auto-Submitted=\""+m.headers.get("Auto-Submitted")+"\""); return; } + if (m.headers.get("List-Id") != null || m.headers.get("List-Post") != null) { + Log.warn(this, "refusing to send a challenge to a message with a List-Id or List-Post header"); + return; + } Address from = Address.parse("adam@megacz.com"); @@ -217,18 +223,12 @@ public class Whitelist extends SqliteTable { PreparedStatement add = conn.prepareStatement("insert into pending values(?,?,?,?)"); add.setString(1, messageid); add.setString(2, to.toString(false)); - add.setString(3, streamToString(m.getStream())); + add.setString(3, SqliteDB.streamToString(m.getStream())); add.setTimestamp(4, new Timestamp(System.currentTimeMillis())); add.executeUpdate(); } } catch (Exception e) { throw new RuntimeException(e); } } - private static String streamToString(Stream stream) throws Exception { - StringBuffer b = new StringBuffer(); - for(String s = stream.readln(); s!=null; s=stream.readln()) - b.append(s+"\n"); - return b.toString(); - } }