From fcfe4397c4e2867bfac2e2d95e70653ece384b18 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Mon, 15 Sep 2008 16:20:23 +0000
Subject: [PATCH]     * NetDb: Check new routers against blocklist

---
 ...andleFloodfillDatabaseStoreMessageJob.java | 24 +++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java
index 34555b1de3..6aa9acb18b 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java
@@ -9,6 +9,7 @@ package net.i2p.router.networkdb.kademlia;
  */
 
 import java.util.Date;
+import java.util.Set;
 
 import net.i2p.data.Hash;
 import net.i2p.data.LeaseSet;
@@ -58,6 +59,7 @@ public class HandleFloodfillDatabaseStoreMessageJob extends JobImpl {
         
         String invalidMessage = null;
         boolean wasNew = false;
+        RouterInfo prevNetDb = null;
         if (_message.getValueType() == DatabaseStoreMessage.KEY_TYPE_LEASESET) {
             getContext().statManager().addRateData("netDb.storeLeaseSetHandled", 1, 0);
    
@@ -83,8 +85,8 @@ public class HandleFloodfillDatabaseStoreMessageJob extends JobImpl {
                 _log.info("Handling dbStore of router " + _message.getKey() + " with publishDate of " 
                           + new Date(_message.getRouterInfo().getPublished()));
             try {
-                RouterInfo match = getContext().netDb().store(_message.getKey(), _message.getRouterInfo());
-                wasNew = ((null == match) || (match.getPublished() < _message.getRouterInfo().getPublished()));
+                prevNetDb = getContext().netDb().store(_message.getKey(), _message.getRouterInfo());
+                wasNew = ((null == prevNetDb) || (prevNetDb.getPublished() < _message.getRouterInfo().getPublished()));
                 getContext().profileManager().heardAbout(_message.getKey());
             } catch (IllegalArgumentException iae) {
                 invalidMessage = iae.getMessage();
@@ -124,6 +126,24 @@ public class HandleFloodfillDatabaseStoreMessageJob extends JobImpl {
                         getContext().statManager().addRateData("netDb.storeFloodOld", 1, 0);
                     }
                 }
+
+                // Check new routerinfo address against blocklist
+                if (wasNew) {
+                    if (prevNetDb == null) {
+                        if ((!getContext().shitlist().isShitlistedForever(_fromHash)) &&
+                            getContext().blocklist().isBlocklisted(_fromHash) &&
+                            _log.shouldLog(Log.ERROR))
+                                _log.error("Blocklisting new peer " + _fromHash);
+                    } else {
+                        Set oldAddr = prevNetDb.getAddresses();
+                        Set newAddr = _message.getRouterInfo().getAddresses();
+                        if (newAddr != null && (!newAddr.equals(oldAddr)) &&
+                            (!getContext().shitlist().isShitlistedForever(_fromHash)) &&
+                            getContext().blocklist().isBlocklisted(_fromHash) &&
+                            _log.shouldLog(Log.ERROR))
+                                _log.error("New address received, Blocklisting old peer " + _fromHash);
+                    }
+                }
             } else {
                 if (_log.shouldLog(Log.WARN))
                     _log.warn("Peer " + _fromHash.toBase64() + " sent bad data: " + invalidMessage);
-- 
GitLab