diff --git a/router/java/src/net/i2p/router/client/ClientMessageEventListener.java b/router/java/src/net/i2p/router/client/ClientMessageEventListener.java index 4c6b5dd41185637dc13ec0af0d4bedb1c6a04329..6ea78a0630816b60a9424df6a37c622e08d091f8 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 851e7897ce853d8e01cd93c1fb9932779e933487..10c3560e1ddf23bb19d372dc93c44b077925b7ff 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;