From 3ac1988059ec9d9d6bf40a9a3bcd929d2747c1a8 Mon Sep 17 00:00:00 2001 From: hermens Date: Fri, 8 Aug 2008 13:56:29 +0000 Subject: [PATCH] Add some sanity checks for invalid seeds git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@5042 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- source/de/anomic/yacy/yacyCore.java | 6 ++++++ source/de/anomic/yacy/yacyPeerActions.java | 5 +++++ source/de/anomic/yacy/yacySeed.java | 15 +++++++++++---- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/source/de/anomic/yacy/yacyCore.java b/source/de/anomic/yacy/yacyCore.java index 470be15dd..3b46de5e1 100644 --- a/source/de/anomic/yacy/yacyCore.java +++ b/source/de/anomic/yacy/yacyCore.java @@ -273,6 +273,12 @@ public class yacyCore { // check if seed's lastSeen has been updated final yacySeed newSeed = sb.webIndex.seedDB.getConnected(this.seed.hash); if (newSeed != null) { + if (!newSeed.isOnline()) { + log.logFine("publish: recently handshaked " + this.seed.get(yacySeed.PEERTYPE, yacySeed.PEERTYPE_SENIOR) + + " peer '" + this.seed.getName() + "' at " + this.seed.getPublicAddress() + " is not online." + + " Removing Peer from connected"); + sb.webIndex.peerActions.peerDeparture(newSeed, "peer not online"); + } else if (newSeed.getLastSeenUTC() < (System.currentTimeMillis() - 10000)) { // update last seed date if (newSeed.getLastSeenUTC() >= this.seed.getLastSeenUTC()) { diff --git a/source/de/anomic/yacy/yacyPeerActions.java b/source/de/anomic/yacy/yacyPeerActions.java index 5c122999a..d258fe385 100644 --- a/source/de/anomic/yacy/yacyPeerActions.java +++ b/source/de/anomic/yacy/yacyPeerActions.java @@ -80,6 +80,11 @@ public class yacyPeerActions { yacyCore.log.logFine("connect: rejecting NOT QUALIFIED " + peerType + " seed " + seed.getName()); return false; } + if (!(peerType.equals(yacySeed.PEERTYPE_SENIOR) || peerType.equals(yacySeed.PEERTYPE_PRINCIPAL))) { + // reject unqualified seeds + yacyCore.log.logFine("connect: rejecting NOT QUALIFIED " + peerType + " seed " + seed.getName()); + return false; + } final yacySeed doubleSeed = this.seedDB.lookupByIP(seed.getInetAddress(), true, false, false); if ((doubleSeed != null) && (doubleSeed.getPort() == seed.getPort()) && (!(doubleSeed.hash.equals(seed.hash)))) { diff --git a/source/de/anomic/yacy/yacySeed.java b/source/de/anomic/yacy/yacySeed.java index 4d507eb40..a26241bbc 100644 --- a/source/de/anomic/yacy/yacySeed.java +++ b/source/de/anomic/yacy/yacySeed.java @@ -535,10 +535,10 @@ public class yacySeed implements Cloneable { // of the local UTC offset is wrong. We correct this here by adding the local UTC // offset again. return t + serverDate.UTCDiff(); - } catch (final java.text.ParseException e) { - return System.currentTimeMillis(); + } catch (final java.text.ParseException e) { // in case of an error make seed look old!!! + return System.currentTimeMillis() - serverDate.dayMillis; } catch (final java.lang.NumberFormatException e) { - return System.currentTimeMillis(); + return System.currentTimeMillis() - serverDate.dayMillis; } } @@ -835,7 +835,14 @@ public class yacySeed implements Cloneable { final String peerName = this.dna.get(yacySeed.NAME); if (peerName == null) return "no peer name given"; dna.put(yacySeed.NAME, checkPeerName(peerName)); - + + // type + final String peerType = this.getPeerType(); + if ((peerType == null) || + !(peerType.equals(yacySeed.PEERTYPE_VIRGIN) || peerType.equals(yacySeed.PEERTYPE_JUNIOR) + || peerType.equals(yacySeed.PEERTYPE_SENIOR) || peerType.equals(yacySeed.PEERTYPE_PRINCIPAL))) + return "invalid peerType '" + peerType + "'"; + // check IP if (!checkOwnIP) { // checking of IP is omitted if we read the own seed file