Loading projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnectionPool.java +4 −5 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ package ca.nrc.cadc.ac.server.ldap; import org.apache.log4j.Logger; import org.seleniumhq.jetty7.util.log.Log; import ca.nrc.cadc.ac.server.ldap.LdapConfig.LdapPool; import ca.nrc.cadc.ac.server.ldap.LdapConfig.PoolPolicy; Loading Loading @@ -166,6 +167,7 @@ public class LdapConnectionPool if (timeToCheckPool()) { // check to see if the configuration has changed logger.debug("checking for ldap config change"); LdapConfig newConfig = LdapConfig.getLdapConfig(); if (!newConfig.equals(currentConfig)) { Loading @@ -189,7 +191,7 @@ public class LdapConnectionPool return System.currentTimeMillis() - lastPoolCheck > POOL_CHECK_INTERVAL_MILLESCONDS; } private LDAPReadWriteConnectionPool createPool(LdapConfig config) static LDAPReadWriteConnectionPool createPool(LdapConfig config) { LDAPConnectionPool ro = createPool(config.getReadOnlyPool(), config); LDAPConnectionPool rw = createPool(config.getReadOnlyPool(), config); Loading @@ -197,7 +199,7 @@ public class LdapConnectionPool return pool; } private LDAPConnectionPool createPool(LdapPool pool, LdapConfig config) private static LDAPConnectionPool createPool(LdapPool pool, LdapConfig config) { try { Loading @@ -213,12 +215,10 @@ public class LdapConnectionPool if (pool.getPolicy().equals(PoolPolicy.roundRobin)) { serverSet = new RoundRobinServerSet(hosts, ports, LdapDAO.getSocketFactory(config)); profiler.checkpoint("Create round robin server set"); } else if (pool.getPolicy().equals(PoolPolicy.fewestConnections)) { serverSet = new FewestConnectionsServerSet(hosts, ports, LdapDAO.getSocketFactory(config)); profiler.checkpoint("Create fewest connections server set"); } else { Loading @@ -228,7 +228,6 @@ public class LdapConnectionPool SimpleBindRequest bindRequest = new SimpleBindRequest(config.getAdminUserDN(), config.getAdminPasswd()); LDAPConnectionPool connectionPool = new LDAPConnectionPool( serverSet, bindRequest, pool.getInitSize(), pool.getMaxSize()); profiler.checkpoint("Create connection pool"); return connectionPool; } Loading projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnections.java +61 −32 Original line number Diff line number Diff line Loading @@ -75,6 +75,7 @@ import ca.nrc.cadc.profiler.Profiler; import com.unboundid.ldap.sdk.LDAPConnection; import com.unboundid.ldap.sdk.LDAPException; import com.unboundid.ldap.sdk.LDAPReadWriteConnectionPool; /** * This class in the means by which the DAO classes obtain Loading @@ -82,6 +83,9 @@ import com.unboundid.ldap.sdk.LDAPException; * provided) or automatic and with a connection pool if a persistence * object is provided. * * This class is not thread-safe but does not need to be since new * instances of the DAO classes are always created. * * @author majorb */ class LdapConnections Loading @@ -92,12 +96,14 @@ class LdapConnections private LdapPersistence persistence; private LDAPConnection readOnlyConn; private LDAPConnection readWriteConn; private LDAPConnection autoConfigReadOnlyConn; private LDAPConnection autoConfigReadWriteConn; private LdapConfig config; private LDAPConnection nonPooledConn; private LDAPReadWriteConnectionPool manualConfigPool; private LDAPConnection manualConfigReadOnlyConn; private LDAPConnection manualConfigReadWriteConn; LdapConnections(LdapPersistence persistence) { Loading @@ -113,20 +119,26 @@ class LdapConnections { if (persistence != null) { if (readOnlyConn == null) log.debug("Obtaining auto config read only connection."); if (autoConfigReadOnlyConn == null) { readOnlyConn = persistence.getReadOnlyConnection(); autoConfigReadOnlyConn = persistence.getReadOnlyConnection(); profiler.checkpoint("Get read only connection"); } return readOnlyConn; return autoConfigReadOnlyConn; } else { if (nonPooledConn == null) log.debug("Obtaining manual config read only connection."); if (manualConfigPool == null) { manualConfigPool = LdapConnectionPool.createPool(config); } if (manualConfigReadOnlyConn == null) { nonPooledConn = getConnection(config); manualConfigReadOnlyConn = manualConfigPool.getReadConnection(); } return nonPooledConn; return manualConfigReadOnlyConn; } } Loading @@ -134,20 +146,26 @@ class LdapConnections { if (persistence != null) { if (readWriteConn == null) log.debug("Obtaining auto config read write connection."); if (autoConfigReadWriteConn == null) { readWriteConn = persistence.getReadWriteConnection(); autoConfigReadWriteConn = persistence.getReadWriteConnection(); profiler.checkpoint("Get read write connection"); } return readWriteConn; return autoConfigReadWriteConn; } else { if (nonPooledConn == null) log.debug("Obtaining manual config read write connection."); if (manualConfigPool == null) { manualConfigPool = LdapConnectionPool.createPool(config); } if (manualConfigReadWriteConn == null) { nonPooledConn = getConnection(config); manualConfigReadWriteConn = manualConfigPool.getReadConnection(); } return nonPooledConn; return manualConfigReadWriteConn; } } Loading @@ -155,21 +173,42 @@ class LdapConnections { if (persistence != null) { if (readOnlyConn != null) log.debug("Releasing auto config connections."); if (autoConfigReadOnlyConn != null) { persistence.releaseReadOnlyConnection(readOnlyConn); persistence.releaseReadOnlyConnection(autoConfigReadOnlyConn); profiler.checkpoint("Release read only connection"); } if (readWriteConn != null) if (autoConfigReadWriteConn != null) { persistence.releaseReadWriteConnection(readWriteConn); persistence.releaseReadWriteConnection(autoConfigReadWriteConn); profiler.checkpoint("Release read write connection"); } } if (nonPooledConn != null) else { log.debug("Releasing manual config connections."); if (manualConfigReadOnlyConn != null) { nonPooledConn.close(); profiler.checkpoint("Close non-pooled connection"); manualConfigPool.releaseReadConnection(manualConfigReadOnlyConn); } if (manualConfigReadWriteConn != null) { manualConfigPool.releaseWriteConnection(manualConfigReadWriteConn); } } } /** * Best-effort manual pool shutdown. */ @Override public void finalize() { log.debug("Closing manual config connection pool"); if (manualConfigPool != null) { manualConfigPool.close(); } } Loading @@ -179,17 +218,7 @@ class LdapConnections return persistence.getCurrentConfig(); else return config; } private static LDAPConnection getConnection(LdapConfig config) throws LDAPException { LDAPConnection conn = new LDAPConnection( LdapDAO.getSocketFactory(config), config.getReadWritePool().getServers().get(0), config.getPort()); log.debug("Binding as: " + config.getAdminUserDN()); conn.bind(config.getAdminUserDN(), config.getAdminPasswd()); return conn; } } projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/UserLoginServletTest.java +7 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,13 @@ import javax.security.auth.Subject; public class UserLoginServletTest { @Test public void blankTest() { // so there is at least one runnable test } // BM: Disabled test because it tries to augment the users' subject which // fails due to an JNDI lookup/bind error. //@Test public void getCheckCanImpersonate() throws Throwable { final AuthenticatorImpl mockAuthenticatorImpl = Loading projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/AddUserMemberActionTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,7 @@ public class AddUserMemberActionTest EasyMock.replay(groupPersistence); AddUserMemberAction action = new AddUserMemberAction("group", userID, userIDType); action.groupPersistence = groupPersistence; try { Loading Loading
projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnectionPool.java +4 −5 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ package ca.nrc.cadc.ac.server.ldap; import org.apache.log4j.Logger; import org.seleniumhq.jetty7.util.log.Log; import ca.nrc.cadc.ac.server.ldap.LdapConfig.LdapPool; import ca.nrc.cadc.ac.server.ldap.LdapConfig.PoolPolicy; Loading Loading @@ -166,6 +167,7 @@ public class LdapConnectionPool if (timeToCheckPool()) { // check to see if the configuration has changed logger.debug("checking for ldap config change"); LdapConfig newConfig = LdapConfig.getLdapConfig(); if (!newConfig.equals(currentConfig)) { Loading @@ -189,7 +191,7 @@ public class LdapConnectionPool return System.currentTimeMillis() - lastPoolCheck > POOL_CHECK_INTERVAL_MILLESCONDS; } private LDAPReadWriteConnectionPool createPool(LdapConfig config) static LDAPReadWriteConnectionPool createPool(LdapConfig config) { LDAPConnectionPool ro = createPool(config.getReadOnlyPool(), config); LDAPConnectionPool rw = createPool(config.getReadOnlyPool(), config); Loading @@ -197,7 +199,7 @@ public class LdapConnectionPool return pool; } private LDAPConnectionPool createPool(LdapPool pool, LdapConfig config) private static LDAPConnectionPool createPool(LdapPool pool, LdapConfig config) { try { Loading @@ -213,12 +215,10 @@ public class LdapConnectionPool if (pool.getPolicy().equals(PoolPolicy.roundRobin)) { serverSet = new RoundRobinServerSet(hosts, ports, LdapDAO.getSocketFactory(config)); profiler.checkpoint("Create round robin server set"); } else if (pool.getPolicy().equals(PoolPolicy.fewestConnections)) { serverSet = new FewestConnectionsServerSet(hosts, ports, LdapDAO.getSocketFactory(config)); profiler.checkpoint("Create fewest connections server set"); } else { Loading @@ -228,7 +228,6 @@ public class LdapConnectionPool SimpleBindRequest bindRequest = new SimpleBindRequest(config.getAdminUserDN(), config.getAdminPasswd()); LDAPConnectionPool connectionPool = new LDAPConnectionPool( serverSet, bindRequest, pool.getInitSize(), pool.getMaxSize()); profiler.checkpoint("Create connection pool"); return connectionPool; } Loading
projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnections.java +61 −32 Original line number Diff line number Diff line Loading @@ -75,6 +75,7 @@ import ca.nrc.cadc.profiler.Profiler; import com.unboundid.ldap.sdk.LDAPConnection; import com.unboundid.ldap.sdk.LDAPException; import com.unboundid.ldap.sdk.LDAPReadWriteConnectionPool; /** * This class in the means by which the DAO classes obtain Loading @@ -82,6 +83,9 @@ import com.unboundid.ldap.sdk.LDAPException; * provided) or automatic and with a connection pool if a persistence * object is provided. * * This class is not thread-safe but does not need to be since new * instances of the DAO classes are always created. * * @author majorb */ class LdapConnections Loading @@ -92,12 +96,14 @@ class LdapConnections private LdapPersistence persistence; private LDAPConnection readOnlyConn; private LDAPConnection readWriteConn; private LDAPConnection autoConfigReadOnlyConn; private LDAPConnection autoConfigReadWriteConn; private LdapConfig config; private LDAPConnection nonPooledConn; private LDAPReadWriteConnectionPool manualConfigPool; private LDAPConnection manualConfigReadOnlyConn; private LDAPConnection manualConfigReadWriteConn; LdapConnections(LdapPersistence persistence) { Loading @@ -113,20 +119,26 @@ class LdapConnections { if (persistence != null) { if (readOnlyConn == null) log.debug("Obtaining auto config read only connection."); if (autoConfigReadOnlyConn == null) { readOnlyConn = persistence.getReadOnlyConnection(); autoConfigReadOnlyConn = persistence.getReadOnlyConnection(); profiler.checkpoint("Get read only connection"); } return readOnlyConn; return autoConfigReadOnlyConn; } else { if (nonPooledConn == null) log.debug("Obtaining manual config read only connection."); if (manualConfigPool == null) { manualConfigPool = LdapConnectionPool.createPool(config); } if (manualConfigReadOnlyConn == null) { nonPooledConn = getConnection(config); manualConfigReadOnlyConn = manualConfigPool.getReadConnection(); } return nonPooledConn; return manualConfigReadOnlyConn; } } Loading @@ -134,20 +146,26 @@ class LdapConnections { if (persistence != null) { if (readWriteConn == null) log.debug("Obtaining auto config read write connection."); if (autoConfigReadWriteConn == null) { readWriteConn = persistence.getReadWriteConnection(); autoConfigReadWriteConn = persistence.getReadWriteConnection(); profiler.checkpoint("Get read write connection"); } return readWriteConn; return autoConfigReadWriteConn; } else { if (nonPooledConn == null) log.debug("Obtaining manual config read write connection."); if (manualConfigPool == null) { manualConfigPool = LdapConnectionPool.createPool(config); } if (manualConfigReadWriteConn == null) { nonPooledConn = getConnection(config); manualConfigReadWriteConn = manualConfigPool.getReadConnection(); } return nonPooledConn; return manualConfigReadWriteConn; } } Loading @@ -155,21 +173,42 @@ class LdapConnections { if (persistence != null) { if (readOnlyConn != null) log.debug("Releasing auto config connections."); if (autoConfigReadOnlyConn != null) { persistence.releaseReadOnlyConnection(readOnlyConn); persistence.releaseReadOnlyConnection(autoConfigReadOnlyConn); profiler.checkpoint("Release read only connection"); } if (readWriteConn != null) if (autoConfigReadWriteConn != null) { persistence.releaseReadWriteConnection(readWriteConn); persistence.releaseReadWriteConnection(autoConfigReadWriteConn); profiler.checkpoint("Release read write connection"); } } if (nonPooledConn != null) else { log.debug("Releasing manual config connections."); if (manualConfigReadOnlyConn != null) { nonPooledConn.close(); profiler.checkpoint("Close non-pooled connection"); manualConfigPool.releaseReadConnection(manualConfigReadOnlyConn); } if (manualConfigReadWriteConn != null) { manualConfigPool.releaseWriteConnection(manualConfigReadWriteConn); } } } /** * Best-effort manual pool shutdown. */ @Override public void finalize() { log.debug("Closing manual config connection pool"); if (manualConfigPool != null) { manualConfigPool.close(); } } Loading @@ -179,17 +218,7 @@ class LdapConnections return persistence.getCurrentConfig(); else return config; } private static LDAPConnection getConnection(LdapConfig config) throws LDAPException { LDAPConnection conn = new LDAPConnection( LdapDAO.getSocketFactory(config), config.getReadWritePool().getServers().get(0), config.getPort()); log.debug("Binding as: " + config.getAdminUserDN()); conn.bind(config.getAdminUserDN(), config.getAdminPasswd()); return conn; } }
projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/UserLoginServletTest.java +7 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,13 @@ import javax.security.auth.Subject; public class UserLoginServletTest { @Test public void blankTest() { // so there is at least one runnable test } // BM: Disabled test because it tries to augment the users' subject which // fails due to an JNDI lookup/bind error. //@Test public void getCheckCanImpersonate() throws Throwable { final AuthenticatorImpl mockAuthenticatorImpl = Loading
projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/AddUserMemberActionTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,7 @@ public class AddUserMemberActionTest EasyMock.replay(groupPersistence); AddUserMemberAction action = new AddUserMemberAction("group", userID, userIDType); action.groupPersistence = groupPersistence; try { Loading