X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2FWhitelist.java;h=9842320d23bdaa8f05e21f1bb67d2a11f01b290f;hb=7e5f113841114ac4b0ef469ef286bd31fd9da6cb;hp=5922dc3d3951ff1ad645041c7c94f79a1f75b9e9;hpb=cb49b344eae8996a3c9e5ad728d8e7c84714280e;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/Whitelist.java b/src/org/ibex/mail/Whitelist.java index 5922dc3..9842320 100644 --- a/src/org/ibex/mail/Whitelist.java +++ b/src/org/ibex/mail/Whitelist.java @@ -12,16 +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); - reap("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) { @@ -99,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) @@ -138,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"); @@ -216,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(); - } }