From 64f5fed05a41f727ee4188157fe6c7bb647c1b26 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Thu, 24 Nov 2016 13:54:54 +0000 Subject: [PATCH] blocklist feed tweaks --- .../src/net/i2p/router/news/BlocklistEntries.java | 6 +++++- .../src/net/i2p/router/news/NewsXMLParser.java | 9 ++++++--- .../src/net/i2p/router/update/NewsFetcher.java | 15 ++++++++++++--- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/news/BlocklistEntries.java b/apps/routerconsole/java/src/net/i2p/router/news/BlocklistEntries.java index 658cc3ba54..46e15d6e96 100644 --- a/apps/routerconsole/java/src/net/i2p/router/news/BlocklistEntries.java +++ b/apps/routerconsole/java/src/net/i2p/router/news/BlocklistEntries.java @@ -40,6 +40,7 @@ public class BlocklistEntries { private boolean verified; public static final int MAX_ENTRIES = 2000; private static final String CONTENT_ROUTER = "router"; + public static final long MAX_FUTURE = 2*24*60*60*1000L; public BlocklistEntries(int capacity) { entries = new ArrayList<String>(capacity); @@ -55,6 +56,8 @@ public class BlocklistEntries { return true; if (signer == null || sig == null || supdated == null) return false; + if (updated > ctx.clock().now() + MAX_FUTURE) + return false; Log log = ctx.logManager().getLog(BlocklistEntries.class); String[] ss = DataHelper.split(sig, ":", 2); if (ss.length != 2) { @@ -267,7 +270,8 @@ public class BlocklistEntries { System.exit(1); } - System.out.println(" <i2p:blocklist updated=\"" + date + "\" signed-by=\"" + signerName + "\" sig=\"" + type.getCode() + ':' + bsig + "\">"); + System.out.println(" <i2p:blocklist signer=\"" + signerName + "\" sig=\"" + type.getCode() + ':' + bsig + "\">"); + System.out.println(" <updated>" + date + "</updated>"); for (String e : elist) { System.out.println(" <i2p:block>" + e + "</i2p:block>"); } diff --git a/apps/routerconsole/java/src/net/i2p/router/news/NewsXMLParser.java b/apps/routerconsole/java/src/net/i2p/router/news/NewsXMLParser.java index 5be370540e..710d293bd8 100644 --- a/apps/routerconsole/java/src/net/i2p/router/news/NewsXMLParser.java +++ b/apps/routerconsole/java/src/net/i2p/router/news/NewsXMLParser.java @@ -424,15 +424,18 @@ public class NewsXMLParser { return null; List<Node> entries = getNodes(bl, "i2p:block"); BlocklistEntries rv = new BlocklistEntries(entries.size()); - String a = bl.getAttributeValue("signed-by"); + String a = bl.getAttributeValue("signer"); if (a.length() > 0) rv.signer = a; a = bl.getAttributeValue("sig"); if (a.length() > 0) { rv.sig = a; } - a = bl.getAttributeValue("updated"); - if (a.length() > 0) { + Node n = bl.getNode("updated"); + if (n == null) + return null; + a = n.getValue(); + if (a != null) { rv.supdated = a; long time = RFC3339Date.parse3339Date(a.trim()); if (time > 0) diff --git a/apps/routerconsole/java/src/net/i2p/router/update/NewsFetcher.java b/apps/routerconsole/java/src/net/i2p/router/update/NewsFetcher.java index 2bf98d924b..2b0d5b0817 100644 --- a/apps/routerconsole/java/src/net/i2p/router/update/NewsFetcher.java +++ b/apps/routerconsole/java/src/net/i2p/router/update/NewsFetcher.java @@ -639,6 +639,9 @@ class NewsFetcher extends UpdateRunner { } Blocklist bl = _context.blocklist(); Banlist ban = _context.banlist(); + DateFormat fmt = DateFormat.getDateInstance(DateFormat.SHORT); + fmt.setTimeZone(SystemVersion.getSystemTimeZone(_context)); + String reason = "Blocklist feed " + new Date(ble.updated); int banned = 0; for (Iterator<String> iter = ble.entries.iterator(); iter.hasNext(); ) { String s = iter.next(); @@ -650,7 +653,7 @@ class NewsFetcher extends UpdateRunner { } Hash h = Hash.create(b); if (!ban.isBanlistedForever(h)) - ban.banlistRouterForever(h, "News feed"); + ban.banlistRouterForever(h, reason); } else { byte[] ip = Addresses.getIP(s); if (ip == null) { @@ -692,11 +695,15 @@ class NewsFetcher extends UpdateRunner { out.write("# "); out.write(ble.supdated); out.newLine(); + banned = 0; for (String s : ble.entries) { s = s.replace(':', ';'); // IPv6 - out.write("Blocklist Feed:"); + out.write(reason); + out.write(':'); out.write(s); out.newLine(); + if (++banned >= BlocklistEntries.MAX_ENTRIES) + break; } } catch (IOException ioe) { _log.error("Error writing blocklist", ioe); @@ -706,8 +713,10 @@ class NewsFetcher extends UpdateRunner { out.close(); } catch (IOException ioe) {} } - if (!fail) + if (!fail) { + f.setLastModified(ble.updated); _context.router().saveConfig(PROP_BLOCKLIST_TIME, Long.toString(ble.updated)); + } if (_log.shouldWarn()) _log.warn("Processed " + ble.entries.size() + " blocks and " + ble.removes.size() + " unblocks from news feed"); } -- GitLab