Repository: activemq-artemis Updated Branches: refs/heads/2.6.x e4ccbb929 -> b80c29759
ARTEMIS-1970 Clean up LDAP connection in JAAS login module (cherry picked from commit 2ff4faab058c330ee9df1bcaa5e3a37ab60cc714) Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/b80c2975 Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/b80c2975 Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/b80c2975 Branch: refs/heads/2.6.x Commit: b80c29759dae2298c2a41bd48ebb88223f4fa995 Parents: e4ccbb9 Author: gtully <[email protected]> Authored: Fri Jul 6 12:38:20 2018 -0500 Committer: Clebert Suconic <[email protected]> Committed: Thu Jul 19 10:06:40 2018 -0400 ---------------------------------------------------------------------- .../spi/core/security/jaas/LDAPLoginModule.java | 1 + .../core/security/jaas/LDAPLoginModuleTest.java | 24 ++++++++++++++++++++ 2 files changed, 25 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b80c2975/artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/security/jaas/LDAPLoginModule.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/security/jaas/LDAPLoginModule.java b/artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/security/jaas/LDAPLoginModule.java index cc3c824..f8d7db5 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/security/jaas/LDAPLoginModule.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/security/jaas/LDAPLoginModule.java @@ -220,6 +220,7 @@ public class LDAPLoginModule implements LoginModule { private void clear() { username = null; userAuthenticated = false; + closeContext(); } @Override http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b80c2975/artemis-server/src/test/java/org/apache/activemq/artemis/core/security/jaas/LDAPLoginModuleTest.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/security/jaas/LDAPLoginModuleTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/security/jaas/LDAPLoginModuleTest.java index 4fbd2c8..97be299 100644 --- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/security/jaas/LDAPLoginModuleTest.java +++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/security/jaas/LDAPLoginModuleTest.java @@ -45,6 +45,7 @@ import org.apache.directory.server.annotations.CreateTransport; import org.apache.directory.server.core.annotations.ApplyLdifFiles; import org.apache.directory.server.core.integ.AbstractLdapTestUnit; import org.apache.directory.server.core.integ.FrameworkRunner; +import org.jboss.logging.Logger; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -60,6 +61,8 @@ import static org.junit.Assert.fail; @ApplyLdifFiles("test.ldif") public class LDAPLoginModuleTest extends AbstractLdapTestUnit { + private static final Logger logger = Logger.getLogger(LDAPLoginModuleTest.class); + private static final String PRINCIPAL = "uid=admin,ou=system"; private static final String CREDENTIALS = "secret"; @@ -109,6 +112,8 @@ public class LDAPLoginModuleTest extends AbstractLdapTestUnit { @Test public void testLogin() throws LoginException { + logger.info("num session: " + ldapServer.getLdapSessionManager().getSessions().length); + LoginContext context = new LoginContext("LDAPLogin", new CallbackHandler() { @Override public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { @@ -125,6 +130,24 @@ public class LDAPLoginModuleTest extends AbstractLdapTestUnit { }); context.login(); context.logout(); + + assertTrue("no sessions after logout", waitForSessions(0)); + } + + private boolean waitForSessions(int expected) { + final long expiry = System.currentTimeMillis() + 5000; + int numSession = ldapServer.getLdapSessionManager().getSessions().length; + while (numSession != expected && System.currentTimeMillis() < expiry) { + try { + TimeUnit.MILLISECONDS.sleep(100); + } catch (InterruptedException ok) { + break; + } + numSession = ldapServer.getLdapSessionManager().getSessions().length; + logger.info("num session " + numSession); + + } + return numSession == expected; } @Test @@ -150,6 +173,7 @@ public class LDAPLoginModuleTest extends AbstractLdapTestUnit { return; } fail("Should have failed authenticating"); + assertTrue("no sessions after logout", waitForSessions(0)); } @Test
