From f3f9f37cd05c81867e2852746b169132d8f1b598 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 01 Jul 2016 14:30:12 +0000
Subject: [PATCH] Partial OPENDJ-2625 Convert all code that uses JNDI to use the SDK instead
---
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/LDAPConnectionPool.java | 135 +++++++++++++++++++-------------------------
1 files changed, 59 insertions(+), 76 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/LDAPConnectionPool.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/LDAPConnectionPool.java
index 544bbba..607cb99 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/LDAPConnectionPool.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/LDAPConnectionPool.java
@@ -16,26 +16,26 @@
*/
package org.opends.guitools.controlpanel.browser;
+import static org.opends.admin.ads.util.PreferredConnection.Type.*;
+
import java.util.ArrayList;
import java.util.HashMap;
import javax.naming.NamingException;
import javax.naming.ldap.Control;
-import javax.naming.ldap.InitialLdapContext;
import javax.net.ssl.KeyManager;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.SearchScope;
import org.opends.admin.ads.util.ApplicationTrustManager;
-import org.opends.admin.ads.util.ConnectionUtils;
+import org.opends.admin.ads.util.ConnectionWrapper;
+import org.opends.admin.ads.util.PreferredConnection.Type;
import org.opends.guitools.controlpanel.event.ReferralAuthenticationListener;
import org.opends.server.types.HostPort;
import org.opends.server.types.LDAPURL;
import com.forgerock.opendj.cli.CliConstants;
-import static org.opends.admin.ads.util.ConnectionUtils.*;
-
/**
* An LDAPConnectionPool is a pool of LDAPConnection.
* <BR><BR>
@@ -77,22 +77,21 @@
/**
* Returns <CODE>true</CODE> if the connection passed is registered in the
* connection pool, <CODE>false</CODE> otherwise.
- * @param ctx the connection.
+ * @param conn the connection.
* @return <CODE>true</CODE> if the connection passed is registered in the
* connection pool, <CODE>false</CODE> otherwise.
*/
- public boolean isConnectionRegistered(InitialLdapContext ctx) {
+ public boolean isConnectionRegistered(ConnectionWrapper conn) {
for (String key : connectionTable.keySet())
{
ConnectionRecord cr = connectionTable.get(key);
- HostPort hostPort = getHostPort(ctx);
- HostPort crHostPort = getHostPort(cr.ctx);
- if (cr.ctx != null
- && hostPort.equals(crHostPort)
- && getBindDN(cr.ctx).equals(getBindDN(ctx))
- && getBindPassword(cr.ctx).equals(getBindPassword(ctx))
- && isSSL(cr.ctx) == isSSL(ctx)
- && isStartTLS(cr.ctx) == isStartTLS(ctx)) {
+ if (cr.conn != null
+ && conn.getHostPort().equals(cr.conn.getHostPort())
+ && cr.conn.getBindDn().equals(conn.getBindDn())
+ && cr.conn.getBindPassword().equals(conn.getBindPassword())
+ && cr.conn.isSSL() == conn.isSSL()
+ && cr.conn.isStartTLS() == conn.isStartTLS())
+ {
return true;
}
}
@@ -101,14 +100,14 @@
/**
* Registers a connection in this connection pool.
- * @param ctx the connection to be registered.
+ * @param conn the connection to be registered.
*/
- public void registerConnection(InitialLdapContext ctx) {
- registerAuth(ctx);
- LDAPURL url = makeLDAPUrl(ctx);
+ public void registerConnection(ConnectionWrapper conn) {
+ registerAuth(conn);
+ LDAPURL url = makeLDAPUrl(conn);
String key = makeKeyFromLDAPUrl(url);
ConnectionRecord cr = new ConnectionRecord();
- cr.ctx = ctx;
+ cr.conn = conn;
cr.counter = 1;
cr.disconnectAfterUse = false;
connectionTable.put(key, cr);
@@ -116,13 +115,16 @@
/**
* Unregisters a connection from this connection pool.
- * @param ctx the connection to be unregistered.
- * @throws NamingException if there is a problem unregistering the connection.
+ *
+ * @param conn
+ * the connection to be unregistered.
+ * @throws NamingException
+ * if there is a problem unregistering the connection.
*/
- public void unregisterConnection(InitialLdapContext ctx)
+ public void unregisterConnection(ConnectionWrapper conn)
throws NamingException
{
- LDAPURL url = makeLDAPUrl(ctx);
+ LDAPURL url = makeLDAPUrl(conn);
unRegisterAuth(url);
String key = makeKeyFromLDAPUrl(url);
connectionTable.remove(key);
@@ -154,7 +156,7 @@
* @return a connection to the provided LDAP URL.
* @throws NamingException if there was an error connecting.
*/
- public InitialLdapContext getConnection(LDAPURL ldapUrl)
+ public ConnectionWrapper getConnection(LDAPURL ldapUrl)
throws NamingException {
String key = makeKeyFromLDAPUrl(ldapUrl);
ConnectionRecord cr;
@@ -163,7 +165,7 @@
cr = connectionTable.get(key);
if (cr == null) {
cr = new ConnectionRecord();
- cr.ctx = null;
+ cr.conn = null;
cr.counter = 1;
cr.disconnectAfterUse = false;
connectionTable.put(key, cr);
@@ -175,7 +177,7 @@
synchronized(cr) {
try {
- if (cr.ctx == null) {
+ if (cr.conn == null) {
boolean registerAuth = false;
AuthRecord authRecord = authTable.get(key);
if (authRecord == null)
@@ -184,8 +186,8 @@
authRecord = authTable.values().iterator().next();
registerAuth = true;
}
- cr.ctx = createLDAPConnection(ldapUrl, authRecord);
- cr.ctx.setRequestControls(requestControls);
+ cr.conn = createLDAPConnection(ldapUrl, authRecord);
+ cr.conn.getLdapContext().setRequestControls(requestControls);
if (registerAuth)
{
authTable.put(key, authRecord);
@@ -203,7 +205,7 @@
}
}
- return cr.ctx;
+ return cr.conn;
}
/**
@@ -218,28 +220,28 @@
requestControls = ctls;
for (ConnectionRecord cr : connectionTable.values())
{
- if (cr.ctx != null)
+ if (cr.conn != null)
{
- cr.ctx.setRequestControls(requestControls);
+ cr.conn.getLdapContext().setRequestControls(requestControls);
}
}
}
/**
- * Release an LDAPConnection created by getConnection().
- * The connection should be considered as virtually disconnected
- * and not be used anymore.
- * @param ctx the connection to be released.
+ * Release an LDAPConnection created by getConnection(). The connection should be considered as
+ * virtually disconnected and not be used anymore.
+ *
+ * @param conn
+ * the connection to be released.
*/
- public synchronized void releaseConnection(InitialLdapContext ctx) {
-
+ public synchronized void releaseConnection(ConnectionWrapper conn) {
String targetKey = null;
ConnectionRecord targetRecord = null;
synchronized(this) {
for (String key : connectionTable.keySet()) {
ConnectionRecord cr = connectionTable.get(key);
- if (cr.ctx == ctx) {
+ if (cr.conn == conn) {
targetKey = key;
targetRecord = cr;
if (targetKey != null)
@@ -279,7 +281,7 @@
* provided authentication (for testing purposes).
* @throws NamingException if an error occurs connecting.
*/
- private void registerAuth(LDAPURL ldapUrl, String dn, String pw,
+ private void registerAuth(LDAPURL ldapUrl, DN dn, String pw,
boolean connect) throws NamingException {
String key = makeKeyFromLDAPUrl(ldapUrl);
@@ -288,8 +290,7 @@
ar.password = pw;
if (connect) {
- InitialLdapContext ctx = createLDAPConnection(ldapUrl, ar);
- ctx.close();
+ createLDAPConnection(ldapUrl, ar).close();
}
synchronized(this) {
@@ -313,13 +314,12 @@
* Register authentication data from an existing connection.
* This routine recreates the LDAP URL corresponding to
* the connection and passes it to registerAuth(LDAPURL).
- * @param ctx the connection that we retrieve the authentication information
- * from.
+ * @param conn the connection that we retrieve the authentication information from.
*/
- private void registerAuth(InitialLdapContext ctx) {
- LDAPURL url = makeLDAPUrl(ctx);
+ private void registerAuth(ConnectionWrapper conn) {
+ LDAPURL url = makeLDAPUrl(conn);
try {
- registerAuth(url, getBindDN(ctx), getBindPassword(ctx), false);
+ registerAuth(url, conn.getBindDn(), conn.getBindPassword(), false);
}
catch (NamingException x) {
throw new RuntimeException("Bug");
@@ -331,8 +331,7 @@
* Unregister authentication data.
* If for the given url there's a connection, try to bind as anonymous.
* If unbind fails throw NamingException.
- * @param ldapUrl the url associated with the authentication to be
- * unregistered.
+ * @param ldapUrl the url associated with the authentication to be unregistered.
* @throws NamingException if the unbind fails.
*/
private void unRegisterAuth(LDAPURL ldapUrl) throws NamingException {
@@ -351,14 +350,7 @@
{
String key = makeKeyFromRecord(cr);
connectionTable.remove(key);
- try
- {
- cr.ctx.close();
- }
- catch (NamingException x)
- {
- // Bizarre. However it's not really a problem here.
- }
+ cr.conn.close();
}
/** Notifies the listeners that a referral authentication change happened. */
@@ -387,8 +379,8 @@
* @return the key to be used in Maps for the provided connection record.
*/
private static String makeKeyFromRecord(ConnectionRecord rec) {
- String protocol = ConnectionUtils.isSSL(rec.ctx) ? "LDAPS" : "LDAP";
- return protocol + ":" + getHostPort(rec.ctx);
+ String protocol = rec.conn.isSSL() ? "LDAPS" : "LDAP";
+ return protocol + ":" + rec.conn.getHostPort();
}
/**
@@ -399,21 +391,12 @@
* @return a connection.
* @throws NamingException if an error occurs when connecting.
*/
- private InitialLdapContext createLDAPConnection(LDAPURL ldapUrl,
- AuthRecord ar) throws NamingException
+ private ConnectionWrapper createLDAPConnection(LDAPURL ldapUrl, AuthRecord ar) throws NamingException
{
- // Take the base DN out of the URL and only keep the protocol, host and port
- ldapUrl = new LDAPURL(ldapUrl.getScheme(), ldapUrl.getHost(),
- ldapUrl.getPort(), (DN)null, null, null, null, null);
-
- if (isSecureLDAPUrl(ldapUrl))
- {
- return ConnectionUtils.createLdapsContext(ldapUrl.toString(), ar.dn,
- ar.password, getConnectTimeout(), null,
- getTrustManager(), getKeyManager());
- }
- return ConnectionUtils.createLdapContext(ldapUrl.toString(), ar.dn,
- ar.password, getConnectTimeout(), null);
+ final HostPort hostPort = new HostPort(ldapUrl.getHost(), ldapUrl.getPort());
+ final Type connectiontype = isSecureLDAPUrl(ldapUrl) ? LDAPS : LDAP;
+ return new ConnectionWrapper(hostPort, connectiontype, ar.dn.toString(), ar.password,
+ getConnectTimeout(), getTrustManager(), getKeyManager());
}
/**
@@ -474,8 +457,8 @@
return !LDAPURL.DEFAULT_SCHEME.equalsIgnoreCase(url.getScheme());
}
- private LDAPURL makeLDAPUrl(InitialLdapContext ctx) {
- return makeLDAPUrl(ConnectionUtils.getHostPort(ctx), "", isSSL(ctx));
+ private LDAPURL makeLDAPUrl(ConnectionWrapper conn) {
+ return makeLDAPUrl(conn.getHostPort(), "", conn.isSSL());
}
/**
@@ -521,13 +504,13 @@
/** A structure representing authentication data. */
class AuthRecord {
- String dn;
+ DN dn;
String password;
}
/** A structure representing an active connection. */
class ConnectionRecord {
- InitialLdapContext ctx;
+ ConnectionWrapper conn;
int counter;
boolean disconnectAfterUse;
}
--
Gitblit v1.10.0