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/server/tools/dsreplication/ReplicationCliMain.java | 348 ++++++++++++++++++++--------------------------------------
1 files changed, 120 insertions(+), 228 deletions(-)
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();
}
/**
--
Gitblit v1.10.0