From 609077ed606e3b094e303f298e8dca10567bc3e2 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 05 Aug 2016 18:42:07 +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/admin/ads/util/ConnectionWrapper.java |  148 ++++---------------------------------------------
 1 files changed, 13 insertions(+), 135 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionWrapper.java b/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionWrapper.java
index d0d0cb1..ce9447c 100644
--- a/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionWrapper.java
+++ b/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionWrapper.java
@@ -17,28 +17,20 @@
 
 import static org.forgerock.opendj.config.client.ldap.LDAPManagementContext.*;
 import static org.forgerock.opendj.ldap.LDAPConnectionFactory.*;
+import static org.forgerock.opendj.ldap.LdapException.*;
+import static org.forgerock.opendj.ldap.ResultCode.*;
 import static org.forgerock.opendj.ldap.requests.Requests.*;
 import static org.forgerock.util.time.Duration.*;
-import static org.opends.admin.ads.util.ConnectionUtils.*;
 import static org.opends.admin.ads.util.PreferredConnection.Type.*;
-import static org.opends.messages.AdminToolMessages.*;
 
 import java.io.Closeable;
-import java.net.URI;
-import java.net.URISyntaxException;
 import java.security.GeneralSecurityException;
 import java.util.concurrent.TimeUnit;
 
-import javax.naming.Context;
-import javax.naming.NamingException;
-import javax.naming.NoPermissionException;
-import javax.naming.ldap.InitialLdapContext;
 import javax.net.ssl.KeyManager;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.TrustManager;
 
-import org.forgerock.i18n.LocalizableMessage;
-import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.opendj.config.LDAPProfile;
 import org.forgerock.opendj.ldap.Connection;
 import org.forgerock.opendj.ldap.DN;
@@ -63,11 +55,8 @@
  */
 public class ConnectionWrapper implements Closeable
 {
-  private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
-
   private final LDAPConnectionFactory connectionFactory;
   private final Connection connection;
-  private final InitialLdapContext ldapContext;
   private final HostPort hostPort;
   private DN bindDn;
   private String bindPwd;
@@ -79,52 +68,6 @@
   /**
    * Creates a connection wrapper.
    *
-   * @param ldapUrl
-   *          the ldap URL containing the host name and port number to connect to
-   * @param connectionType
-   *          the type of connection (LDAP, LDAPS, START_TLS)
-   * @param bindDn
-   *          the bind DN
-   * @param bindPwd
-   *          the bind password
-   * @param connectTimeout
-   *          connect timeout to use for the connection
-   * @param trustManager
-   *          trust manager to use for a secure connection
-   * @throws NamingException
-   *           If an error occurs
-   */
-  public ConnectionWrapper(String ldapUrl, Type connectionType, DN bindDn, String bindPwd, int connectTimeout,
-      TrustManager trustManager) throws NamingException
-  {
-    this(toHostPort(ldapUrl), connectionType, bindDn, bindPwd, connectTimeout, trustManager, null);
-  }
-
-  /**
-   * Converts an ldapUrl to a HostPort.
-   *
-   * @param ldapUrl
-   *          the ldapUrl to convert
-   * @return the host and port extracted from the ldapUrl
-   * @throws NamingException
-   *           if the ldapUrl is not a valid URL
-   */
-  public static HostPort toHostPort(String ldapUrl) throws NamingException
-  {
-    try
-    {
-      URI uri = new URI(ldapUrl);
-      return new HostPort(uri.getHost(), uri.getPort());
-    }
-    catch (URISyntaxException e)
-    {
-      throw new NamingException(e.getLocalizedMessage() + ". LDAP URL was: \"" + ldapUrl + "\"");
-    }
-  }
-
-  /**
-   * Creates a connection wrapper.
-   *
    * @param hostPort
    *          the host name and port number to connect to
    * @param connectionType
@@ -137,11 +80,11 @@
    *          connect timeout to use for the connection
    * @param trustManager
    *          trust manager to use for a secure connection
-   * @throws NamingException
+   * @throws LdapException
    *           If an error occurs
    */
   public ConnectionWrapper(HostPort hostPort, Type connectionType, DN bindDn, String bindPwd, int connectTimeout,
-      TrustManager trustManager) throws NamingException
+      TrustManager trustManager) throws LdapException
   {
     this(hostPort, connectionType, bindDn, bindPwd, connectTimeout, trustManager, null);
   }
@@ -151,10 +94,10 @@
    *
    * @param other
    *          the {@link ConnectionWrapper} to copy
-   * @throws NamingException
+   * @throws LdapException
    *           If an error occurs
    */
-  public ConnectionWrapper(ConnectionWrapper other) throws NamingException
+  public ConnectionWrapper(ConnectionWrapper other) throws LdapException
   {
     this(other.hostPort, other.connectionType, other.bindDn, other.bindPwd, other.connectTimeout,
         other.trustManager, other.keyManager);
@@ -177,11 +120,11 @@
    *          trust manager to use for a secure connection
    * @param keyManager
    *          key manager to use for a secure connection
-   * @throws NamingException
+   * @throws LdapException
    *           If an error occurs
    */
   public ConnectionWrapper(HostPort hostPort, PreferredConnection.Type connectionType, DN bindDn, String bindPwd,
-      int connectTimeout, TrustManager trustManager, KeyManager keyManager) throws NamingException
+      int connectTimeout, TrustManager trustManager, KeyManager keyManager) throws LdapException
   {
     this.hostPort = hostPort;
     this.connectionType = connectionType;
@@ -192,13 +135,12 @@
     this.keyManager = keyManager;
 
     final Options options = toOptions(connectionType, bindDn, bindPwd, connectTimeout, trustManager, keyManager);
-    ldapContext = createAdministrativeContext();
     connectionFactory = new LDAPConnectionFactory(hostPort.getHost(), hostPort.getPort(), options);
-    connection = buildConnection();
+    connection = connectionFactory.getConnection();
   }
 
   private static Options toOptions(Type connectionType, DN bindDn, String bindPwd, long connectTimeout,
-      TrustManager trustManager, KeyManager keyManager) throws NamingException
+      TrustManager trustManager, KeyManager keyManager) throws LdapException
   {
     final boolean isStartTls = START_TLS.equals(connectionType);
     final boolean isLdaps = LDAPS.equals(connectionType);
@@ -217,7 +159,7 @@
     return options;
   }
 
-  private static SSLContext getSSLContext(TrustManager trustManager, KeyManager keyManager) throws NamingException
+  private static SSLContext getSSLContext(TrustManager trustManager, KeyManager keyManager) throws LdapException
   {
     try
     {
@@ -228,7 +170,7 @@
     }
     catch (GeneralSecurityException e)
     {
-      throw new NamingException("Unable to perform SSL initialization:" + e.getMessage());
+      throw newLdapException(CLIENT_SIDE_PARAM_ERROR, "Unable to perform SSL initialization:" + e.getMessage());
     }
   }
 
@@ -259,21 +201,7 @@
    */
   public String getLdapUrl()
   {
-    return getEnvProperty(ldapContext, Context.PROVIDER_URL);
-  }
-
-  private static String getEnvProperty(InitialLdapContext ctx, String property)
-  {
-    try
-    {
-      return (String) ctx.getEnvironment().get(property);
-    }
-    catch (NamingException ne)
-    {
-      // This is really strange. Seems like a bug somewhere.
-      logger.warn(LocalizableMessage.raw("Naming exception getting environment of " + ctx, ne));
-      return null;
-    }
+    return (isLdaps() ? "ldaps" : "ldap") + "://" + getHostPort();
   }
 
   /**
@@ -296,45 +224,6 @@
     return getConnectionType() == START_TLS;
   }
 
-  private InitialLdapContext createAdministrativeContext() throws NamingException
-  {
-    final InitialLdapContext ctx = createAdministrativeContext0();
-    if (!connectedAsAdministrativeUser(ctx))
-    {
-      throw new NoPermissionException(ERR_NOT_ADMINISTRATIVE_USER.get().toString());
-    }
-    return ctx;
-  }
-
-  private InitialLdapContext createAdministrativeContext0() throws NamingException
-  {
-    final String ldapUrl = getLDAPUrl(getHostPort(), isLdaps());
-    final String bindDnStr = bindDn.toString();
-    switch (connectionType)
-    {
-    case LDAPS:
-      return createLdapsContext(ldapUrl, bindDnStr, bindPwd, connectTimeout, null, trustManager, keyManager);
-    case START_TLS:
-      return createStartTLSContext(ldapUrl, bindDnStr, bindPwd, connectTimeout, null, trustManager, keyManager, null);
-    case LDAP:
-      return createLdapContext(ldapUrl, bindDnStr, bindPwd, connectTimeout, null);
-    default:
-      throw new RuntimeException("Not implemented for connection type: " + connectionType);
-    }
-  }
-
-  private Connection buildConnection() throws NamingException
-  {
-    try
-    {
-      return connectionFactory.getConnection();
-    }
-    catch (LdapException e)
-    {
-      throw new NamingException("Unable to get a connection from connection factory:" + e.getMessage());
-    }
-  }
-
   /**
    * Returns the connection.
    *
@@ -356,16 +245,6 @@
   }
 
   /**
-   * Returns the ldap context (JNDI).
-   *
-   * @return the ldap context
-   */
-  public InitialLdapContext getLdapContext()
-  {
-    return ldapContext;
-  }
-
-  /**
    * Returns the host name and port number of this connection.
    *
    * @return the hostPort of this connection
@@ -389,7 +268,6 @@
   public void close()
   {
     StaticUtils.close(connectionFactory, connection);
-    StaticUtils.close(ldapContext);
   }
 
   @Override

--
Gitblit v1.10.0