From d87d4eb232365c2c1a277cc8203d0a2f05f0ff43 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Thu, 5 Dec 2013 16:14:51 +0000 Subject: [PATCH] I2CP: Disconnect client on attempt to publish invalid leaseset --- .../router/client/ClientMessageEventListener.java | 12 ++++++++++-- .../kademlia/KademliaNetworkDatabaseFacade.java | 7 +++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/router/java/src/net/i2p/router/client/ClientMessageEventListener.java b/router/java/src/net/i2p/router/client/ClientMessageEventListener.java index 4c6b5dd411..6ea78a0630 100644 --- a/router/java/src/net/i2p/router/client/ClientMessageEventListener.java +++ b/router/java/src/net/i2p/router/client/ClientMessageEventListener.java @@ -289,14 +289,22 @@ class ClientMessageEventListener implements I2CPMessageReader.I2CPMessageEventLi if ( (message.getLeaseSet() == null) || (message.getPrivateKey() == null) || (message.getSigningPrivateKey() == null) ) { if (_log.shouldLog(Log.ERROR)) _log.error("Null lease set granted: " + message); + _runner.disconnectClient("Invalid CreateLeaseSetMessage"); return; } + _context.keyManager().registerKeys(message.getLeaseSet().getDestination(), message.getSigningPrivateKey(), message.getPrivateKey()); + try { + _context.netDb().publish(message.getLeaseSet()); + } catch (IllegalArgumentException iae) { + if (_log.shouldLog(Log.ERROR)) + _log.error("Invalid leaseset from client", iae); + _runner.disconnectClient("Invalid leaseset: " + iae); + return; + } if (_log.shouldLog(Log.INFO)) _log.info("New lease set granted for destination " + message.getLeaseSet().getDestination().calculateHash().toBase64()); - _context.keyManager().registerKeys(message.getLeaseSet().getDestination(), message.getSigningPrivateKey(), message.getPrivateKey()); - _context.netDb().publish(message.getLeaseSet()); // leaseSetCreated takes care of all the LeaseRequestState stuff (including firing any jobs) _runner.leaseSetCreated(message.getLeaseSet()); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java index 851e7897ce..10c3560e1d 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java @@ -527,14 +527,17 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { private static final long PUBLISH_DELAY = 3*1000; - public void publish(LeaseSet localLeaseSet) { + /** + * @throws IllegalArgumentException if the leaseSet is not valid + */ + public void publish(LeaseSet localLeaseSet) throws IllegalArgumentException { if (!_initialized) return; Hash h = localLeaseSet.getDestination().calculateHash(); try { store(h, localLeaseSet); } catch (IllegalArgumentException iae) { _log.error("wtf, locally published leaseSet is not valid?", iae); - return; + throw iae; } if (!_context.clientManager().shouldPublishLeaseSet(h)) return; -- GitLab