diff --git a/ChangeLog.md b/ChangeLog.md index 063b500e7..2a0819855 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a ## [Unreleased] +- fixed closing connection on failed authentication (#ES-772) + ## [6.8.1] - 2020-12-22 - fixed ignoring internal endpoints in acquireHostList (#DEVSUP-673) diff --git a/src/main/java/com/arangodb/internal/velocystream/VstCommunication.java b/src/main/java/com/arangodb/internal/velocystream/VstCommunication.java index 01625e7bd..0c1bcfd9c 100644 --- a/src/main/java/com/arangodb/internal/velocystream/VstCommunication.java +++ b/src/main/java/com/arangodb/internal/velocystream/VstCommunication.java @@ -22,7 +22,12 @@ import com.arangodb.ArangoDBException; import com.arangodb.internal.ArangoDefaults; -import com.arangodb.internal.net.*; +import com.arangodb.internal.net.AccessType; +import com.arangodb.internal.net.ArangoDBRedirectException; +import com.arangodb.internal.net.Host; +import com.arangodb.internal.net.HostDescription; +import com.arangodb.internal.net.HostHandle; +import com.arangodb.internal.net.HostHandler; import com.arangodb.internal.util.HostUtils; import com.arangodb.internal.util.RequestUtils; import com.arangodb.internal.util.ResponseUtils; @@ -87,7 +92,7 @@ protected synchronized C connect(final HostHandle hostHandle, final AccessType a connection.open(); hostHandler.success(); if (user != null) { - authenticate(connection); + tryAuthenticate(connection); } hostHandler.confirm(); return connection; @@ -111,6 +116,15 @@ protected synchronized C connect(final HostHandle hostHandle, final AccessType a } } + private void tryAuthenticate(final C connection) { + try { + authenticate(connection); + } catch (final ArangoDBException authException) { + connection.close(); + throw authException; + } + } + protected abstract void authenticate(final C connection); @Override