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/admin/ads/util/ConnectionWrapper.java |   89 ++++++++++++++++++++++++++++++++------------
 1 files changed, 65 insertions(+), 24 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 575f2a3..66ce546 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
@@ -69,6 +69,7 @@
   private final int connectTimeout;
   private final TrustManager trustManager;
   private final KeyManager keyManager;
+  private Type connectionType;
 
   /**
    * Creates a connection wrapper.
@@ -89,12 +90,21 @@
    *           If an error occurs
    */
   public ConnectionWrapper(String ldapUrl, Type connectionType, String bindDn, String bindPwd, int connectTimeout,
-      ApplicationTrustManager trustManager) throws NamingException
+      TrustManager trustManager) throws NamingException
   {
-    this(toHostPort(ldapUrl), connectionType, bindDn, bindPwd, connectTimeout, trustManager);
+    this(toHostPort(ldapUrl), connectionType, bindDn, bindPwd, connectTimeout, trustManager, null);
   }
 
-  private static HostPort toHostPort(String ldapUrl) throws NamingException
+  /**
+   * 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
     {
@@ -132,6 +142,20 @@
   }
 
   /**
+   * Creates a connection wrapper by copying the provided one.
+   *
+   * @param other
+   *          the {@link ConnectionWrapper} to copy
+   * @throws NamingException
+   *           If an error occurs
+   */
+  public ConnectionWrapper(ConnectionWrapper other) throws NamingException
+  {
+    this(other.hostPort, other.connectionType, other.bindDn.toString(), other.bindPwd, other.connectTimeout,
+        other.trustManager, other.keyManager);
+  }
+
+  /**
    * Creates a connection wrapper.
    *
    * @param hostPort
@@ -155,6 +179,7 @@
       int connectTimeout, TrustManager trustManager, KeyManager keyManager) throws NamingException
   {
     this.hostPort = hostPort;
+    this.connectionType = connectionType;
     this.bindDn = DN.valueOf(bindDn);
     this.bindPwd = bindPwd;
     this.connectTimeout = connectTimeout;
@@ -162,7 +187,7 @@
     this.keyManager = keyManager;
 
     final Options options = toOptions(connectionType, bindDn, bindPwd, connectTimeout, trustManager, keyManager);
-    ldapContext = createAdministrativeContext(options, bindDn, bindPwd);
+    ldapContext = createAdministrativeContext(options);
     connectionFactory = new LDAPConnectionFactory(hostPort.getHost(), hostPort.getPort(), options);
     connection = buildConnection();
   }
@@ -222,19 +247,38 @@
   }
 
   /**
-   * Returns the LDAP URL used by the InitialLdapContext.
+   * Returns the LDAP URL used by this connection.
    *
-   * @return the LDAP URL used by the InitialLdapContext.
+   * @return the LDAP URL used by this connection.
    */
   public String getLdapUrl()
   {
     return ConnectionUtils.getLdapUrl(ldapContext);
   }
 
-  private InitialLdapContext createAdministrativeContext(Options options, String bindDn, String bindPwd)
-      throws NamingException
+  /**
+   * Returns whether this connection uses SSL.
+   *
+   * @return {@code true} if this connection uses SSL {@code false} otherwise.
+   */
+  public boolean isSSL()
   {
-    final InitialLdapContext ctx = createAdministrativeContext0(options, bindDn, bindPwd);
+    return ConnectionUtils.isSSL(ldapContext);
+  }
+
+  /**
+   * Returns whether this connection uses StartTLS.
+   *
+   * @return {@code true} if this connection uses StartTLS {@code false} otherwise.
+   */
+  public boolean isStartTLS()
+  {
+    return ConnectionUtils.isStartTLS(ldapContext);
+  }
+
+  private InitialLdapContext createAdministrativeContext(Options options) throws NamingException
+  {
+    final InitialLdapContext ctx = createAdministrativeContext0(options);
     if (!connectedAsAdministrativeUser(ctx))
     {
       throw new NoPermissionException(ERR_NOT_ADMINISTRATIVE_USER.get().toString());
@@ -242,24 +286,21 @@
     return ctx;
   }
 
-  private InitialLdapContext createAdministrativeContext0(Options options, String bindDn, String bindPwd)
-      throws NamingException
+  private InitialLdapContext createAdministrativeContext0(Options options) throws NamingException
   {
-    SSLContext sslContext = options.get(SSL_CONTEXT);
-    boolean useSSL = sslContext != null;
-    boolean useStartTLS = options.get(SSL_USE_STARTTLS);
+    boolean useSSL = options.get(SSL_CONTEXT) != null;
     final String ldapUrl = getLDAPUrl(getHostPort(), useSSL);
-    if (useSSL)
+    final String bindDnStr = bindDn.toString();
+    switch (connectionType)
     {
-      return createLdapsContext(ldapUrl, bindDn, bindPwd, connectTimeout, null, trustManager, keyManager);
-    }
-    else if (useStartTLS)
-    {
-      return createStartTLSContext(ldapUrl, bindDn, bindPwd, connectTimeout, null, trustManager, keyManager, null);
-    }
-    else
-    {
-      return createLdapContext(ldapUrl, bindDn, bindPwd, connectTimeout, null);
+    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);
     }
   }
 

--
Gitblit v1.10.0