* NetDb: Check new routers against blocklist
This commit is contained in:
@ -9,6 +9,7 @@ package net.i2p.router.networkdb.kademlia;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import net.i2p.data.Hash;
|
import net.i2p.data.Hash;
|
||||||
import net.i2p.data.LeaseSet;
|
import net.i2p.data.LeaseSet;
|
||||||
@ -58,6 +59,7 @@ public class HandleFloodfillDatabaseStoreMessageJob extends JobImpl {
|
|||||||
|
|
||||||
String invalidMessage = null;
|
String invalidMessage = null;
|
||||||
boolean wasNew = false;
|
boolean wasNew = false;
|
||||||
|
RouterInfo prevNetDb = null;
|
||||||
if (_message.getValueType() == DatabaseStoreMessage.KEY_TYPE_LEASESET) {
|
if (_message.getValueType() == DatabaseStoreMessage.KEY_TYPE_LEASESET) {
|
||||||
getContext().statManager().addRateData("netDb.storeLeaseSetHandled", 1, 0);
|
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 "
|
_log.info("Handling dbStore of router " + _message.getKey() + " with publishDate of "
|
||||||
+ new Date(_message.getRouterInfo().getPublished()));
|
+ new Date(_message.getRouterInfo().getPublished()));
|
||||||
try {
|
try {
|
||||||
RouterInfo match = getContext().netDb().store(_message.getKey(), _message.getRouterInfo());
|
prevNetDb = getContext().netDb().store(_message.getKey(), _message.getRouterInfo());
|
||||||
wasNew = ((null == match) || (match.getPublished() < _message.getRouterInfo().getPublished()));
|
wasNew = ((null == prevNetDb) || (prevNetDb.getPublished() < _message.getRouterInfo().getPublished()));
|
||||||
getContext().profileManager().heardAbout(_message.getKey());
|
getContext().profileManager().heardAbout(_message.getKey());
|
||||||
} catch (IllegalArgumentException iae) {
|
} catch (IllegalArgumentException iae) {
|
||||||
invalidMessage = iae.getMessage();
|
invalidMessage = iae.getMessage();
|
||||||
@ -124,6 +126,24 @@ public class HandleFloodfillDatabaseStoreMessageJob extends JobImpl {
|
|||||||
getContext().statManager().addRateData("netDb.storeFloodOld", 1, 0);
|
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 {
|
} else {
|
||||||
if (_log.shouldLog(Log.WARN))
|
if (_log.shouldLog(Log.WARN))
|
||||||
_log.warn("Peer " + _fromHash.toBase64() + " sent bad data: " + invalidMessage);
|
_log.warn("Peer " + _fromHash.toBase64() + " sent bad data: " + invalidMessage);
|
||||||
|
Reference in New Issue
Block a user