From 18dc6866af53fb06efb0879f9c9c369e698d7379 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 18 Apr 2016 06:57:37 +0000
Subject: [PATCH] Remove ConnectionWrapper constructor accepting an InitialLdapContext
---
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java | 36 +-
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LoginPanel.java | 27 -
opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ServerLoader.java | 66 +---
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java | 16
opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/UninstallCliHelper.java | 23
opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java | 348 ++++++++---------------
opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/ui/LoginDialog.java | 37 -
opendj-server-legacy/src/main/java/org/opends/server/tools/status/StatusCli.java | 13
opendj-server-legacy/src/main/java/org/opends/admin/ads/util/PreferredConnection.java | 22 -
opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java | 44 +-
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java | 13
opendj-server-legacy/src/main/java/org/opends/admin/ads/TopologyCache.java | 14
opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionWrapper.java | 221 +++++++++++---
13 files changed, 405 insertions(+), 475 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/admin/ads/TopologyCache.java b/opendj-server-legacy/src/main/java/org/opends/admin/ads/TopologyCache.java
index 7ffe277..6100447 100644
--- a/opendj-server-legacy/src/main/java/org/opends/admin/ads/TopologyCache.java
+++ b/opendj-server-legacy/src/main/java/org/opends/admin/ads/TopologyCache.java
@@ -30,7 +30,6 @@
import javax.naming.NamingException;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
-import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapName;
import org.forgerock.i18n.LocalizableMessage;
@@ -38,10 +37,10 @@
import org.opends.admin.ads.ADSContext.ServerProperty;
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;
import org.opends.admin.ads.util.ServerLoader;
import org.opends.quicksetup.util.Utils;
-import org.opends.server.util.StaticUtils;
import static com.forgerock.opendj.cli.Utils.*;
@@ -441,15 +440,11 @@
"domain-name", "server-id"
});
- InitialLdapContext ctx = null;
NamingEnumeration<SearchResult> monitorEntries = null;
- try
+ ServerLoader loader = getServerLoader(replicationServer.getAdsProperties());
+ try (ConnectionWrapper conn = loader.createConnectionWrapper())
{
- ServerLoader loader =
- getServerLoader(replicationServer.getAdsProperties());
- ctx = loader.createContext();
-
- monitorEntries = ctx.search(
+ monitorEntries = conn.getLdapContext().search(
new LdapName("cn=monitor"), "(missing-changes=*)", ctls);
while (monitorEntries.hasMore())
@@ -505,7 +500,6 @@
"Unexpected error closing enumeration on monitor entries" + t, t));
}
}
- StaticUtils.close(ctx);
}
}
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 07ebac6..3e46e06 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
@@ -15,36 +15,36 @@
*/
package org.opends.admin.ads.util;
-import static org.forgerock.opendj.ldap.LDAPConnectionFactory.AUTHN_BIND_REQUEST;
-import static org.forgerock.opendj.ldap.LDAPConnectionFactory.CONNECT_TIMEOUT;
-import static org.forgerock.opendj.ldap.LDAPConnectionFactory.SSL_CONTEXT;
-import static org.forgerock.opendj.ldap.LDAPConnectionFactory.SSL_USE_STARTTLS;
-import static org.opends.admin.ads.util.ConnectionUtils.getBindDN;
-import static org.opends.admin.ads.util.ConnectionUtils.getBindPassword;
-import static org.opends.admin.ads.util.ConnectionUtils.getHostPort;
-import static org.opends.admin.ads.util.ConnectionUtils.isSSL;
-import static org.opends.admin.ads.util.ConnectionUtils.isStartTLS;
+import static org.forgerock.opendj.config.client.ldap.LDAPManagementContext.*;
+import static org.forgerock.opendj.ldap.LDAPConnectionFactory.*;
+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.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.opendj.config.LDAPProfile;
-import org.forgerock.opendj.config.client.ManagementContext;
-import org.forgerock.opendj.config.client.ldap.LDAPManagementContext;
import org.forgerock.opendj.ldap.Connection;
import org.forgerock.opendj.ldap.LDAPConnectionFactory;
import org.forgerock.opendj.ldap.LdapException;
import org.forgerock.opendj.ldap.SSLContextBuilder;
import org.forgerock.opendj.ldap.requests.Requests;
+import org.forgerock.opendj.ldap.requests.SimpleBindRequest;
import org.forgerock.opendj.server.config.client.RootCfgClient;
import org.forgerock.util.Options;
import org.forgerock.util.time.Duration;
+import org.opends.admin.ads.util.PreferredConnection.Type;
import org.opends.server.types.HostPort;
import org.opends.server.util.StaticUtils;
@@ -62,36 +62,178 @@
private final LDAPConnectionFactory connectionFactory;
private final Connection connection;
private final InitialLdapContext ldapContext;
+ private final int connectTimeout;
+ private final TrustManager trustManager;
+ private final KeyManager keyManager;
/**
- * Creates a connection wrapper from JNDI context and connection data.
+ * Creates a connection wrapper.
*
- * @param ctx
- * the initial ldap context for JNDI
+ * @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
+ * connect timeout to use for the connection
* @param trustManager
- * trust manager to use for a secure connection
+ * trust manager to use for a secure connection
* @throws NamingException
* If an error occurs
*/
- public ConnectionWrapper(InitialLdapContext ctx, long connectTimeout, TrustManager trustManager)
- throws NamingException
+ public ConnectionWrapper(String ldapUrl, Type connectionType, String bindDn, String bindPwd, int connectTimeout,
+ ApplicationTrustManager trustManager) throws NamingException
{
- ldapContext = ctx;
+ this(toHostPort(ldapUrl), connectionType, bindDn, bindPwd, connectTimeout, trustManager);
+ }
+
+ private static HostPort toHostPort(String ldapUrl) throws NamingException
+ {
+ try
+ {
+ URI uri = new URI(ldapUrl);
+ return new HostPort(uri.getHost(), uri.getPort());
+ }
+ catch (URISyntaxException e)
+ {
+ // FIXME JNR
+ throw new NamingException(e.getLocalizedMessage());
+ }
+ }
+
+ /**
+ * Creates a connection wrapper.
+ *
+ * @param hostPort
+ * 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(HostPort hostPort, Type connectionType, String bindDn, String bindPwd, int connectTimeout,
+ TrustManager trustManager) throws NamingException
+ {
+ this(hostPort, connectionType, bindDn, bindPwd, connectTimeout, trustManager, null);
+ }
+
+ /**
+ * Creates a connection wrapper.
+ *
+ * @param hostPort
+ * 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
+ * @param keyManager
+ * key manager to use for a secure connection
+ * @throws NamingException
+ * If an error occurs
+ */
+ public ConnectionWrapper(HostPort hostPort, PreferredConnection.Type connectionType, String bindDn, String bindPwd,
+ int connectTimeout, TrustManager trustManager, KeyManager keyManager) throws NamingException
+ {
+ this.connectTimeout = connectTimeout;
+ this.trustManager = trustManager;
+ this.keyManager = keyManager;
+
+ final Options options = toOptions(connectionType, bindDn, bindPwd, connectTimeout, trustManager, keyManager);
+ ldapContext = createAdministrativeContext(hostPort, options);
+ connectionFactory = buildConnectionFactory(options, hostPort);
+ connection = buildConnection();
+ }
+
+ private static Options toOptions(Type connectionType, String bindDn, String bindPwd, long connectTimeout,
+ TrustManager trustManager, KeyManager keyManager) throws NamingException
+ {
+ final boolean isStartTls = START_TLS.equals(connectionType);
+ final boolean isLdaps = LDAPS.equals(connectionType);
Options options = Options.defaultOptions();
options.set(CONNECT_TIMEOUT, new Duration(connectTimeout, TimeUnit.MILLISECONDS));
- if (isSSL(ctx) || isStartTLS(ctx))
+ if (isLdaps || isStartTls)
{
- options.set(SSL_CONTEXT, getSSLContext(trustManager)).set(SSL_USE_STARTTLS, isStartTLS(ctx));
+ options.set(SSL_CONTEXT, getSSLContext(trustManager, keyManager))
+ .set(SSL_USE_STARTTLS, isStartTls);
}
- options.set(AUTHN_BIND_REQUEST, Requests.newSimpleBindRequest(getBindDN(ctx), getBindPassword(ctx).toCharArray()));
- HostPort hostPort = getHostPort(ctx);
- connectionFactory = new LDAPConnectionFactory(hostPort.getHost(), hostPort.getPort(), options);
+ options.set(AUTHN_BIND_REQUEST, Requests.newSimpleBindRequest(bindDn, bindPwd.toCharArray()));
+ return options;
+ }
+
+ private static SSLContext getSSLContext(TrustManager trustManager, KeyManager keyManager) throws NamingException
+ {
try
{
- connection = connectionFactory.getConnection();
+ return new SSLContextBuilder().setTrustManager(trustManager != null ? trustManager : new BlindTrustManager())
+ .setKeyManager(keyManager).getSSLContext();
+ }
+ catch (GeneralSecurityException e)
+ {
+ throw new NamingException("Unable to perform SSL initialization:" + e.getMessage());
+ }
+ }
+
+ private InitialLdapContext createAdministrativeContext(HostPort hostPort, Options options) throws NamingException
+ {
+ final InitialLdapContext ctx = createAdministrativeContext0(hostPort, options);
+ if (!connectedAsAdministrativeUser(ctx))
+ {
+ throw new NoPermissionException(ERR_NOT_ADMINISTRATIVE_USER.get().toString());
+ }
+ return ctx;
+ }
+
+ private InitialLdapContext createAdministrativeContext0(HostPort hostPort, Options options) throws NamingException
+ {
+ SSLContext sslContext = options.get(SSL_CONTEXT);
+ boolean useSSL = sslContext != null;
+ boolean useStartTLS = options.get(SSL_USE_STARTTLS);
+ SimpleBindRequest bindRequest = (SimpleBindRequest) options.get(AUTHN_BIND_REQUEST);
+ String bindDn = bindRequest.getName();
+ String bindPwd = new String(bindRequest.getPassword());
+ final String ldapUrl = getLDAPUrl(hostPort, useSSL);
+ if (useSSL)
+ {
+ 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);
+ }
+ }
+
+ private LDAPConnectionFactory buildConnectionFactory(Options options, HostPort hostPort)
+ {
+ return new LDAPConnectionFactory(hostPort.getHost(), hostPort.getPort(), options);
+ }
+
+ private Connection buildConnection() throws NamingException
+ {
+ try
+ {
+ return connectionFactory.getConnection();
}
catch (LdapException e)
{
@@ -110,17 +252,6 @@
}
/**
- * Returns the root configuration client by using the inrnal Connection.
- *
- * @return the root configuration client
- */
- public RootCfgClient getRootConfiguration()
- {
- ManagementContext ctx = LDAPManagementContext.newManagementContext(getConnection(), LDAPProfile.getInstance());
- return ctx.getRootConfiguration();
- }
-
- /**
* Returns the ldap context (JNDI).
*
* @return the ldap context
@@ -130,18 +261,14 @@
return ldapContext;
}
- private SSLContext getSSLContext(TrustManager trustManager) throws NamingException
+ /**
+ * Returns the root configuration client by using the inrnal Connection.
+ *
+ * @return the root configuration client
+ */
+ public RootCfgClient getRootConfiguration()
{
- try
- {
- return new SSLContextBuilder()
- .setTrustManager(trustManager != null ? trustManager : new BlindTrustManager())
- .getSSLContext();
- }
- catch (GeneralSecurityException e)
- {
- throw new NamingException("Unable to perform SSL initialization:" + e.getMessage());
- }
+ return newManagementContext(getConnection(), LDAPProfile.getInstance()).getRootConfiguration();
}
@Override
diff --git a/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/PreferredConnection.java b/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/PreferredConnection.java
index 8eaf32a..08d4bf9 100644
--- a/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/PreferredConnection.java
+++ b/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/PreferredConnection.java
@@ -12,11 +12,11 @@
* information: "Portions Copyright [year] [name of copyright owner]".
*
* Copyright 2008-2009 Sun Microsystems, Inc.
- * Portions Copyright 2013-2015 ForgeRock AS.
+ * Portions Copyright 2013-2016 ForgeRock AS.
*/
package org.opends.admin.ads.util;
-import java.util.LinkedHashSet;
+import java.util.Collections;
import java.util.Set;
import javax.naming.ldap.InitialLdapContext;
@@ -71,13 +71,13 @@
return type;
}
- /** {@inheritDoc} */
+ @Override
public int hashCode()
{
return (type+ldapUrl.toLowerCase()).hashCode();
}
- /** {@inheritDoc} */
+ @Override
public boolean equals(Object o)
{
if (this == o)
@@ -93,15 +93,13 @@
return false;
}
-
/**
* Commodity method that returns a PreferredConnection object with the
* information on a given InitialLdapContext.
* @param ctx the connection we retrieve the information from.
* @return a preferred connection object.
*/
- public static PreferredConnection getPreferredConnection(
- InitialLdapContext ctx)
+ public static PreferredConnection getPreferredConnection(InitialLdapContext ctx)
{
String ldapUrl = ConnectionUtils.getLdapUrl(ctx);
PreferredConnection.Type type;
@@ -120,20 +118,14 @@
return new PreferredConnection(ldapUrl, type);
}
-
-
/**
* Commodity method that generates a list of preferred connection (of just
* one) with the information on a given InitialLdapContext.
* @param ctx the connection we retrieve the information from.
* @return a list containing the preferred connection object.
*/
- public static Set<PreferredConnection> getPreferredConnections(
- InitialLdapContext ctx)
+ public static Set<PreferredConnection> getPreferredConnections(InitialLdapContext ctx)
{
- PreferredConnection cnx = PreferredConnection.getPreferredConnection(ctx);
- Set<PreferredConnection> returnValue = new LinkedHashSet<>();
- returnValue.add(cnx);
- return returnValue;
+ return Collections.singleton(getPreferredConnection(ctx));
}
}
diff --git a/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ServerLoader.java b/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ServerLoader.java
index e8e17dc..30b5800 100644
--- a/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ServerLoader.java
+++ b/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ServerLoader.java
@@ -24,7 +24,6 @@
import javax.naming.NamingException;
import javax.naming.NoPermissionException;
import javax.naming.TimeLimitExceededException;
-import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapName;
import org.forgerock.i18n.LocalizableMessage;
@@ -38,8 +37,6 @@
import com.forgerock.opendj.cli.Utils;
-import static org.opends.server.util.StaticUtils.*;
-
/**
* Class used to load the configuration of a server. Basically the code
* uses some provided properties and authentication information to connect
@@ -151,11 +148,11 @@
public void run()
{
lastException = null;
- InitialLdapContext ctx = null;
- try
+ boolean connCreated = false;
+ try (ConnectionWrapper conn = createConnectionWrapper())
{
- ctx = createContext();
- serverDescriptor = ServerDescriptor.createStandalone(ctx, filter);
+ connCreated = true;
+ serverDescriptor = ServerDescriptor.createStandalone(conn.getLdapContext(), filter);
serverDescriptor.setAdsProperties(serverProperties);
serverDescriptor.updateAdsPropertiesWithServerProperties();
}
@@ -181,7 +178,7 @@
{
logger.warn(LocalizableMessage.raw(
"NamingException error reading server: " + getLastLdapUrl(), e));
- Type type = ctx != null
+ Type type = connCreated
? TopologyCacheException.Type.GENERIC_READING_SERVER
: TopologyCacheException.Type.GENERIC_CREATING_CONNECTION;
lastException = new TopologyCacheException(type, e, trustManager, getLastLdapUrl());
@@ -200,21 +197,18 @@
finally
{
isOver = true;
- close(ctx);
}
}
/**
- * Create an InitialLdapContext based in the provide server properties and
- * authentication data provided in the constructor.
- * @return an InitialLdapContext based in the provide server properties and
- * authentication data provided in the constructor.
- * @throws NamingException if an error occurred while creating the
- * InitialLdapContext.
+ * Returns a Connection Wrapper.
+ *
+ * @return the connection wrapper
+ * @throws NamingException
+ * If an error occurs.
*/
- public InitialLdapContext createContext() throws NamingException
+ public ConnectionWrapper createConnectionWrapper() throws NamingException
{
- InitialLdapContext ctx = null;
if (trustManager != null)
{
trustManager.resetLastRefusedItems();
@@ -226,42 +220,16 @@
/* Try to connect to the server in a certain order of preference. If an
* URL fails, we will try with the others.
*/
- LinkedHashSet<PreferredConnection> conns = getLDAPURLsByPreference();
-
- for (PreferredConnection connection : conns)
+ for (PreferredConnection connection : getLDAPURLsByPreference())
{
- if (ctx == null)
+ lastLdapUrl = connection.getLDAPURL();
+ ConnectionWrapper conn = new ConnectionWrapper(lastLdapUrl, connection.getType(), dn, pwd, timeout, trustManager);
+ if (conn.getLdapContext() != null)
{
- lastLdapUrl = connection.getLDAPURL();
- switch (connection.getType())
- {
- case LDAPS:
- ctx = ConnectionUtils.createLdapsContext(lastLdapUrl, dn, pwd,
- timeout, null, trustManager, null);
- break;
- case START_TLS:
- ctx = ConnectionUtils.createStartTLSContext(lastLdapUrl, dn, pwd,
- timeout, null, trustManager, null, null);
- break;
- default:
- ctx = ConnectionUtils.createLdapContext(lastLdapUrl, dn, pwd,
- timeout, null);
- }
+ return conn;
}
}
- return ctx;
- }
-
- /**
- * Returns a Connection Wrapper.
- *
- * @return the connection wrapper
- * @throws NamingException
- * If an error occurs.
- */
- public ConnectionWrapper createConnectionWrapper() throws NamingException
- {
- return new ConnectionWrapper(createContext(), timeout, trustManager);
+ return null;
}
/**
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java
index e7f7931..6363c8a 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java
@@ -17,6 +17,7 @@
package org.opends.guitools.controlpanel.datamodel;
import static org.opends.admin.ads.util.ConnectionUtils.*;
+import static org.opends.admin.ads.util.PreferredConnection.Type.*;
import static org.opends.guitools.controlpanel.util.Utilities.*;
import static org.opends.server.tools.ConfigureWindowsService.*;
import static com.forgerock.opendj.cli.Utils.*;
@@ -463,20 +464,16 @@
// Try with previous credentials.
try
{
- InitialLdapContext context = null;
if (isLocal)
{
- context = Utilities.getAdminDirContext(this, lastWorkingBindDN, lastWorkingBindPwd);
+ connWrapper = Utilities.getAdminDirContext(this, lastWorkingBindDN, lastWorkingBindPwd);
}
else if (lastRemoteAdministrationURL != null)
{
- context = createLdapsContext(lastRemoteAdministrationURL,
- lastWorkingBindDN,
- lastWorkingBindPwd,
- getConnectTimeout(), null,
- getTrustManager(), null);
+ connWrapper = new ConnectionWrapper(
+ lastRemoteAdministrationURL, LDAPS, lastWorkingBindDN, lastWorkingBindPwd,
+ getConnectTimeout(), getTrustManager());
}
- connWrapper = new ConnectionWrapper(context, getConnectTimeout(), getTrustManager());
}
catch (ConfigReadException | NamingException cre)
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java
index 26437ae..a300999 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java
@@ -44,6 +44,7 @@
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
+import org.forgerock.opendj.ldap.DN;
import org.opends.admin.ads.util.ApplicationTrustManager;
import org.opends.admin.ads.util.ConnectionUtils;
import org.opends.admin.ads.util.ConnectionWrapper;
@@ -62,14 +63,14 @@
import org.opends.quicksetup.util.UIKeyStore;
import org.opends.quicksetup.util.Utils;
import org.opends.server.monitors.VersionMonitorProvider;
-import org.forgerock.opendj.ldap.DN;
import org.opends.server.types.HostPort;
import org.opends.server.types.OpenDsException;
import org.opends.server.util.DynamicConstants;
import org.opends.server.util.StaticUtils;
import static com.forgerock.opendj.cli.Utils.*;
-import static org.opends.admin.ads.util.ConnectionUtils.*;
+
+import static org.opends.admin.ads.util.PreferredConnection.Type.*;
import static org.opends.guitools.controlpanel.util.Utilities.*;
import static org.opends.messages.AdminToolMessages.*;
import static org.opends.messages.QuickSetupMessages.*;
@@ -507,11 +508,10 @@
setEnabledOK(false);
displayMessage(INFO_CTRL_PANEL_VERIFYING_AUTHENTICATION_SUMMARY.get());
- BackgroundTask<InitialLdapContext> worker =
- new BackgroundTask<InitialLdapContext>()
+ BackgroundTask<ConnectionWrapper> worker = new BackgroundTask<ConnectionWrapper>()
{
@Override
- public InitialLdapContext processBackgroundTask() throws Throwable
+ public ConnectionWrapper processBackgroundTask() throws Throwable
{
final ControlPanelInfo info = getInfo();
info.stopPooling();
@@ -538,24 +538,21 @@
return null;
}
}
- InitialLdapContext ctx = null;
+ ConnectionWrapper conn = null;
try
{
if (isLocal)
{
usedUrl = info.getAdminConnectorURL();
- ctx = Utilities.getAdminDirContext(info, dn.getText(),
- String.valueOf(pwd.getPassword()));
+ conn = Utilities.getAdminDirContext(info, dn.getText(), String.valueOf(pwd.getPassword()));
}
else
{
- usedUrl = ConnectionUtils.getLDAPUrl(hostName.getText().trim(),
- Integer.valueOf(port.getText().trim()), true);
- ctx = createLdapsContext(usedUrl, dn.getText(),
- String.valueOf(pwd.getPassword()),
- info.getConnectTimeout(), null,
- info.getTrustManager(), null);
- checkVersion(ctx);
+ HostPort hostPort = new HostPort(hostName.getText().trim(), Integer.valueOf(port.getText().trim()));
+ usedUrl = ConnectionUtils.getLDAPUrl(hostPort, true);
+ conn = new ConnectionWrapper(hostPort, LDAPS, dn.getText(), String.valueOf(pwd.getPassword()),
+ info.getConnectTimeout(), info.getTrustManager());
+ checkVersion(conn.getLdapContext());
}
StaticUtils.sleep(500);
@@ -569,20 +566,19 @@
});
closeInfoConnections();
info.setIsLocal(isLocal);
- info.setConnection(
- new ConnectionWrapper(ctx, info.getConnectTimeout(), info.getTrustManager()));
+ info.setConnection(conn);
info.setUserDataDirContext(null);
info.regenerateDescriptor();
- return ctx;
+ return conn;
} catch (Throwable t)
{
- StaticUtils.close(ctx);
+ StaticUtils.close(conn);
throw t;
}
}
@Override
- public void backgroundTaskCompleted(InitialLdapContext ctx, Throwable throwable)
+ public void backgroundTaskCompleted(ConnectionWrapper conn, Throwable throwable)
{
boolean handleCertificateException = false;
boolean localServerErrorConnecting = false;
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LoginPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LoginPanel.java
index c8dfdf0..c914881 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LoginPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LoginPanel.java
@@ -14,7 +14,6 @@
* Copyright 2008-2009 Sun Microsystems, Inc.
* Portions Copyright 2011-2016 ForgeRock AS.
*/
-
package org.opends.guitools.controlpanel.ui;
import java.awt.Component;
@@ -25,7 +24,6 @@
import java.util.LinkedHashSet;
import javax.naming.NamingException;
-import javax.naming.ldap.InitialLdapContext;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
@@ -33,6 +31,7 @@
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
+import org.forgerock.opendj.ldap.DN;
import org.opends.admin.ads.util.ApplicationTrustManager;
import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.guitools.controlpanel.datamodel.ConfigReadException;
@@ -43,10 +42,10 @@
import org.opends.quicksetup.ui.CertificateDialog;
import org.opends.quicksetup.util.UIKeyStore;
import org.opends.quicksetup.util.Utils;
-import org.forgerock.opendj.ldap.DN;
import org.opends.server.util.StaticUtils;
import static com.forgerock.opendj.cli.Utils.*;
+
import static org.opends.messages.AdminToolMessages.*;
import static org.opends.messages.QuickSetupMessages.*;
@@ -190,19 +189,16 @@
setEnabledCancel(false);
displayMessage(INFO_CTRL_PANEL_VERIFYING_AUTHENTICATION_SUMMARY.get());
- BackgroundTask<InitialLdapContext> worker =
- new BackgroundTask<InitialLdapContext>()
+ BackgroundTask<ConnectionWrapper> worker = new BackgroundTask<ConnectionWrapper>()
{
- /** {@inheritDoc} */
@Override
- public InitialLdapContext processBackgroundTask() throws Throwable
+ public ConnectionWrapper processBackgroundTask() throws Throwable
{
- InitialLdapContext ctx = null;
+ ConnectionWrapper conn = null;
try
{
usedUrl = getInfo().getAdminConnectorURL();
- ctx = Utilities.getAdminDirContext(getInfo(), dn.getText(),
- String.valueOf(pwd.getPassword()));
+ conn = Utilities.getAdminDirContext(getInfo(), dn.getText(), String.valueOf(pwd.getPassword()));
if (getInfo().getConnection() != null)
{
@@ -240,22 +236,19 @@
INFO_CTRL_PANEL_READING_CONFIGURATION_SUMMARY.get());
}
});
- getInfo().setConnection(
- new ConnectionWrapper(ctx, getInfo().getConnectTimeout(), getInfo().getTrustManager()));
+ getInfo().setConnection(conn);
getInfo().setUserDataDirContext(null);
getInfo().regenerateDescriptor();
- return ctx;
+ return conn;
} catch (Throwable t)
{
- StaticUtils.close(ctx);
+ StaticUtils.close(conn);
throw t;
}
}
- /** {@inheritDoc} */
@Override
- public void backgroundTaskCompleted(InitialLdapContext ctx,
- Throwable throwable)
+ public void backgroundTaskCompleted(ConnectionWrapper conn, Throwable throwable)
{
boolean handleCertificateException = false;
if (throwable != null)
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java
index acae79b..3c52167 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java
@@ -20,6 +20,7 @@
import static com.forgerock.opendj.util.OperatingSystem.*;
import static org.opends.admin.ads.util.ConnectionUtils.*;
+import static org.opends.admin.ads.util.PreferredConnection.Type.*;
import static org.opends.messages.AdminToolMessages.*;
import static org.opends.quicksetup.Installation.*;
@@ -95,6 +96,7 @@
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.opendj.ldap.schema.MatchingRule;
import org.forgerock.opendj.ldap.schema.Syntax;
+import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.guitools.controlpanel.ControlPanel;
import org.opends.guitools.controlpanel.browser.IconPool;
import org.opends.guitools.controlpanel.datamodel.CategorizedComboBoxElement;
@@ -2173,9 +2175,8 @@
* or the provided credentials do not have enough rights.
* @throws ConfigReadException if there is an error reading the configuration.
*/
- public static InitialLdapContext getAdminDirContext(
- ControlPanelInfo controlInfo, String bindDN, String pwd)
- throws NamingException, ConfigReadException
+ public static ConnectionWrapper getAdminDirContext(ControlPanelInfo controlInfo, String bindDN, String pwd)
+ throws NamingException, ConfigReadException
{
String usedUrl = controlInfo.getAdminConnectorURL();
if (usedUrl == null)
@@ -2184,12 +2185,11 @@
ERR_COULD_NOT_FIND_VALID_LDAPURL.get());
}
- InitialLdapContext ctx = createLdapsContext(usedUrl,
- bindDN, pwd, controlInfo.getConnectTimeout(), null,
- controlInfo.getTrustManager(), null);
// Search for the config to check that it is the directory manager.
- checkCanReadConfig(ctx);
- return ctx;
+ ConnectionWrapper conn = new ConnectionWrapper(
+ usedUrl, LDAPS, bindDN, pwd, controlInfo.getConnectTimeout(), controlInfo.getTrustManager());
+ checkCanReadConfig(conn.getLdapContext());
+ return conn;
}
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/UninstallCliHelper.java b/opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/UninstallCliHelper.java
index 01d71ba..6e020fd 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/UninstallCliHelper.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/UninstallCliHelper.java
@@ -18,8 +18,10 @@
import static org.forgerock.util.Utils.*;
import static org.opends.admin.ads.util.ConnectionUtils.*;
+import static org.opends.admin.ads.util.PreferredConnection.Type.*;
import static org.opends.messages.AdminToolMessages.*;
import static org.opends.messages.QuickSetupMessages.*;
+
import static com.forgerock.opendj.cli.ArgumentConstants.*;
import static com.forgerock.opendj.cli.Utils.*;
@@ -48,6 +50,7 @@
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.datamodel.ConnectionProtocolPolicy;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
import org.opends.quicksetup.Application;
@@ -64,6 +67,7 @@
import org.opends.quicksetup.util.ServerController;
import org.opends.quicksetup.util.Utils;
import org.opends.server.admin.client.cli.SecureConnectionCliArgs;
+import org.opends.server.types.HostPort;
import org.opends.server.util.StaticUtils;
import org.opends.server.util.cli.LDAPConnectionConsoleInteraction;
@@ -94,8 +98,7 @@
private ControlPanelInfo info;
private boolean forceNonInteractive;
- private boolean useSSL = true;
- private boolean useStartTLS;
+ private Type connectionType = LDAPS;
/** Default constructor. */
public UninstallCliHelper()
@@ -120,9 +123,8 @@
* If there is an error processing data in non-interactive mode and
* an error must be thrown (not in force on error mode).
*/
- public UninstallUserData createUserData(UninstallerArgumentParser args,
- String[] rawArguments)
- throws UserDataException, ClientException
+ public UninstallUserData createUserData(UninstallerArgumentParser args, String[] rawArguments)
+ throws UserDataException, ClientException
{
parser = args;
UninstallUserData userData = new UninstallUserData();
@@ -1134,7 +1136,7 @@
logger.info(LocalizableMessage.raw("Updating user data with remote servers."));
- InitialLdapContext ctx = null;
+ ConnectionWrapper conn = null;
try
{
info.setTrustManager(userData.getTrustManager());
@@ -1157,11 +1159,10 @@
{
logger.error(LocalizableMessage.raw("Error parsing url: "+adminConnectorUrl));
}
- ctx = createAdministrativeContext(host, port, useSSL, useStartTLS, dn,
- pwd, getConnectTimeout(), userData.getTrustManager());
- ConnectionWrapper connWrapper = new ConnectionWrapper(ctx, getConnectTimeout(), userData.getTrustManager());
+ conn = new ConnectionWrapper(new HostPort(host, port), connectionType, dn, pwd,
+ getConnectTimeout(), userData.getTrustManager());
- ADSContext adsContext = new ADSContext(connWrapper);
+ ADSContext adsContext = new ADSContext(conn);
if (interactive && userData.getTrustManager() == null)
{
// This is required when the user did connect to the server using SSL
@@ -1208,7 +1209,7 @@
}
finally
{
- StaticUtils.close(ctx);
+ StaticUtils.close(conn);
}
if (exceptionOccurred)
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/ui/LoginDialog.java b/opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/ui/LoginDialog.java
index d94336f..4e095b3 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/ui/LoginDialog.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/ui/LoginDialog.java
@@ -27,7 +27,6 @@
import java.util.ArrayList;
import javax.naming.NamingException;
-import javax.naming.ldap.InitialLdapContext;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JDialog;
@@ -74,7 +73,7 @@
{
private static final long serialVersionUID = 9049409381101152000L;
- private JFrame parent;
+ private final JFrame parent;
private JLabel lHostName;
private JLabel lUid;
@@ -89,10 +88,8 @@
private boolean isCanceled = true;
- private ApplicationTrustManager trustManager;
- private int timeout;
-
- private InitialLdapContext ctx;
+ private final ApplicationTrustManager trustManager;
+ private final int timeout;
private ConnectionWrapper connWrapper;
@@ -191,15 +188,6 @@
/**
* Returns the connection we got with the provided authentication.
- * @return the connection we got with the provided authentication.
- */
- public InitialLdapContext getContext()
- {
- return ctx;
- }
-
- /**
- * Returns the connection we got with the provided authentication.
*
* @return the connection
*/
@@ -378,20 +366,15 @@
dispose();
}
- /**
- * Method called when user clicks on OK.
- *
- */
+ /** Method called when user clicks on OK. */
private void okClicked()
{
BackgroundTask<Boolean> worker = new BackgroundTask<Boolean>()
{
@Override
- public Boolean processBackgroundTask() throws NamingException,
- ApplicationException
+ public Boolean processBackgroundTask() throws NamingException, ApplicationException
{
- Boolean isServerRunning = Boolean.TRUE;
- ctx = null;
+ connWrapper = null;
try
{
ControlPanelInfo info = ControlPanelInfo.getInstance();
@@ -409,16 +392,15 @@
throw new ApplicationException(ReturnCode.APPLICATION_ERROR,
ERR_COULD_NOT_FIND_VALID_LDAPURL.get(), null);
}
- ctx = org.opends.guitools.controlpanel.util.Utilities.getAdminDirContext(info, dn, pwd);
- connWrapper = new ConnectionWrapper(ctx, info.getConnectTimeout(), info.getTrustManager());
-
+ connWrapper = org.opends.guitools.controlpanel.util.Utilities.getAdminDirContext(info, dn, pwd);
+ return true; // server is running
} catch (NamingException ne)
{
if (isServerRunning())
{
throw ne;
}
- isServerRunning = Boolean.FALSE;
+ return false;
} catch (ApplicationException | IllegalStateException e)
{
throw e;
@@ -426,7 +408,6 @@
{
throw new IllegalStateException("Unexpected throwable.", t);
}
- return isServerRunning;
}
@Override
diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java
index defe7f9..28f205b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java
@@ -17,17 +17,20 @@
package org.opends.quicksetup.installer;
import static com.forgerock.opendj.util.OperatingSystem.isWindows;
+import static com.forgerock.opendj.cli.ArgumentConstants.*;
+import static com.forgerock.opendj.cli.Utils.*;
+
import static org.forgerock.util.Utils.*;
import static org.opends.admin.ads.ServerDescriptor.*;
import static org.opends.admin.ads.ServerDescriptor.ServerProperty.*;
import static org.opends.admin.ads.util.ConnectionUtils.*;
+import static org.opends.admin.ads.util.PreferredConnection.*;
+import static org.opends.admin.ads.util.PreferredConnection.Type.*;
import static org.opends.messages.QuickSetupMessages.*;
import static org.opends.quicksetup.Step.*;
import static org.opends.quicksetup.installer.DataReplicationOptions.Type.*;
import static org.opends.quicksetup.installer.InstallProgressStep.*;
import static org.opends.quicksetup.util.Utils.*;
-import static com.forgerock.opendj.cli.ArgumentConstants.*;
-import static com.forgerock.opendj.cli.Utils.*;
import java.awt.event.WindowEvent;
import java.io.BufferedWriter;
@@ -128,9 +131,9 @@
import org.opends.server.util.CertificateManager;
import org.opends.server.util.CollectionUtils;
import org.opends.server.util.DynamicConstants;
+import org.opends.server.util.Platform.KeyType;
import org.opends.server.util.SetupUtils;
import org.opends.server.util.StaticUtils;
-import org.opends.server.util.Platform.KeyType;
import com.forgerock.opendj.util.OperatingSystem;
@@ -2828,18 +2831,16 @@
String dn = auth.getDn();
String pwd = auth.getPwd();
- InitialLdapContext context;
if (auth.useSecureConnection())
{
ApplicationTrustManager trustManager = getTrustManager();
trustManager.setHost(auth.getHostPort().getHost());
- context = createLdapsContext(ldapUrl, dn, pwd, getConnectTimeout(), null, trustManager, null);
+ return new ConnectionWrapper(ldapUrl, LDAPS, dn, pwd, getConnectTimeout(), getTrustManager());
}
else
{
- context = createLdapContext(ldapUrl, dn, pwd, getConnectTimeout(), null);
+ return new ConnectionWrapper(ldapUrl, LDAP, dn, pwd, getConnectTimeout(), getTrustManager());
}
- return new ConnectionWrapper(context, getConnectTimeout(), getTrustManager());
}
/**
@@ -3470,8 +3471,7 @@
throws UserDataException
{
host = getHostNameForLdapUrl(host);
- String ldapUrl = "ldaps://" + host + ":" + port;
- InitialLdapContext ctx = null;
+ HostPort hostPort = new HostPort(host, port);
ConnectionWrapper conn = null;
ApplicationTrustManager trustManager = getTrustManager();
@@ -3482,7 +3482,7 @@
effectiveDn[0] = dn;
try
{
- ctx = createLdapsContext(ldapUrl, dn, pwd, getConnectTimeout(), null, trustManager, null);
+ conn = new ConnectionWrapper(hostPort, LDAPS, dn, pwd, getConnectTimeout(), trustManager);
}
catch (Throwable t)
{
@@ -3491,14 +3491,13 @@
// Try using a global administrator
dn = ADSContext.getAdministratorDN(dn);
effectiveDn[0] = dn;
- ctx = createLdapsContext(ldapUrl, dn, pwd, getConnectTimeout(), null, trustManager, null);
+ conn = new ConnectionWrapper(hostPort, LDAPS, dn, pwd, getConnectTimeout(), trustManager);
}
else
{
throw t;
}
}
- conn = new ConnectionWrapper(ctx, getConnectTimeout(), trustManager);
ADSContext adsContext = new ADSContext(conn);
if (adsContext.hasAdminData())
{
@@ -3573,7 +3572,7 @@
}
else
{
- updateUserDataWithSuffixesInServer(ctx);
+ updateUserDataWithSuffixesInServer(conn.getLdapContext());
}
}
catch (UserDataException ude)
@@ -3637,7 +3636,6 @@
}
finally
{
- StaticUtils.close(ctx);
StaticUtils.close(conn);
}
}
@@ -4009,11 +4007,8 @@
type = SuffixesToReplicateOptions.Type.NEW_SUFFIX_IN_TOPOLOGY;
}
lastLoadedCache = new TopologyCache(adsContext, trustManager, getConnectTimeout());
- LinkedHashSet<PreferredConnection> cnx = new LinkedHashSet<>();
- cnx.add(PreferredConnection.getPreferredConnection(adsContext.getDirContext()));
- // We cannot use getPreferredConnections since the user data has not been
- // updated yet.
- lastLoadedCache.setPreferredConnections(cnx);
+ // We cannot use getPreferredConnections since the user data has not been updated yet.
+ lastLoadedCache.setPreferredConnections(Collections.singleton(getPreferredConnection(adsContext.getDirContext())));
lastLoadedCache.reloadTopology();
Set<SuffixDescriptor> suffixes = lastLoadedCache.getSuffixes();
Set<SuffixDescriptor> moreSuffixes = null;
@@ -4186,12 +4181,11 @@
private ConnectionWrapper createLocalConnection() throws NamingException
{
- String ldapUrl =
- "ldaps://" + getHostNameForLdapUrl(getUserData().getHostName()) + ":" + getUserData().getAdminConnectorPort();
- String dn = getUserData().getDirectoryManagerDn();
- String pwd = getUserData().getDirectoryManagerPwd();
- InitialLdapContext context = createLdapsContext(ldapUrl, dn, pwd, getConnectTimeout(), null, null, null);
- return new ConnectionWrapper(context, getConnectTimeout(), null);
+ UserData uData = getUserData();
+ HostPort hostPort = new HostPort(uData.getHostName(), uData.getAdminConnectorPort());
+ String dn = uData.getDirectoryManagerDn();
+ String pwd = uData.getDirectoryManagerPwd();
+ return new ConnectionWrapper(hostPort, LDAPS, dn, pwd, getConnectTimeout(), null);
}
/**
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java
index 4e2e960..db6c9cd 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java
@@ -17,6 +17,25 @@
*/
package org.opends.server.tools.dsreplication;
+import static com.forgerock.opendj.cli.ArgumentConstants.*;
+import static com.forgerock.opendj.cli.CommonArguments.*;
+import static com.forgerock.opendj.cli.Utils.*;
+import static com.forgerock.opendj.util.OperatingSystem.*;
+import static java.util.Collections.*;
+
+import static org.forgerock.util.Utils.*;
+import static org.opends.admin.ads.ServerDescriptor.*;
+import static org.opends.admin.ads.util.ConnectionUtils.*;
+import static org.opends.admin.ads.util.PreferredConnection.*;
+import static org.opends.admin.ads.util.PreferredConnection.Type.*;
+import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.messages.QuickSetupMessages.*;
+import static org.opends.messages.ToolMessages.*;
+import static org.opends.quicksetup.util.Utils.*;
+import static org.opends.server.tools.dsreplication.ReplicationCliArgumentParser.*;
+import static org.opends.server.tools.dsreplication.ReplicationCliReturnCode.*;
+import static org.opends.server.util.StaticUtils.*;
+
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
@@ -93,6 +112,7 @@
import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.admin.ads.util.OpendsCertificateException;
import org.opends.admin.ads.util.PreferredConnection;
+import org.opends.admin.ads.util.PreferredConnection.Type;
import org.opends.admin.ads.util.ServerLoader;
import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
import org.opends.guitools.controlpanel.datamodel.BaseDNDescriptor;
@@ -148,24 +168,6 @@
import com.forgerock.opendj.cli.TextTablePrinter;
import com.forgerock.opendj.cli.ValidationCallback;
-import static com.forgerock.opendj.cli.ArgumentConstants.*;
-import static com.forgerock.opendj.cli.CommonArguments.*;
-import static com.forgerock.opendj.cli.Utils.*;
-import static com.forgerock.opendj.util.OperatingSystem.*;
-import static java.util.Collections.*;
-
-import static org.forgerock.util.Utils.*;
-import static org.opends.admin.ads.ServerDescriptor.*;
-import static org.opends.admin.ads.util.ConnectionUtils.*;
-import static org.opends.admin.ads.util.PreferredConnection.*;
-import static org.opends.messages.AdminToolMessages.*;
-import static org.opends.messages.QuickSetupMessages.*;
-import static org.opends.messages.ToolMessages.*;
-import static org.opends.quicksetup.util.Utils.*;
-import static org.opends.server.tools.dsreplication.ReplicationCliArgumentParser.*;
-import static org.opends.server.tools.dsreplication.ReplicationCliReturnCode.*;
-import static org.opends.server.util.StaticUtils.*;
-
/**
* This class provides a tool that can be used to enable and disable replication
* and also to initialize the contents of a replicated suffix with the contents
@@ -196,8 +198,7 @@
private boolean forceNonInteractive;
/** Always use SSL with the administration connector. */
- private final boolean useSSL = true;
- private final boolean useStartTLS = false;
+ private final Type connectiontype = LDAPS;
/**
* The enumeration containing the different options we display when we ask
@@ -1074,7 +1075,7 @@
* @throws NamingException
* if there was an error establishing the connection.
*/
- private InitialLdapContext createAdministrativeContext(HostPort hostPort,
+ private static InitialLdapContext createAdministrativeContext(HostPort hostPort,
boolean useSSL, boolean useStartTLS, String bindDn, String pwd,
int connectTimeout, ApplicationTrustManager trustManager)
throws NamingException
@@ -1100,24 +1101,6 @@
return ctx;
}
- /**
- * Creates an Initial LDAP Context interacting with the user if the
- * application is interactive.
- *
- * @param ci
- * the LDAPConnectionConsoleInteraction object that is assumed to
- * have been already run.
- * @return the initial LDAP context or <CODE>null</CODE> if the user did not
- * accept to trust the certificates.
- * @throws ClientException
- * if there was an error establishing the connection.
- */
- private InitialLdapContext createInitialLdapContextInteracting(LDAPConnectionConsoleInteraction ci)
- throws ClientException
- {
- return createInitialLdapContextInteracting(ci, isInteractive() && ci.isTrustStoreInMemory());
- }
-
private ConnectionWrapper createConnectionInteracting(LDAPConnectionConsoleInteraction ci)
throws ClientException
{
@@ -1137,22 +1120,6 @@
return null;
}
- private ConnectionWrapper createConnectionInteracting(LDAPConnectionConsoleInteraction ci,
- boolean promptForCertificate) throws ClientException
- {
- try
- {
- InitialLdapContext ctx= createInitialLdapContextInteracting(ci, promptForCertificate);
- return new ConnectionWrapper(ctx, CliConstants.DEFAULT_LDAP_CONNECT_TIMEOUT, ci.getTrustManager());
- }
- catch (NamingException e)
- {
- String hostName = getHostNameForLdapUrl(ci.getHostName());
- Integer portNumber = ci.getPortNumber();
- throw new ClientException(ReturnCode.CLIENT_SIDE_CONNECT_ERROR, ERR_FAILED_TO_CONNECT.get(hostName, portNumber));
- }
- }
-
/**
* Creates an Initial LDAP Context interacting with the user if the
* application is interactive.
@@ -1167,30 +1134,28 @@
* @throws ClientException
* if there was an error establishing the connection.
*/
- private InitialLdapContext createInitialLdapContextInteracting(LDAPConnectionConsoleInteraction ci,
+ private ConnectionWrapper createConnectionInteracting(LDAPConnectionConsoleInteraction ci,
boolean promptForCertificate) throws ClientException
{
// Interact with the user though the console to get
// LDAP connection information
String hostName = getHostNameForLdapUrl(ci.getHostName());
- Integer portNumber = ci.getPortNumber();
+ int portNumber = ci.getPortNumber();
+ HostPort hostPort = new HostPort(hostName, portNumber);
String bindDN = ci.getBindDN();
String bindPassword = ci.getBindPassword();
TrustManager trustManager = ci.getTrustManager();
KeyManager keyManager = ci.getKeyManager();
- InitialLdapContext ctx;
-
+ ConnectionWrapper conn;
if (ci.useSSL())
{
- String ldapsUrl = "ldaps://" + hostName + ":" + portNumber;
while (true)
{
try
{
- ctx = createLdapsContext(ldapsUrl, bindDN, bindPassword, ci.getConnectTimeout(),
- null, trustManager, keyManager);
- ctx.reconnect(null);
+ conn = new ConnectionWrapper(
+ hostPort, LDAPS, bindDN, bindPassword, ci.getConnectTimeout(), trustManager, keyManager);
break;
}
catch (NamingException e)
@@ -1200,13 +1165,7 @@
OpendsCertificateException oce = getCertificateRootException(e);
if (oce != null)
{
- String authType = null;
- if (trustManager instanceof ApplicationTrustManager)
- {
- ApplicationTrustManager appTrustManager =
- (ApplicationTrustManager) trustManager;
- authType = appTrustManager.getLastRefusedAuthType();
- }
+ String authType = getAuthType(trustManager);
if (ci.checkServerCertificate(oce.getChain(), authType, hostName))
{
// If the certificate is trusted, update the trust manager.
@@ -1241,7 +1200,6 @@
ReturnCode.CLIENT_SIDE_CONNECT_ERROR, message);
}
}
- HostPort hostPort = new HostPort(hostName, portNumber);
LocalizableMessage message = getMessageForException(e, hostPort.toString());
throw new ClientException(ReturnCode.CLIENT_SIDE_CONNECT_ERROR, message);
}
@@ -1249,89 +1207,79 @@
}
else if (ci.useStartTLS())
{
- String ldapUrl = "ldap://" + hostName + ":" + portNumber;
while (true)
{
try
{
- ctx = createStartTLSContext(ldapUrl, bindDN,
- bindPassword, CliConstants.DEFAULT_LDAP_CONNECT_TIMEOUT, null,
- trustManager, keyManager, null);
- ctx.reconnect(null);
- break;
+ conn = new ConnectionWrapper(
+ hostPort, START_TLS, bindDN, bindPassword,
+ CliConstants.DEFAULT_LDAP_CONNECT_TIMEOUT, trustManager, keyManager);
+ return conn;
}
catch (NamingException e)
{
- if (promptForCertificate)
+ if (!promptForCertificate)
{
- OpendsCertificateException oce = getCertificateRootException(e);
- if (oce != null)
- {
- String authType = null;
- if (trustManager instanceof ApplicationTrustManager)
- {
- ApplicationTrustManager appTrustManager =
- (ApplicationTrustManager) trustManager;
- authType = appTrustManager.getLastRefusedAuthType();
- }
-
- if (ci.checkServerCertificate(oce.getChain(), authType, hostName))
- {
- // If the certificate is trusted, update the trust manager.
- trustManager = ci.getTrustManager();
-
- // Try to connect again.
- continue;
- }
- else
- {
- // Assume user cancelled.
- return null;
- }
- }
- else
- {
- LocalizableMessage message =
- ERR_FAILED_TO_CONNECT.get(hostName, portNumber);
- throw new ClientException(
- ReturnCode.CLIENT_SIDE_CONNECT_ERROR, message);
- }
+ throw failedToConnect(hostName, portNumber);
}
- LocalizableMessage message =
- ERR_FAILED_TO_CONNECT.get(hostName, portNumber);
- throw new ClientException(ReturnCode.CLIENT_SIDE_CONNECT_ERROR,
- message);
+ OpendsCertificateException oce = getCertificateRootException(e);
+ if (oce == null)
+ {
+ throw failedToConnect(hostName, portNumber);
+ }
+ String authType = getAuthType(trustManager);
+ if (ci.checkServerCertificate(oce.getChain(), authType, hostName))
+ {
+ // If the certificate is trusted, update the trust manager.
+ trustManager = ci.getTrustManager();
+
+ // Try to connect again.
+ continue;
+ }
+ else
+ {
+ // Assume user cancelled.
+ return null;
+ }
}
}
}
else
{
- String ldapUrl = "ldap://" + hostName + ":" + portNumber;
while (true)
{
try
{
- ctx = createLdapContext(ldapUrl, bindDN, bindPassword,
- CliConstants.DEFAULT_LDAP_CONNECT_TIMEOUT, null);
- ctx.reconnect(null);
- break;
+ conn = new ConnectionWrapper(
+ hostPort, LDAP, bindDN, bindPassword, CliConstants.DEFAULT_LDAP_CONNECT_TIMEOUT, null);
+ return conn;
}
catch (NamingException e)
{
- LocalizableMessage message =
- ERR_FAILED_TO_CONNECT.get(hostName, portNumber);
- throw new ClientException(ReturnCode.CLIENT_SIDE_CONNECT_ERROR,
- message);
+ throw failedToConnect(hostName, portNumber);
}
}
}
- return ctx;
+ return conn;
+ }
+
+ private String getAuthType(TrustManager trustManager)
+ {
+ if (trustManager instanceof ApplicationTrustManager)
+ {
+ return ((ApplicationTrustManager) trustManager).getLastRefusedAuthType();
+ }
+ return null;
+ }
+
+ private ClientException failedToConnect(String hostName, Integer portNumber)
+ {
+ return new ClientException(ReturnCode.CLIENT_SIDE_CONNECT_ERROR, ERR_FAILED_TO_CONNECT.get(hostName, portNumber));
}
private ReplicationCliReturnCode purgeHistoricalRemotely(
PurgeHistoricalUserData uData)
{
- // Connect to the provided server
InitialLdapContext ctx = createAdministrativeContext(uData);
if (ctx == null)
{
@@ -1598,14 +1546,13 @@
{
try
{
- InitialLdapContext ctx = createAdministrativeContext(uData, bindDn);
- if (ctx != null)
- {
- return new ConnectionWrapper(ctx, getConnectTimeout(), getTrustManager(sourceServerCI));
- }
+ return new ConnectionWrapper(uData.getHostPort(), connectiontype, bindDn, uData.getAdminPwd(),
+ getConnectTimeout(), getTrustManager(sourceServerCI));
}
catch (NamingException e)
{
+ errPrintln();
+ errPrintln(getMessageForException(e, uData.getHostPort().toString()));
logger.error(LocalizableMessage.raw("Error when creating connection for:" + uData.getHostPort()));
}
return null;
@@ -1615,8 +1562,10 @@
{
try
{
- return createAdministrativeContext(uData.getHostPort(), useSSL, useStartTLS, bindDn,
- uData.getAdminPwd(), getConnectTimeout(), getTrustManager(sourceServerCI));
+ boolean useStartTLS = START_TLS.equals(connectiontype);
+ boolean useSSL = LDAPS.equals(connectiontype);
+ return createAdministrativeContext(uData.getHostPort(), useSSL, useStartTLS,
+ bindDn, uData.getAdminPwd(), getConnectTimeout(), getTrustManager(sourceServerCI));
}
catch (NamingException ne)
{
@@ -2076,20 +2025,6 @@
private ConnectionWrapper getConnection(PurgeHistoricalUserData uData)
{
- try
- {
- InitialLdapContext ctx = getInitialLdapContext(uData);
- return new ConnectionWrapper(ctx, sourceServerCI.getConnectTimeout(), sourceServerCI.getTrustManager());
- }
- catch (NamingException ce)
- {
- logger.warn(LocalizableMessage.raw("An error occured " + ce));
- return null;
- }
- }
-
- private InitialLdapContext getInitialLdapContext(PurgeHistoricalUserData uData)
- {
boolean firstTry = true;
Boolean serverRunning = null;
@@ -2128,15 +2063,15 @@
{
sourceServerCI.run();
- InitialLdapContext ctx = createInitialLdapContextInteracting(sourceServerCI);
- if (ctx != null)
+ ConnectionWrapper conn = createConnectionInteracting(sourceServerCI);
+ if (conn != null)
{
uData.setOnline(true);
uData.setHostPort(new HostPort(sourceServerCI.getHostName(), sourceServerCI.getPortNumber()));
uData.setAdminUid(sourceServerCI.getAdministratorUID());
uData.setAdminPwd(sourceServerCI.getBindPassword());
}
- return ctx;
+ return conn;
}
catch (ClientException ce)
{
@@ -2999,17 +2934,15 @@
*/
private boolean promptIfRequired(InitializeAllReplicationUserData uData)
{
- InitialLdapContext ctx = null;
- try
+ try (ConnectionWrapper conn = getConnection(uData))
{
- ctx = getInitialLdapContext(uData);
- if (ctx == null)
+ if (conn == null)
{
return false;
}
List<String> suffixes = argParser.getBaseDNs();
- checkSuffixesForInitializeReplication(suffixes, ctx, true);
+ checkSuffixesForInitializeReplication(suffixes, conn.getLdapContext(), true);
if (suffixes.isEmpty())
{
return false;
@@ -3018,17 +2951,13 @@
// Ask for confirmation to initialize.
println();
- if (!askConfirmation(getPrompt(uData, ctx), true))
+ if (!askConfirmation(getPrompt(uData, conn.getLdapContext()), true))
{
return false;
}
println();
return true;
}
- finally
- {
- close(ctx);
- }
}
private LocalizableMessage getPrompt(InitializeAllReplicationUserData uData, InitialLdapContext ctx)
@@ -3086,20 +3015,6 @@
private ConnectionWrapper getConnection(MonoServerReplicationUserData uData)
{
- try
- {
- InitialLdapContext ctx = getInitialLdapContext(uData);
- return new ConnectionWrapper(ctx, sourceServerCI.getConnectTimeout(), getTrustManager(sourceServerCI));
- }
- catch (NamingException ce)
- {
- logger.warn(LocalizableMessage.raw("An error occured " + ce));
- return null;
- }
- }
-
- private InitialLdapContext getInitialLdapContext(MonoServerReplicationUserData uData)
- {
// Try to connect to the server.
while (true)
{
@@ -3111,8 +3026,8 @@
}
sourceServerCI.run();
- InitialLdapContext ctx = createInitialLdapContextInteracting(sourceServerCI);
- if (ctx != null)
+ ConnectionWrapper conn = createConnectionInteracting(sourceServerCI);
+ if (conn != null)
{
uData.setHostPort(new HostPort(sourceServerCI.getHostName(), sourceServerCI.getPortNumber()));
uData.setAdminUid(sourceServerCI.getAdministratorUID());
@@ -3122,7 +3037,7 @@
((StatusReplicationUserData) uData).setScriptFriendly(argParser.isScriptFriendly());
}
}
- return ctx;
+ return conn;
}
catch (ClientException ce)
{
@@ -3429,7 +3344,8 @@
try
{
InitialLdapContext ctx = createAdministrativeContext(server.getHostPort(),
- useSSL, useStartTLS, adminDN, adminPwd, getConnectTimeout(), getTrustManager(sourceServerCI));
+ LDAPS.equals(connectiontype), START_TLS.equals(connectiontype), adminDN, adminPwd,
+ getConnectTimeout(), getTrustManager(sourceServerCI));
server.setBindDn(adminDN);
server.setPwd(adminPwd);
ctx.close();
@@ -3605,6 +3521,19 @@
HostPort hostPort = getHostPort(ctx1);
boolean isSSL = isSSL(ctx1);
boolean isStartTLS = isStartTLS(ctx1);
+ Type connectionType;
+ if (isSSL)
+ {
+ connectionType = LDAPS;
+ }
+ else if (isStartTLS)
+ {
+ connectionType = START_TLS;
+ }
+ else
+ {
+ connectionType = LDAP;
+ }
if (getTrustManager(ci) == null)
{
// This is required when the user did connect to the server using SSL or
@@ -3694,17 +3623,15 @@
close(ctx1);
try
{
- final InitialLdapContext ctx2 = createAdministrativeContext(hostPort, isSSL, isStartTLS,
- getAdministratorDN(adminUid), adminPwd, getConnectTimeout(), getTrustManager(ci));
- final ConnectionWrapper connWrapper2 =
- new ConnectionWrapper(ctx2, getConnectTimeout(), getTrustManager(ci));
+ final ConnectionWrapper connWrapper2 = new ConnectionWrapper(
+ hostPort, connectionType, getAdministratorDN(adminUid), adminPwd,
+ getConnectTimeout(), getTrustManager(ci));
connWrapper.set(connWrapper2);
adsContext = new ADSContext(connWrapper2);
- cache = new TopologyCache(adsContext, getTrustManager(ci),
- getConnectTimeout());
+ cache = new TopologyCache(adsContext, getTrustManager(ci), getConnectTimeout());
cache.getFilter().setSearchMonitoringInformation(false);
cache.getFilter().setSearchBaseDNInformation(false);
- cache.setPreferredConnections(getPreferredConnections(ctx2));
+ cache.setPreferredConnections(getPreferredConnections(connWrapper2.getLdapContext()));
connected = true;
}
catch (Throwable t)
@@ -4178,36 +4105,17 @@
{
try
{
- InitialLdapContext ctx = createAdministrativeContext(server, errorMessages);
- if (ctx != null)
- {
- return new ConnectionWrapper(ctx, getConnectTimeout(), getTrustManager(sourceServerCI));
- }
+ return new ConnectionWrapper(server.getHostPort(), connectiontype, server.getBindDn(), server.getPwd(),
+ getConnectTimeout(), getTrustManager(sourceServerCI));
}
catch (NamingException e)
{
+ errorMessages.add(getMessageForException(e, server.getHostPort().toString()));
logger.error(LocalizableMessage.raw("Error when creating connection for:" + server.getHostPort()));
}
return null;
}
- private InitialLdapContext createAdministrativeContext(EnableReplicationServerData server,
- List<LocalizableMessage> errorMessages)
- {
- try
- {
- return createAdministrativeContext(
- server.getHostPort(), useSSL, useStartTLS, server.getBindDn(), server.getPwd(),
- getConnectTimeout(), getTrustManager(sourceServerCI));
- }
- catch (NamingException ne)
- {
- errorMessages.add(getMessageForException(ne, server.getHostPort().toString()));
- logger.error(LocalizableMessage.raw("Complete error stack:"), ne);
- return null;
- }
- }
-
/**
* Disables the replication in the server for the provided suffixes using the
* data in the DisableReplicationUserData object. This method does not prompt
@@ -4396,7 +4304,7 @@
try
{
return createAdministrativeContext(
- server, useSSL, useStartTLS,
+ server, LDAPS.equals(connectiontype), START_TLS.equals(connectiontype),
getAdministratorDN(uData.getAdminUid()), uData.getAdminPwd(),
getConnectTimeout(), getTrustManager(sourceServerCI));
}
@@ -7123,12 +7031,8 @@
for (ServerDescriptor s : allServers)
{
logger.info(LocalizableMessage.raw("Configuring server "+server.getHostPort(true)));
- InitialLdapContext ctx = null;
- ConnectionWrapper conn = null;
- try
+ try (ConnectionWrapper conn = getDirContextForServer(cache, s))
{
- ctx = getDirContextForServer(cache, s);
- conn = new ConnectionWrapper(ctx, getConnectTimeout(), getTrustManager(sourceServerCI));
if (serversToConfigureDomain.contains(s))
{
configureToReplicateBaseDN(conn, baseDN, repServers, usedIds);
@@ -7150,11 +7054,6 @@
LocalizableMessage msg = getMessageForEnableException(hostPort, baseDN);
throw new ReplicationCliException(msg, ERROR_ENABLING_REPLICATION_ON_BASEDN, ode);
}
- finally
- {
- close(ctx);
- close(conn);
- }
alreadyConfiguredServers.add(s.getId());
alreadyConfiguredReplicationServers.add(s.getId());
}
@@ -9603,16 +9502,9 @@
logger.info(LocalizableMessage.raw("Seeding to replication server on "+
server.getHostPort(true)+" with certificates of "+
getHostPort(adsCtxSource.getDirContext())));
- InitialLdapContext ctx = null;
- try
+ try (ConnectionWrapper conn = getDirContextForServer(cacheDestination, server))
{
- ctx = getDirContextForServer(cacheDestination, server);
- ServerDescriptor.seedAdsTrustStore(ctx,
- adsCtxSource.getTrustedCertificates());
- }
- finally
- {
- close(ctx);
+ ServerDescriptor.seedAdsTrustStore(conn.getLdapContext(), adsCtxSource.getTrustedCertificates());
}
}
}
@@ -9735,7 +9627,7 @@
}
}
- private InitialLdapContext getDirContextForServer(TopologyCache cache, ServerDescriptor server)
+ private ConnectionWrapper getDirContextForServer(TopologyCache cache, ServerDescriptor server)
throws NamingException
{
String dn = getBindDN(cache.getAdsContext().getDirContext());
@@ -9746,7 +9638,7 @@
ServerLoader loader = new ServerLoader(server.getAdsProperties(),
dn, pwd, getTrustManager(sourceServerCI), getConnectTimeout(),
cache.getPreferredConnections(), filter);
- return loader.createContext();
+ return loader.createConnectionWrapper();
}
/**
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/status/StatusCli.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/status/StatusCli.java
index e17c35d..9a62d3d 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/status/StatusCli.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tools/status/StatusCli.java
@@ -40,7 +40,6 @@
import javax.naming.AuthenticationException;
import javax.naming.NamingException;
-import javax.naming.ldap.InitialLdapContext;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLException;
import javax.net.ssl.TrustManager;
@@ -54,6 +53,7 @@
import org.forgerock.opendj.config.client.ldap.LDAPManagementContext;
import org.forgerock.opendj.ldap.AuthorizationException;
import org.forgerock.opendj.ldap.Connection;
+import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.LDAPConnectionFactory;
import org.forgerock.opendj.ldap.LdapException;
import org.forgerock.opendj.ldap.ResultCode;
@@ -75,7 +75,6 @@
import org.opends.guitools.controlpanel.util.ControlPanelLog;
import org.opends.guitools.controlpanel.util.Utilities;
import org.opends.server.admin.client.cli.SecureConnectionCliArgs;
-import org.forgerock.opendj.ldap.DN;
import org.opends.server.types.InitializationException;
import org.opends.server.types.NullOutputStream;
import org.opends.server.util.BuildVersion;
@@ -330,11 +329,9 @@
if (mContext != null)
{
- InitialLdapContext ctx = null;
- try {
- ctx = Utilities.getAdminDirContext(controlInfo, bindDn, bindPwd);
- controlInfo.setConnection(
- new ConnectionWrapper(ctx, controlInfo.getConnectTimeout(), controlInfo.getTrustManager()));
+ try (ConnectionWrapper conn = Utilities.getAdminDirContext(controlInfo, bindDn, bindPwd))
+ {
+ controlInfo.setConnection(conn);
controlInfo.regenerateDescriptor();
writeStatus(controlInfo);
@@ -353,8 +350,6 @@
println();
println(cre.getMessageObject());
return ReturnCode.ERROR_INITIALIZING_SERVER.get();
- } finally {
- StaticUtils.close(ctx);
}
} else {
// The user did not provide authentication: just display the
--
Gitblit v1.10.0