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 658cc3ba547018190b2145e9db0e49a0b553f595..46e15d6e965153800d3f7aaba3ab94502b3cf026 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 5be370540e4c699731106df8ca096e6a6a78e9c5..710d293bd8494116cb340c0212ec5c49bc0ab19d 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 2bf98d924be674c27106e9169ce77e471de82832..2b0d5b081721fa29ffefb5f59b63bae0aed0be2a 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"); }