From f3f9f37cd05c81867e2852746b169132d8f1b598 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 01 Jul 2016 14:30:12 +0000
Subject: [PATCH] Partial OPENDJ-2625 Convert all code that uses JNDI to use the SDK instead
---
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/LDAPEntryReader.java | 12
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/LDAPConnectionPool.java | 135 ++---
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java | 7
opendj-server-legacy/src/main/java/org/opends/quicksetup/Application.java | 3
opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ServerLoader.java | 2
opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionUtils.java | 37 -
opendj-server-legacy/src/main/java/org/opends/admin/ads/ServerDescriptor.java | 92 +--
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java | 16
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java | 43 +
opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java | 26
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/NodeRefresher.java | 90 ++-
opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java | 43
opendj-server-legacy/src/main/java/org/opends/admin/ads/ADSContext.java | 44
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java | 64 +-
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java | 24
opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionWrapper.java | 89 ++-
opendj-server-legacy/src/main/java/org/opends/admin/ads/ADSContextHelper.java | 25
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java | 7
opendj-server-legacy/src/main/java/org/opends/quicksetup/util/ServerController.java | 348 +++++++-------
opendj-server-legacy/src/main/java/org/opends/quicksetup/util/Utils.java | 7
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteEntryTask.java | 33
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/Task.java | 29
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java | 103 +--
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java | 50 +-
opendj-server-legacy/src/main/java/org/opends/server/tools/status/StatusCli.java | 8
opendj-server-legacy/src/main/java/org/opends/admin/ads/util/PreferredConnection.java | 13
opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/Uninstaller.java | 3
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewEntryTask.java | 12
28 files changed, 671 insertions(+), 694 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/admin/ads/ADSContext.java b/opendj-server-legacy/src/main/java/org/opends/admin/ads/ADSContext.java
index 71238f0..dc5f982 100644
--- a/opendj-server-legacy/src/main/java/org/opends/admin/ads/ADSContext.java
+++ b/opendj-server-legacy/src/main/java/org/opends/admin/ads/ADSContext.java
@@ -274,7 +274,6 @@
}
/** The context used to retrieve information. */
- private final InitialLdapContext dirContext;
private final ConnectionWrapper connectionWrapper;
/**
@@ -286,7 +285,6 @@
public ADSContext(ConnectionWrapper connectionWrapper)
{
this.connectionWrapper = connectionWrapper;
- this.dirContext = connectionWrapper.getLdapContext();
}
/**
@@ -296,7 +294,7 @@
*/
public InitialLdapContext getDirContext()
{
- return dirContext;
+ return connectionWrapper.getLdapContext();
}
/**
@@ -339,7 +337,7 @@
{
createContainerEntry(getServerContainerDN());
}
- dirContext.createSubcontext(dn, attrs).close();
+ connectionWrapper.getLdapContext().createSubcontext(dn, attrs).close();
if (serverProperties.containsKey(ServerProperty.INSTANCE_PUBLIC_KEY_CERTIFICATE))
{
registerInstanceKeyCertificate(serverProperties, dn);
@@ -409,12 +407,12 @@
Map<ServerProperty, Object> newServerProps = new HashMap<>(serverProperties);
newServerProps.put(ServerProperty.ID, newServerId);
LdapName newDn = makeDNFromServerProperties(newServerProps);
- dirContext.rename(dn, newDn);
+ connectionWrapper.getLdapContext().rename(dn, newDn);
dn = newDn;
serverProperties.put(ServerProperty.ID, newServerId);
}
BasicAttributes attrs = makeAttrsFromServerProperties(serverProperties, false);
- dirContext.modifyAttributes(dn, DirContext.REPLACE_ATTRIBUTE, attrs);
+ connectionWrapper.getLdapContext().modifyAttributes(dn, DirContext.REPLACE_ATTRIBUTE, attrs);
if (serverProperties.containsKey(ServerProperty.INSTANCE_PUBLIC_KEY_CERTIFICATE))
{
registerInstanceKeyCertificate(serverProperties, dn);
@@ -464,7 +462,7 @@
}
}
- dirContext.destroySubcontext(dn);
+ connectionWrapper.getLdapContext().destroySubcontext(dn);
}
catch (NameNotFoundException x)
{
@@ -487,7 +485,7 @@
String memberAttrName = ServerGroupProperty.MEMBERS.getAttributeName();
String filter = "(" + memberAttrName + "=cn=" + serverID + ")";
sc.setSearchScope(SearchControls.ONELEVEL_SCOPE);
- ne = dirContext.search(getServerGroupContainerDN(), filter, sc);
+ ne = connectionWrapper.getLdapContext().search(getServerGroupContainerDN(), filter, sc);
while (ne.hasMore())
{
SearchResult sr = ne.next();
@@ -530,11 +528,11 @@
newAttrs.put(newAttr);
if (newAttr.size() > 0)
{
- dirContext.modifyAttributes(groupDn, DirContext.REPLACE_ATTRIBUTE, newAttrs);
+ connectionWrapper.getLdapContext().modifyAttributes(groupDn, DirContext.REPLACE_ATTRIBUTE, newAttrs);
}
else
{
- dirContext.modifyAttributes(groupDn, DirContext.REMOVE_ATTRIBUTE, newAttrs);
+ connectionWrapper.getLdapContext().modifyAttributes(groupDn, DirContext.REMOVE_ATTRIBUTE, newAttrs);
}
}
}
@@ -708,7 +706,7 @@
SearchControls sc = new SearchControls();
sc.setSearchScope(SearchControls.ONELEVEL_SCOPE);
- ne = dirContext.search(getServerContainerDN(), "(objectclass=*)", sc);
+ ne = connectionWrapper.getLdapContext().search(getServerContainerDN(), "(objectclass=*)", sc);
while (ne.hasMore())
{
SearchResult sr = ne.next();
@@ -724,7 +722,8 @@
final String attrIDs[] = { "ds-cfg-public-key-certificate;binary" };
sc1.setReturningAttributes(attrIDs);
- ne2 = dirContext.search(getInstanceKeysContainerDN(), "(ds-cfg-key-id=" + keyId + ")", sc);
+ ne2 = connectionWrapper.getLdapContext().search(
+ getInstanceKeysContainerDN(), "(ds-cfg-key-id=" + keyId + ")", sc);
boolean found = false;
while (ne2.hasMore())
{
@@ -789,7 +788,7 @@
attrs.put(oc);
try
{
- DirContext ctx = dirContext.createSubcontext(dn, attrs);
+ DirContext ctx = connectionWrapper.getLdapContext().createSubcontext(dn, attrs);
ctx.close();
}
catch (NameAlreadyBoundException x)
@@ -826,7 +825,7 @@
{
// Rename to entry
LdapName newDN = nameFromDN("cn=" + Rdn.escapeValue(newGroupId) + "," + getServerGroupContainerDN());
- dirContext.rename(dn, newDN);
+ connectionWrapper.getLdapContext().rename(dn, newDN);
dn = newDN;
}
@@ -840,7 +839,7 @@
BasicAttributes attrs = makeAttrsFromServerGroupProperties(serverGroupProperties);
// attribute modification
- dirContext.modifyAttributes(dn, DirContext.REPLACE_ATTRIBUTE, attrs);
+ connectionWrapper.getLdapContext().modifyAttributes(dn, DirContext.REPLACE_ATTRIBUTE, attrs);
}
catch (NameNotFoundException x)
{
@@ -871,7 +870,7 @@
{
SearchControls sc = new SearchControls();
sc.setSearchScope(SearchControls.ONELEVEL_SCOPE);
- ne = dirContext.search(getServerGroupContainerDN(), "(objectclass=*)", sc);
+ ne = connectionWrapper.getLdapContext().search(getServerGroupContainerDN(), "(objectclass=*)", sc);
while (ne.hasMore())
{
SearchResult sr = ne.next();
@@ -914,7 +913,7 @@
sc.setSearchScope(SearchControls.ONELEVEL_SCOPE);
String[] attList = { "cn", "userpassword", "ds-privilege-name", "description" };
sc.setReturningAttributes(attList);
- ne = dirContext.search(getAdministratorContainerDN(), "(objectclass=*)", sc);
+ ne = connectionWrapper.getLdapContext().search(getAdministratorContainerDN(), "(objectclass=*)", sc);
while (ne.hasMore())
{
SearchResult sr = ne.next();
@@ -1019,7 +1018,7 @@
try
{
Control[] controls = new Control[] { new SubtreeDeleteControl() };
- LdapContext tmpContext = dirContext.newInstance(controls);
+ LdapContext tmpContext = connectionWrapper.getLdapContext().newInstance(controls);
try
{
for (String dn : dns)
@@ -1102,7 +1101,7 @@
try
{
- DirContext ctx = dirContext.createSubcontext(dnCentralAdmin, attrs);
+ DirContext ctx = connectionWrapper.getLdapContext().createSubcontext(dnCentralAdmin, attrs);
ctx.close();
}
catch (NameAlreadyBoundException x)
@@ -1133,7 +1132,7 @@
try
{
- dirContext.destroySubcontext(dnCentralAdmin);
+ connectionWrapper.getLdapContext().destroySubcontext(dnCentralAdmin);
}
catch (NameNotFoundException | NotContextException x)
{
@@ -2112,7 +2111,7 @@
throws ADSContextException
{
ADSContextHelper helper = new ADSContextHelper();
- helper.registerInstanceKeyCertificate(dirContext, serverProperties, serverEntryDn);
+ helper.registerInstanceKeyCertificate(connectionWrapper, serverProperties, serverEntryDn);
}
/**
@@ -2145,7 +2144,8 @@
{ ADSContext.ServerProperty.INSTANCE_KEY_ID.getAttributeName(),
ADSContext.ServerProperty.INSTANCE_PUBLIC_KEY_CERTIFICATE.getAttributeName() + ";binary" };
searchControls.setReturningAttributes(attrIDs);
- NamingEnumeration<SearchResult> keyEntries = dirContext.search(baseDN, searchFilter, searchControls);
+ NamingEnumeration<SearchResult> keyEntries =
+ connectionWrapper.getLdapContext().search(baseDN, searchFilter, searchControls);
try
{
while (keyEntries.hasMore())
diff --git a/opendj-server-legacy/src/main/java/org/opends/admin/ads/ADSContextHelper.java b/opendj-server-legacy/src/main/java/org/opends/admin/ads/ADSContextHelper.java
index a82cbc4..a7c69f3 100644
--- a/opendj-server-legacy/src/main/java/org/opends/admin/ads/ADSContextHelper.java
+++ b/opendj-server-legacy/src/main/java/org/opends/admin/ads/ADSContextHelper.java
@@ -25,23 +25,23 @@
import javax.naming.directory.Attribute;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
+import javax.naming.directory.DirContext;
import javax.naming.directory.SearchResult;
-import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapName;
import javax.naming.ldap.Rdn;
-import org.opends.admin.ads.ADSContext.ServerProperty;
-import org.opends.admin.ads.ADSContextException.ErrorType;
-import org.opends.admin.ads.util.ConnectionWrapper;
import org.forgerock.opendj.config.ManagedObjectNotFoundException;
+import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.server.config.client.LDIFBackendCfgClient;
import org.forgerock.opendj.server.config.client.RootCfgClient;
import org.forgerock.opendj.server.config.meta.BackendCfgDefn;
import org.forgerock.opendj.server.config.meta.LDIFBackendCfgDefn;
+import org.opends.admin.ads.ADSContext.ServerProperty;
+import org.opends.admin.ads.ADSContextException.ErrorType;
+import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.server.config.ConfigConstants;
import org.opends.server.crypto.CryptoManagerImpl;
import org.opends.server.types.CryptoManagerException;
-import org.forgerock.opendj.ldap.DN;
/**
* This is the only class in the org.opends.admin.ads package that uses the
@@ -61,7 +61,7 @@
/**
* Creates the Administration Suffix.
- * @param ctx the DirContext to be used.
+ * @param conn the connection to be used.
* @param backendName the name of the backend where the administration
* suffix is stored.
* @throws ADSContextException if the administration suffix could not be
@@ -120,7 +120,7 @@
expected); add an instance key public-key certificate entry for the key
certificate; and associate the certificate entry with the server entry via
the key ID attribute.
- @param ctx the InitialLdapContext on the server we want to update.
+ @param conn the connection on the server we want to update.
@param serverProperties Properties of the server being registered to which
the instance key entry belongs.
@param serverEntryDn The server's ADS entry DN.
@@ -128,7 +128,7 @@
problem getting the instance public key certificate ID.
*/
void registerInstanceKeyCertificate(
- InitialLdapContext ctx, Map<ServerProperty, Object> serverProperties,
+ ConnectionWrapper conn, Map<ServerProperty, Object> serverProperties,
LdapName serverEntryDn)
throws ADSContextException {
assert serverProperties.containsKey(
@@ -162,8 +162,7 @@
NamingEnumeration<SearchResult> results = null;
try
{
- results = ctx.search(ADSContext.getInstanceKeysContainerDN(), keyAttrs,
- attrIDs);
+ results = conn.getLdapContext().search(ADSContext.getInstanceKeysContainerDN(), keyAttrs, attrIDs);
boolean found = false;
while (results.hasMore()) {
final Attribute keyIdAttr =
@@ -194,14 +193,14 @@
final LdapName keyDn = new LdapName(
ServerProperty.INSTANCE_KEY_ID.getAttributeName() + "=" + Rdn.escapeValue(keyID)
+ "," + ADSContext.getInstanceKeysContainerDN());
- ctx.createSubcontext(keyDn, keyAttrs).close();
+ conn.getLdapContext().createSubcontext(keyDn, keyAttrs).close();
}
if (serverEntryDn != null)
{
/* associate server entry with certificate entry via key ID attribute */
- ctx.modifyAttributes(serverEntryDn,
- InitialLdapContext.REPLACE_ATTRIBUTE,
+ conn.getLdapContext().modifyAttributes(serverEntryDn,
+ DirContext.REPLACE_ATTRIBUTE,
new BasicAttributes(ServerProperty.INSTANCE_KEY_ID.getAttributeName(), keyID));
}
}
diff --git a/opendj-server-legacy/src/main/java/org/opends/admin/ads/ServerDescriptor.java b/opendj-server-legacy/src/main/java/org/opends/admin/ads/ServerDescriptor.java
index 2d33ddf..6e8131c 100644
--- a/opendj-server-legacy/src/main/java/org/opends/admin/ads/ServerDescriptor.java
+++ b/opendj-server-legacy/src/main/java/org/opends/admin/ads/ServerDescriptor.java
@@ -37,13 +37,12 @@
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
-import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapName;
import javax.naming.ldap.Rdn;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
-import org.opends.admin.ads.util.ConnectionUtils;
+import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.quicksetup.Constants;
import org.opends.server.config.ConfigConstants;
import org.opends.server.types.HostPort;
@@ -635,37 +634,32 @@
/**
* Creates a ServerDescriptor object based on the configuration that we read
- * using the provided InitialLdapContext.
- * @param ctx the InitialLdapContext that will be used to read the
- * configuration of the server.
+ * using the provided connection.
+ * @param conn the connection that will be used to read the configuration of the server.
* @param filter the topology cache filter describing the information that
* must be retrieved.
- * @return a ServerDescriptor object that corresponds to the read
- * configuration.
- * @throws NamingException if a problem occurred reading the server
- * configuration.
+ * @return a ServerDescriptor object that corresponds to the read configuration.
+ * @throws NamingException if a problem occurred reading the server configuration.
*/
- public static ServerDescriptor createStandalone(InitialLdapContext ctx,
- TopologyCacheFilter filter)
+ public static ServerDescriptor createStandalone(ConnectionWrapper conn, TopologyCacheFilter filter)
throws NamingException
{
ServerDescriptor desc = new ServerDescriptor();
- updateLdapConfiguration(desc, ctx);
- updateAdminConnectorConfiguration(desc, ctx);
- updateJmxConfiguration(desc, ctx);
- updateReplicas(desc, ctx, filter);
- updateReplication(desc, ctx, filter);
- updatePublicKeyCertificate(desc, ctx);
- updateMiscellaneous(desc, ctx);
+ updateLdapConfiguration(desc, conn);
+ updateAdminConnectorConfiguration(desc, conn);
+ updateJmxConfiguration(desc, conn);
+ updateReplicas(desc, conn, filter);
+ updateReplication(desc, conn, filter);
+ updatePublicKeyCertificate(desc, conn);
+ updateMiscellaneous(desc, conn);
- desc.serverProperties.put(ServerProperty.HOST_NAME,
- ConnectionUtils.getHostName(ctx));
+ desc.serverProperties.put(ServerProperty.HOST_NAME, conn.getHostPort().getHost());
return desc;
}
- private static void updateLdapConfiguration(ServerDescriptor desc, InitialLdapContext ctx)
+ private static void updateLdapConfiguration(ServerDescriptor desc, ConnectionWrapper conn)
throws NamingException
{
SearchControls ctls = new SearchControls();
@@ -683,7 +677,7 @@
LdapName jndiName = new LdapName("cn=config");
NamingEnumeration<SearchResult> listeners =
- ctx.search(jndiName, filter, ctls);
+ conn.getLdapContext().search(jndiName, filter, ctls);
try
{
@@ -733,7 +727,7 @@
}
}
- private static void updateAdminConnectorConfiguration(ServerDescriptor desc, InitialLdapContext ctx)
+ private static void updateAdminConnectorConfiguration(ServerDescriptor desc, ConnectionWrapper conn)
throws NamingException
{
SearchControls ctls = new SearchControls();
@@ -747,7 +741,7 @@
LdapName jndiName = new LdapName("cn=config");
NamingEnumeration<SearchResult> listeners =
- ctx.search(jndiName, filter, ctls);
+ conn.getLdapContext().search(jndiName, filter, ctls);
try
{
@@ -778,7 +772,7 @@
}
}
- private static void updateJmxConfiguration(ServerDescriptor desc, InitialLdapContext ctx) throws NamingException
+ private static void updateJmxConfiguration(ServerDescriptor desc, ConnectionWrapper conn) throws NamingException
{
SearchControls ctls = new SearchControls();
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
@@ -794,7 +788,7 @@
LdapName jndiName = new LdapName("cn=config");
NamingEnumeration<SearchResult> listeners =
- ctx.search(jndiName, filter, ctls);
+ conn.getLdapContext().search(jndiName, filter, ctls);
ArrayList<Integer> jmxPorts = new ArrayList<>();
ArrayList<Integer> jmxsPorts = new ArrayList<>();
@@ -839,7 +833,7 @@
}
private static void updateReplicas(ServerDescriptor desc,
- InitialLdapContext ctx, TopologyCacheFilter cacheFilter)
+ ConnectionWrapper conn, TopologyCacheFilter cacheFilter)
throws NamingException
{
if (!cacheFilter.searchBaseDNInformation())
@@ -858,7 +852,7 @@
LdapName jndiName = new LdapName("cn=config");
NamingEnumeration<SearchResult> databases =
- ctx.search(jndiName, filter, ctls);
+ conn.getLdapContext().search(jndiName, filter, ctls);
try
{
@@ -875,7 +869,7 @@
Set<String> entries;
if (cacheFilter.searchMonitoringInformation())
{
- entries = getBaseDNEntryCount(ctx, id);
+ entries = getBaseDNEntryCount(conn, id);
}
else
{
@@ -950,7 +944,7 @@
}
private static void updateReplication(ServerDescriptor desc,
- InitialLdapContext ctx, TopologyCacheFilter cacheFilter)
+ ConnectionWrapper conn, TopologyCacheFilter cacheFilter)
throws NamingException
{
boolean replicationEnabled = false;
@@ -968,7 +962,7 @@
try
{
- syncProviders = ctx.search(jndiName, filter, ctls);
+ syncProviders = conn.getLdapContext().search(jndiName, filter, ctls);
while(syncProviders.hasMore())
{
@@ -1015,7 +1009,7 @@
syncProviders = null;
try
{
- syncProviders = ctx.search(jndiName, filter, ctls);
+ syncProviders = conn.getLdapContext().search(jndiName, filter, ctls);
while(syncProviders.hasMore())
{
@@ -1077,7 +1071,7 @@
NamingEnumeration<SearchResult> entries = null;
try
{
- entries = ctx.search(jndiName, filter, ctls);
+ entries = conn.getLdapContext().search(jndiName, filter, ctls);
while (entries.hasMore())
{
@@ -1127,7 +1121,7 @@
jndiName = new LdapName("cn=Crypto Manager,cn=config");
- entries = ctx.search(jndiName, filter, ctls);
+ entries = conn.getLdapContext().search(jndiName, filter, ctls);
try
{
@@ -1157,11 +1151,11 @@
ADS.
@param desc The map to update with the instance key-pair public-key
certificate.
- @param ctx The bound server instance.
+ @param conn The connection to the server.
@throws NamingException if unable to retrieve certificate from bound
instance.
*/
- private static void updatePublicKeyCertificate(ServerDescriptor desc, InitialLdapContext ctx) throws NamingException
+ private static void updatePublicKeyCertificate(ServerDescriptor desc, ConnectionWrapper conn) throws NamingException
{
/* TODO: this DN is declared in some core constants file. Create a constants
file for the installer and import it into the core. */
@@ -1176,7 +1170,7 @@
searchControls.setSearchScope(SearchControls.OBJECT_SCOPE);
final String attrIDs[] = { "ds-cfg-public-key-certificate;binary" };
searchControls.setReturningAttributes(attrIDs);
- final SearchResult certEntry = ctx.search(dn,
+ final SearchResult certEntry = conn.getLdapContext().search(dn,
"(objectclass=ds-cfg-instance-key)", searchControls).next();
final Attribute certAttr = certEntry.getAttributes().get(attrIDs[0]);
if (null != certAttr) {
@@ -1195,7 +1189,7 @@
oc.add("top");
oc.add("ds-cfg-self-signed-cert-request");
attrs.put(oc);
- ctx.createSubcontext(dn, attrs).close();
+ conn.getLdapContext().createSubcontext(dn, attrs).close();
}
else {
throw x;
@@ -1204,7 +1198,7 @@
}
}
- private static void updateMiscellaneous(ServerDescriptor desc, InitialLdapContext ctx) throws NamingException
+ private static void updateMiscellaneous(ServerDescriptor desc, ConnectionWrapper conn) throws NamingException
{
SearchControls ctls = new SearchControls();
ctls.setSearchScope(SearchControls.OBJECT_SCOPE);
@@ -1216,7 +1210,7 @@
LdapName jndiName = new LdapName("cn=schema");
NamingEnumeration<SearchResult> listeners =
- ctx.search(jndiName, filter, ctls);
+ conn.getLdapContext().search(jndiName, filter, ctls);
try
{
@@ -1241,7 +1235,7 @@
certificates. This trust is necessary at least to initialize replication,
which uses the trusted certificate entries in the ads-truststore for server
authentication.
- @param ctx The bound instance.
+ @param conn The connection to the server.
@param keyEntryMap The set of valid (i.e., not tagged as compromised)
instance key-pair public-key certificate entries in ADS represented as a map
from keyID to public-key certificate (binary).
@@ -1249,7 +1243,7 @@
ads-truststore via LDAP.
*/
public static void seedAdsTrustStore(
- InitialLdapContext ctx,
+ ConnectionWrapper conn,
Map<String, byte[]> keyEntryMap)
throws NamingException
{
@@ -1270,24 +1264,24 @@
getAttributeName() + ";binary", keyEntry.getValue()));
final LdapName keyDn = new LdapName(rdnAttr.getID() + "=" + Rdn.escapeValue(rdnAttr.get()) + "," + TRUSTSTORE_DN);
try {
- ctx.createSubcontext(keyDn, keyAttrs).close();
+ conn.getLdapContext().createSubcontext(keyDn, keyAttrs).close();
}
catch(NameAlreadyBoundException x){
- ctx.destroySubcontext(keyDn);
- ctx.createSubcontext(keyDn, keyAttrs).close();
+ conn.getLdapContext().destroySubcontext(keyDn);
+ conn.getLdapContext().createSubcontext(keyDn, keyAttrs).close();
}
}
}
/**
* Returns the values of the ds-base-dn-entry count attributes for the given
- * backend monitor entry using the provided InitialLdapContext.
- * @param ctx the InitialLdapContext to use to update the configuration.
+ * backend monitor entry using the provided connection.
+ * @param conn the connection to use to update the configuration.
* @param backendID the id of the backend.
* @return the values of the ds-base-dn-entry count attribute.
* @throws NamingException if there was an error.
*/
- private static Set<String> getBaseDNEntryCount(InitialLdapContext ctx,
+ private static Set<String> getBaseDNEntryCount(ConnectionWrapper conn,
String backendID) throws NamingException
{
LinkedHashSet<String> v = new LinkedHashSet<>();
@@ -1301,7 +1295,7 @@
LdapName jndiName = new LdapName("cn=monitor");
NamingEnumeration<SearchResult> listeners =
- ctx.search(jndiName, filter, ctls);
+ conn.getLdapContext().search(jndiName, filter, ctls);
try
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionUtils.java b/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionUtils.java
index 74ac345..6238ea3 100644
--- a/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionUtils.java
+++ b/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionUtils.java
@@ -31,7 +31,6 @@
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
-import javax.naming.ldap.Control;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.StartTlsRequest;
import javax.naming.ldap.StartTlsResponse;
@@ -212,7 +211,7 @@
/**
* Clones the provided InitialLdapContext and returns a connection using
* the same parameters.
- * @param ctx the connection to be cloned.
+ * @param conn the connection to be cloned.
* @param timeout the timeout to establish the connection in milliseconds.
* Use {@code 0} to express no timeout.
* @param trustManager the trust manager to be used to connect.
@@ -220,41 +219,28 @@
* @return the new InitialLdapContext connected to the server.
* @throws NamingException if there was an error creating the new connection.
*/
- public static InitialLdapContext cloneInitialLdapContext(
- final InitialLdapContext ctx, int timeout, TrustManager trustManager,
+ public static ConnectionWrapper cloneConnectionWrapper(
+ final ConnectionWrapper conn, int timeout, TrustManager trustManager,
KeyManager keyManager) throws NamingException
{
- Hashtable<?, ?> env = ctx.getEnvironment();
- Control[] ctls = ctx.getConnectControls();
- Control[] newCtls = null;
- if (ctls != null)
- {
- newCtls = new Control[ctls.length];
- System.arraycopy(ctls, 0, newCtls, 0, ctls.length);
- }
- /* Contains the DirContext and the Exception if any */
final Object[] pair = new Object[] {null, null};
- final Hashtable<?, ?> fEnv = env;
final TrustManager fTrustManager = trustManager;
- final KeyManager fKeyManager = keyManager;
- final Control[] fNewCtls = newCtls;
-
+ final KeyManager fKeyManager = keyManager;
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
- if (isSSL(ctx) || isStartTLS(ctx))
+ if (conn.isSSL() || conn.isStartTLS())
{
- TrustedSocketFactory.setCurrentThreadTrustManager(fTrustManager,
- fKeyManager);
+ TrustedSocketFactory.setCurrentThreadTrustManager(fTrustManager, fKeyManager);
}
- pair[0] = new InitialLdapContext(fEnv, fNewCtls);
+ pair[0] = new ConnectionWrapper(conn);
} catch (NamingException | RuntimeException ne) {
pair[1] = ne;
}
}
});
- return getInitialLdapContext(t, pair, timeout);
+ return ConnectionUtils.<ConnectionWrapper> getConnection(t, pair, timeout);
}
/**
@@ -540,6 +526,11 @@
private static InitialLdapContext getInitialLdapContext(Thread t,
Object[] pair, int timeout) throws NamingException
{
+ return ConnectionUtils.<InitialLdapContext> getConnection(t, pair, timeout);
+ }
+
+ private static <T> T getConnection(Thread t, Object[] pair, int timeout) throws NamingException
+ {
try
{
if (timeout > 0)
@@ -601,7 +592,7 @@
(Throwable) pair[1]);
}
}
- return (InitialLdapContext) pair[0];
+ return (T) pair[0];
}
/**
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);
}
}
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 346553f..9337132 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
@@ -19,8 +19,6 @@
import java.util.Collections;
import java.util.Set;
-import javax.naming.ldap.InitialLdapContext;
-
/**
* A simple class that is used to be able to specify which URL and connection
* type to use when we connect to a server.
@@ -95,20 +93,19 @@
/**
* Commodity method that returns a PreferredConnection object with the
- * information on a given InitialLdapContext.
+ * information on a given connection.
* @param conn the connection we retrieve the information from.
* @return a preferred connection object.
*/
private static PreferredConnection getPreferredConnection(ConnectionWrapper conn)
{
- InitialLdapContext ctx = conn.getLdapContext();
- String ldapUrl = ConnectionUtils.getLdapUrl(ctx);
+ String ldapUrl = conn.getLdapUrl();
PreferredConnection.Type type;
- if (ConnectionUtils.isStartTLS(ctx))
+ if (conn.isStartTLS())
{
type = PreferredConnection.Type.START_TLS;
}
- else if (ConnectionUtils.isSSL(ctx))
+ else if (conn.isSSL())
{
type = PreferredConnection.Type.LDAPS;
}
@@ -121,7 +118,7 @@
/**
* Commodity method that generates a list of preferred connection (of just
- * one) with the information on a given InitialLdapContext.
+ * one) with the information on a given connection.
* @param conn the connection we retrieve the information from.
* @return a list containing the preferred connection object.
*/
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 f5adcd7..9c5f690 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
@@ -148,7 +148,7 @@
try (ConnectionWrapper conn = createConnectionWrapper())
{
connCreated = true;
- serverDescriptor = ServerDescriptor.createStandalone(conn.getLdapContext(), filter);
+ serverDescriptor = ServerDescriptor.createStandalone(conn, filter);
serverDescriptor.setAdsProperties(serverProperties);
serverDescriptor.updateAdsPropertiesWithServerProperties();
}
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java
index 2b8ebce..5fb077d 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java
@@ -16,6 +16,9 @@
*/
package org.opends.guitools.controlpanel.browser;
+import static org.opends.admin.ads.util.ConnectionUtils.*;
+import static org.opends.server.util.ServerConstants.*;
+
import java.awt.Font;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
@@ -34,7 +37,6 @@
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.Control;
-import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.ManageReferralControl;
import javax.naming.ldap.SortControl;
import javax.naming.ldap.SortKey;
@@ -66,9 +68,6 @@
import org.opends.server.types.HostPort;
import org.opends.server.types.LDAPURL;
-import static org.opends.admin.ads.util.ConnectionUtils.isSSL;
-import static org.opends.server.util.ServerConstants.*;
-
/**
* This is the main class of the LDAP entry browser. It is in charge of
* updating a tree that is passed as parameter. Every instance of
@@ -108,8 +107,7 @@
private String displayAttribute;
private final boolean showAttributeName;
private ConnectionWrapper connConfig;
- private InitialLdapContext ctxConfiguration;
- private InitialLdapContext ctxUserData;
+ private ConnectionWrapper connUserData;
private boolean followReferrals;
private boolean sorted;
private boolean showContainerOnly;
@@ -178,22 +176,22 @@
* @param server the server descriptor.
* @param connConfiguration the connection to be used to retrieve the data in
* the configuration base DNs.
- * @param ctxUserData the connection to be used to retrieve the data in the
+ * @param connUserData the connection to be used to retrieve the data in the
* user base DNs.
* @throws NamingException if an error occurs.
*/
public void setConnections(
ServerDescriptor server,
ConnectionWrapper connConfiguration,
- InitialLdapContext ctxUserData) throws NamingException {
+ ConnectionWrapper connUserData) throws NamingException {
String rootNodeName;
if (connConfiguration != null)
{
this.connConfig = connConfiguration;
- this.ctxUserData = ctxUserData;
+ this.connUserData = connUserData;
connConfig.getLdapContext().setRequestControls(getConfigurationRequestControls());
- this.ctxUserData.setRequestControls(getRequestControls());
+ connUserData.getLdapContext().setRequestControls(getRequestControls());
rootNodeName = new HostPort(server.getHostname(), connConfig.getHostPort().getPort()).toString();
}
else {
@@ -208,16 +206,16 @@
* Return the connection for accessing the directory configuration.
* @return the connection for accessing the directory configuration.
*/
- public InitialLdapContext getConfigurationConnection() {
- return connConfig.getLdapContext();
+ public ConnectionWrapper getConfigurationConnection() {
+ return connConfig;
}
/**
* Return the connection for accessing the directory user data.
* @return the connection for accessing the directory user data.
*/
- public InitialLdapContext getUserDataConnection() {
- return ctxUserData;
+ public ConnectionWrapper getUserDataConnection() {
+ return connUserData;
}
@@ -418,7 +416,7 @@
stopRefresh();
removeAllChildNodes(rootNode, true /* Keep suffixes */);
connConfig.getLdapContext().setRequestControls(getConfigurationRequestControls());
- ctxUserData.setRequestControls(getRequestControls());
+ connUserData.getLdapContext().setRequestControls(getRequestControls());
connectionPool.setRequestControls(getRequestControls());
startRefresh(null);
}
@@ -446,7 +444,7 @@
removeAllChildNodes(rootNode, true /* Keep suffixes */);
this.sorted = sorted;
connConfig.getLdapContext().setRequestControls(getConfigurationRequestControls());
- ctxUserData.setRequestControls(getRequestControls());
+ connUserData.getLdapContext().setRequestControls(getRequestControls());
connectionPool.setRequestControls(getRequestControls());
startRefresh(null);
}
@@ -922,7 +920,7 @@
* @throws NamingException if there is an error retrieving the connection.
* @return the LDAP connection to reading the base entry of a node.
*/
- InitialLdapContext findConnectionForLocalEntry(BasicNode node)
+ ConnectionWrapper findConnectionForLocalEntry(BasicNode node)
throws NamingException {
return findConnectionForLocalEntry(node, isConfigurationNode(node));
}
@@ -934,11 +932,11 @@
* @throws NamingException if there is an error retrieving the connection.
* @return the LDAP connection to reading the base entry of a node.
*/
- private InitialLdapContext findConnectionForLocalEntry(BasicNode node,
+ private ConnectionWrapper findConnectionForLocalEntry(BasicNode node,
boolean isConfigurationNode) throws NamingException
{
if (node == rootNode) {
- return connConfig.getLdapContext();
+ return connConfig;
}
final BasicNode parent = (BasicNode) node.getParent();
@@ -946,7 +944,7 @@
{
return findConnectionForDisplayedEntry(parent, isConfigurationNode);
}
- return isConfigurationNode ? connConfig.getLdapContext() : ctxUserData;
+ return isConfigurationNode ? connConfig : connUserData;
}
/**
@@ -987,7 +985,7 @@
* @return the LDAP connection to search the displayed entry.
* @throws NamingException if there is an error retrieving the connection.
*/
- public InitialLdapContext findConnectionForDisplayedEntry(BasicNode node)
+ public ConnectionWrapper findConnectionForDisplayedEntry(BasicNode node)
throws NamingException {
return findConnectionForDisplayedEntry(node, isConfigurationNode(node));
}
@@ -1001,7 +999,7 @@
* @return the LDAP connection to search the displayed entry.
* @throws NamingException if there is an error retrieving the connection.
*/
- private InitialLdapContext findConnectionForDisplayedEntry(BasicNode node,
+ private ConnectionWrapper findConnectionForDisplayedEntry(BasicNode node,
boolean isConfigurationNode) throws NamingException {
if (followReferrals && node.getRemoteUrl() != null)
{
@@ -1015,13 +1013,13 @@
/**
* Release a connection returned by selectConnectionForChildEntries() or
* selectConnectionForBaseEntry().
- * @param ctx the connection to be released.
+ * @param conn the connection to be released.
*/
- void releaseLDAPConnection(InitialLdapContext ctx) {
- if (ctx != connConfig.getLdapContext() && ctx != this.ctxUserData)
+ void releaseLDAPConnection(ConnectionWrapper conn) {
+ if (conn != connConfig && conn != connUserData)
{
// Thus it comes from the connection pool
- connectionPool.releaseConnection(ctx);
+ connectionPool.releaseConnection(conn);
}
}
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/LDAPConnectionPool.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/LDAPConnectionPool.java
index 544bbba..607cb99 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/LDAPConnectionPool.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/LDAPConnectionPool.java
@@ -16,26 +16,26 @@
*/
package org.opends.guitools.controlpanel.browser;
+import static org.opends.admin.ads.util.PreferredConnection.Type.*;
+
import java.util.ArrayList;
import java.util.HashMap;
import javax.naming.NamingException;
import javax.naming.ldap.Control;
-import javax.naming.ldap.InitialLdapContext;
import javax.net.ssl.KeyManager;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.SearchScope;
import org.opends.admin.ads.util.ApplicationTrustManager;
-import org.opends.admin.ads.util.ConnectionUtils;
+import org.opends.admin.ads.util.ConnectionWrapper;
+import org.opends.admin.ads.util.PreferredConnection.Type;
import org.opends.guitools.controlpanel.event.ReferralAuthenticationListener;
import org.opends.server.types.HostPort;
import org.opends.server.types.LDAPURL;
import com.forgerock.opendj.cli.CliConstants;
-import static org.opends.admin.ads.util.ConnectionUtils.*;
-
/**
* An LDAPConnectionPool is a pool of LDAPConnection.
* <BR><BR>
@@ -77,22 +77,21 @@
/**
* Returns <CODE>true</CODE> if the connection passed is registered in the
* connection pool, <CODE>false</CODE> otherwise.
- * @param ctx the connection.
+ * @param conn the connection.
* @return <CODE>true</CODE> if the connection passed is registered in the
* connection pool, <CODE>false</CODE> otherwise.
*/
- public boolean isConnectionRegistered(InitialLdapContext ctx) {
+ public boolean isConnectionRegistered(ConnectionWrapper conn) {
for (String key : connectionTable.keySet())
{
ConnectionRecord cr = connectionTable.get(key);
- HostPort hostPort = getHostPort(ctx);
- HostPort crHostPort = getHostPort(cr.ctx);
- if (cr.ctx != null
- && hostPort.equals(crHostPort)
- && getBindDN(cr.ctx).equals(getBindDN(ctx))
- && getBindPassword(cr.ctx).equals(getBindPassword(ctx))
- && isSSL(cr.ctx) == isSSL(ctx)
- && isStartTLS(cr.ctx) == isStartTLS(ctx)) {
+ if (cr.conn != null
+ && conn.getHostPort().equals(cr.conn.getHostPort())
+ && cr.conn.getBindDn().equals(conn.getBindDn())
+ && cr.conn.getBindPassword().equals(conn.getBindPassword())
+ && cr.conn.isSSL() == conn.isSSL()
+ && cr.conn.isStartTLS() == conn.isStartTLS())
+ {
return true;
}
}
@@ -101,14 +100,14 @@
/**
* Registers a connection in this connection pool.
- * @param ctx the connection to be registered.
+ * @param conn the connection to be registered.
*/
- public void registerConnection(InitialLdapContext ctx) {
- registerAuth(ctx);
- LDAPURL url = makeLDAPUrl(ctx);
+ public void registerConnection(ConnectionWrapper conn) {
+ registerAuth(conn);
+ LDAPURL url = makeLDAPUrl(conn);
String key = makeKeyFromLDAPUrl(url);
ConnectionRecord cr = new ConnectionRecord();
- cr.ctx = ctx;
+ cr.conn = conn;
cr.counter = 1;
cr.disconnectAfterUse = false;
connectionTable.put(key, cr);
@@ -116,13 +115,16 @@
/**
* Unregisters a connection from this connection pool.
- * @param ctx the connection to be unregistered.
- * @throws NamingException if there is a problem unregistering the connection.
+ *
+ * @param conn
+ * the connection to be unregistered.
+ * @throws NamingException
+ * if there is a problem unregistering the connection.
*/
- public void unregisterConnection(InitialLdapContext ctx)
+ public void unregisterConnection(ConnectionWrapper conn)
throws NamingException
{
- LDAPURL url = makeLDAPUrl(ctx);
+ LDAPURL url = makeLDAPUrl(conn);
unRegisterAuth(url);
String key = makeKeyFromLDAPUrl(url);
connectionTable.remove(key);
@@ -154,7 +156,7 @@
* @return a connection to the provided LDAP URL.
* @throws NamingException if there was an error connecting.
*/
- public InitialLdapContext getConnection(LDAPURL ldapUrl)
+ public ConnectionWrapper getConnection(LDAPURL ldapUrl)
throws NamingException {
String key = makeKeyFromLDAPUrl(ldapUrl);
ConnectionRecord cr;
@@ -163,7 +165,7 @@
cr = connectionTable.get(key);
if (cr == null) {
cr = new ConnectionRecord();
- cr.ctx = null;
+ cr.conn = null;
cr.counter = 1;
cr.disconnectAfterUse = false;
connectionTable.put(key, cr);
@@ -175,7 +177,7 @@
synchronized(cr) {
try {
- if (cr.ctx == null) {
+ if (cr.conn == null) {
boolean registerAuth = false;
AuthRecord authRecord = authTable.get(key);
if (authRecord == null)
@@ -184,8 +186,8 @@
authRecord = authTable.values().iterator().next();
registerAuth = true;
}
- cr.ctx = createLDAPConnection(ldapUrl, authRecord);
- cr.ctx.setRequestControls(requestControls);
+ cr.conn = createLDAPConnection(ldapUrl, authRecord);
+ cr.conn.getLdapContext().setRequestControls(requestControls);
if (registerAuth)
{
authTable.put(key, authRecord);
@@ -203,7 +205,7 @@
}
}
- return cr.ctx;
+ return cr.conn;
}
/**
@@ -218,28 +220,28 @@
requestControls = ctls;
for (ConnectionRecord cr : connectionTable.values())
{
- if (cr.ctx != null)
+ if (cr.conn != null)
{
- cr.ctx.setRequestControls(requestControls);
+ cr.conn.getLdapContext().setRequestControls(requestControls);
}
}
}
/**
- * Release an LDAPConnection created by getConnection().
- * The connection should be considered as virtually disconnected
- * and not be used anymore.
- * @param ctx the connection to be released.
+ * Release an LDAPConnection created by getConnection(). The connection should be considered as
+ * virtually disconnected and not be used anymore.
+ *
+ * @param conn
+ * the connection to be released.
*/
- public synchronized void releaseConnection(InitialLdapContext ctx) {
-
+ public synchronized void releaseConnection(ConnectionWrapper conn) {
String targetKey = null;
ConnectionRecord targetRecord = null;
synchronized(this) {
for (String key : connectionTable.keySet()) {
ConnectionRecord cr = connectionTable.get(key);
- if (cr.ctx == ctx) {
+ if (cr.conn == conn) {
targetKey = key;
targetRecord = cr;
if (targetKey != null)
@@ -279,7 +281,7 @@
* provided authentication (for testing purposes).
* @throws NamingException if an error occurs connecting.
*/
- private void registerAuth(LDAPURL ldapUrl, String dn, String pw,
+ private void registerAuth(LDAPURL ldapUrl, DN dn, String pw,
boolean connect) throws NamingException {
String key = makeKeyFromLDAPUrl(ldapUrl);
@@ -288,8 +290,7 @@
ar.password = pw;
if (connect) {
- InitialLdapContext ctx = createLDAPConnection(ldapUrl, ar);
- ctx.close();
+ createLDAPConnection(ldapUrl, ar).close();
}
synchronized(this) {
@@ -313,13 +314,12 @@
* Register authentication data from an existing connection.
* This routine recreates the LDAP URL corresponding to
* the connection and passes it to registerAuth(LDAPURL).
- * @param ctx the connection that we retrieve the authentication information
- * from.
+ * @param conn the connection that we retrieve the authentication information from.
*/
- private void registerAuth(InitialLdapContext ctx) {
- LDAPURL url = makeLDAPUrl(ctx);
+ private void registerAuth(ConnectionWrapper conn) {
+ LDAPURL url = makeLDAPUrl(conn);
try {
- registerAuth(url, getBindDN(ctx), getBindPassword(ctx), false);
+ registerAuth(url, conn.getBindDn(), conn.getBindPassword(), false);
}
catch (NamingException x) {
throw new RuntimeException("Bug");
@@ -331,8 +331,7 @@
* Unregister authentication data.
* If for the given url there's a connection, try to bind as anonymous.
* If unbind fails throw NamingException.
- * @param ldapUrl the url associated with the authentication to be
- * unregistered.
+ * @param ldapUrl the url associated with the authentication to be unregistered.
* @throws NamingException if the unbind fails.
*/
private void unRegisterAuth(LDAPURL ldapUrl) throws NamingException {
@@ -351,14 +350,7 @@
{
String key = makeKeyFromRecord(cr);
connectionTable.remove(key);
- try
- {
- cr.ctx.close();
- }
- catch (NamingException x)
- {
- // Bizarre. However it's not really a problem here.
- }
+ cr.conn.close();
}
/** Notifies the listeners that a referral authentication change happened. */
@@ -387,8 +379,8 @@
* @return the key to be used in Maps for the provided connection record.
*/
private static String makeKeyFromRecord(ConnectionRecord rec) {
- String protocol = ConnectionUtils.isSSL(rec.ctx) ? "LDAPS" : "LDAP";
- return protocol + ":" + getHostPort(rec.ctx);
+ String protocol = rec.conn.isSSL() ? "LDAPS" : "LDAP";
+ return protocol + ":" + rec.conn.getHostPort();
}
/**
@@ -399,21 +391,12 @@
* @return a connection.
* @throws NamingException if an error occurs when connecting.
*/
- private InitialLdapContext createLDAPConnection(LDAPURL ldapUrl,
- AuthRecord ar) throws NamingException
+ private ConnectionWrapper createLDAPConnection(LDAPURL ldapUrl, AuthRecord ar) throws NamingException
{
- // Take the base DN out of the URL and only keep the protocol, host and port
- ldapUrl = new LDAPURL(ldapUrl.getScheme(), ldapUrl.getHost(),
- ldapUrl.getPort(), (DN)null, null, null, null, null);
-
- if (isSecureLDAPUrl(ldapUrl))
- {
- return ConnectionUtils.createLdapsContext(ldapUrl.toString(), ar.dn,
- ar.password, getConnectTimeout(), null,
- getTrustManager(), getKeyManager());
- }
- return ConnectionUtils.createLdapContext(ldapUrl.toString(), ar.dn,
- ar.password, getConnectTimeout(), null);
+ final HostPort hostPort = new HostPort(ldapUrl.getHost(), ldapUrl.getPort());
+ final Type connectiontype = isSecureLDAPUrl(ldapUrl) ? LDAPS : LDAP;
+ return new ConnectionWrapper(hostPort, connectiontype, ar.dn.toString(), ar.password,
+ getConnectTimeout(), getTrustManager(), getKeyManager());
}
/**
@@ -474,8 +457,8 @@
return !LDAPURL.DEFAULT_SCHEME.equalsIgnoreCase(url.getScheme());
}
- private LDAPURL makeLDAPUrl(InitialLdapContext ctx) {
- return makeLDAPUrl(ConnectionUtils.getHostPort(ctx), "", isSSL(ctx));
+ private LDAPURL makeLDAPUrl(ConnectionWrapper conn) {
+ return makeLDAPUrl(conn.getHostPort(), "", conn.isSSL());
}
/**
@@ -521,13 +504,13 @@
/** A structure representing authentication data. */
class AuthRecord {
- String dn;
+ DN dn;
String password;
}
/** A structure representing an active connection. */
class ConnectionRecord {
- InitialLdapContext ctx;
+ ConnectionWrapper conn;
int counter;
boolean disconnectAfterUse;
}
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/NodeRefresher.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/NodeRefresher.java
index 628c663..9319741 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/NodeRefresher.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/NodeRefresher.java
@@ -16,8 +16,6 @@
*/
package org.opends.guitools.controlpanel.browser;
-import static org.opends.admin.ads.util.ConnectionUtils.getHostPort;
-import static org.opends.admin.ads.util.ConnectionUtils.isSSL;
import static org.opends.messages.AdminToolMessages.*;
import java.util.ArrayList;
@@ -31,7 +29,6 @@
import javax.naming.SizeLimitExceededException;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
-import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapName;
import javax.swing.SwingUtilities;
import javax.swing.tree.TreeNode;
@@ -41,6 +38,7 @@
import org.forgerock.opendj.ldap.RDN;
import org.forgerock.opendj.ldap.SearchScope;
import org.opends.admin.ads.util.ConnectionUtils;
+import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
import org.opends.messages.AdminToolMessages;
import org.opends.server.schema.SchemaConstants;
@@ -304,18 +302,23 @@
/**
* Performs the search in the case the user specified a custom filter.
- * @param node the parent node we perform the search from.
- * @param ctx the connection to be used.
- * @throws NamingException if a problem occurred.
+ *
+ * @param node
+ * the parent node we perform the search from.
+ * @param conn
+ * the connection to be used.
+ * @throws NamingException
+ * if a problem occurred.
*/
- private void searchForCustomFilter(BasicNode node, InitialLdapContext ctx)
+ private void searchForCustomFilter(BasicNode node, ConnectionWrapper conn)
throws NamingException
{
SearchControls ctls = controller.getBasicSearchControls();
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
ctls.setReturningAttributes(new String[] { SchemaConstants.NO_ATTRIBUTES });
ctls.setCountLimit(1);
- NamingEnumeration<SearchResult> s = ctx.search(new LdapName(node.getDN()),
+ NamingEnumeration<SearchResult> s =
+ conn.getLdapContext().search(new LdapName(node.getDN()),
controller.getFilter(),
ctls);
try
@@ -347,17 +350,17 @@
/**
* Performs the search in the case the user specified a custom filter.
* @param dn the parent DN we perform the search from.
- * @param ctx the connection to be used.
+ * @param conn the connection to be used.
* @throws NamingException if a problem occurred.
*/
- private void searchForCustomFilter(String dn, InitialLdapContext ctx)
+ private void searchForCustomFilter(String dn, ConnectionWrapper conn)
throws NamingException
{
SearchControls ctls = controller.getBasicSearchControls();
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
ctls.setReturningAttributes(new String[]{});
ctls.setCountLimit(1);
- NamingEnumeration<SearchResult> s = ctx.search(new LdapName(dn),
+ NamingEnumeration<SearchResult> s = conn.getLdapContext().search(new LdapName(dn),
controller.getFilter(),
ctls);
try
@@ -389,15 +392,15 @@
/** Read the local entry associated to the current node. */
private void runReadLocalEntry() throws SearchAbandonException {
BasicNode node = getNode();
- InitialLdapContext ctx = null;
+ ConnectionWrapper conn = null;
try {
- ctx = controller.findConnectionForLocalEntry(node);
+ conn = controller.findConnectionForLocalEntry(node);
- if (ctx != null) {
+ if (conn != null) {
if (useCustomFilter())
{
// Check that the entry verifies the filter
- searchForCustomFilter(node, ctx);
+ searchForCustomFilter(node, conn);
}
SearchControls ctls = controller.getBasicSearchControls();
@@ -405,7 +408,7 @@
ctls.setSearchScope(SearchControls.OBJECT_SCOPE);
NamingEnumeration<SearchResult> s =
- ctx.search(new LdapName(node.getDN()),
+ conn.getLdapContext().search(new LdapName(node.getDN()),
controller.getObjectSearchFilter(),
ctls);
try
@@ -433,8 +436,8 @@
throwAbandonIfNeeded(x);
}
finally {
- if (ctx != null) {
- controller.releaseLDAPConnection(ctx);
+ if (conn != null) {
+ controller.releaseLDAPConnection(conn);
}
}
}
@@ -483,19 +486,19 @@
int i = 0;
while (i < referral.length && entry == null)
{
- InitialLdapContext ctx = null;
+ ConnectionWrapper conn = null;
try {
url = LDAPURL.decode(referral[i], false);
if (url.getHost() == null)
{
// Use the local server connection.
- ctx = controller.getUserDataConnection();
- HostPort hostPort = getHostPort(ctx);
+ conn = controller.getUserDataConnection();
+ HostPort hostPort = conn.getHostPort();
url.setHost(hostPort.getHost());
url.setPort(hostPort.getPort());
- url.setScheme(isSSL(ctx) ? "ldaps" : "ldap");
+ url.setScheme(conn.isSSL() ? "ldaps" : "ldap");
}
- ctx = connectionPool.getConnection(url);
+ conn = connectionPool.getConnection(url);
remoteDn = url.getRawBaseDN();
if (remoteDn == null || "".equals(remoteDn))
{
@@ -515,7 +518,7 @@
if (useCustomFilter() && url.getScope() == SearchScope.BASE_OBJECT)
{
// Check that the entry verifies the filter
- searchForCustomFilter(remoteDn, ctx);
+ searchForCustomFilter(remoteDn, conn);
}
int scope = getJNDIScope(url);
@@ -525,7 +528,7 @@
ctls.setReturningAttributes(controller.getAttrsForBlackSearch());
ctls.setSearchScope(scope);
ctls.setCountLimit(1);
- NamingEnumeration<SearchResult> sr = ctx.search(remoteDn,
+ NamingEnumeration<SearchResult> sr = conn.getLdapContext().search(remoteDn,
filter,
ctls);
try
@@ -573,8 +576,8 @@
lastExceptionArg = referral[i];
}
finally {
- if (ctx != null) {
- connectionPool.releaseConnection(ctx);
+ if (conn != null) {
+ connectionPool.releaseConnection(conn);
}
}
i = i + 1;
@@ -645,7 +648,7 @@
*/
private void runDetectChildrenManually() throws SearchAbandonException {
BasicNode parentNode = getNode();
- InitialLdapContext ctx = null;
+ ConnectionWrapper conn = null;
NamingEnumeration<SearchResult> searchResults = null;
try {
@@ -664,8 +667,8 @@
ctls.setSearchScope(SearchControls.OBJECT_SCOPE);
}
// Send an LDAP search
- ctx = controller.findConnectionForDisplayedEntry(parentNode);
- searchResults = ctx.search(
+ conn = controller.findConnectionForDisplayedEntry(parentNode);
+ searchResults = conn.getLdapContext().search(
new LdapName(controller.findBaseDNForChildEntries(parentNode)),
controller.getChildSearchFilter(),
ctls);
@@ -689,8 +692,8 @@
throwAbandonIfNeeded(x);
}
finally {
- if (ctx != null) {
- controller.releaseLDAPConnection(ctx);
+ if (conn != null) {
+ controller.releaseLDAPConnection(conn);
}
if (searchResults != null)
{
@@ -729,7 +732,7 @@
* @throws SearchAbandonException if an error occurs.
*/
private void runSearchChildren() throws SearchAbandonException {
- InitialLdapContext ctx = null;
+ ConnectionWrapper conn = null;
BasicNode parentNode = getNode();
parentNode.setSizeLimitReached(false);
@@ -745,7 +748,7 @@
ctls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
}
ctls.setReturningAttributes(controller.getAttrsForRedSearch());
- ctx = controller.findConnectionForDisplayedEntry(parentNode);
+ conn = controller.findConnectionForDisplayedEntry(parentNode);
String parentDn = controller.findBaseDNForChildEntries(parentNode);
int parentComponents;
try
@@ -758,7 +761,7 @@
throw new RuntimeException("Error decoding dn: "+parentDn+" . "+t,
t);
}
- NamingEnumeration<SearchResult> entries = ctx.search(
+ NamingEnumeration<SearchResult> entries = conn.getLdapContext().search(
new LdapName(parentDn),
controller.getChildSearchFilter(),
ctls);
@@ -838,8 +841,7 @@
}
if (mustAddParent)
{
- SearchResult parentResult = searchManuallyEntry(ctx,
- parentToAddDN.toString());
+ SearchResult parentResult = searchManuallyEntry(conn, parentToAddDN.toString());
childEntries.add(parentResult);
}
}
@@ -874,9 +876,9 @@
throwAbandonIfNeeded(x);
}
finally {
- if (ctx != null)
+ if (conn != null)
{
- controller.releaseLDAPConnection(ctx);
+ controller.releaseLDAPConnection(conn);
}
}
}
@@ -904,18 +906,18 @@
/**
* Returns the entry for the given dn.
* The code assumes that the request controls are set in the connection.
- * @param ctx the connection to be used.
+ * @param conn the connection to be used.
* @param dn the DN of the entry to be searched.
* @throws NamingException if an error occurs.
*/
- private SearchResult searchManuallyEntry(InitialLdapContext ctx, String dn)
+ private SearchResult searchManuallyEntry(ConnectionWrapper conn, String dn)
throws NamingException
{
// Send an LDAP search
SearchControls ctls = controller.getBasicSearchControls();
ctls.setSearchScope(SearchControls.OBJECT_SCOPE);
ctls.setReturningAttributes(controller.getAttrsForRedSearch());
- NamingEnumeration<SearchResult> entries = ctx.search(
+ NamingEnumeration<SearchResult> entries = conn.getLdapContext().search(
new LdapName(dn),
controller.getObjectSearchFilter(),
ctls);
@@ -1118,10 +1120,10 @@
if (dn2.isSuperiorOrEqualTo(dn1))
{
HostPort urlHostPort = new HostPort(url.getHost(), url.getPort());
- checkSucceeded = urlHostPort.equals(getHostPort(controller.getConfigurationConnection()));
+ checkSucceeded = urlHostPort.equals(controller.getConfigurationConnection().getHostPort());
if (checkSucceeded)
{
- checkSucceeded = urlHostPort.equals(getHostPort(controller.getUserDataConnection()));
+ checkSucceeded = urlHostPort.equals(controller.getUserDataConnection().getHostPort());
}
}
}
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 8ba4da1..8357e64 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
@@ -24,6 +24,7 @@
import static org.opends.server.tools.ConfigureWindowsService.*;
import java.io.File;
+import java.io.IOException;
import java.net.InetAddress;
import java.util.Collection;
import java.util.Collections;
@@ -34,14 +35,12 @@
import java.util.SortedSet;
import javax.naming.NamingException;
-import javax.naming.ldap.InitialLdapContext;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.config.ConfigurationFramework;
import org.forgerock.opendj.config.server.ConfigException;
import org.opends.admin.ads.util.ApplicationTrustManager;
-import org.opends.admin.ads.util.ConnectionUtils;
import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.guitools.controlpanel.browser.IconPool;
import org.opends.guitools.controlpanel.browser.LDAPConnectionPool;
@@ -82,7 +81,7 @@
private final Set<Task> tasks = new HashSet<>();
private ConnectionWrapper connWrapper;
- private InitialLdapContext userDataCtx;
+ private ConnectionWrapper userDataConn;
private final LDAPConnectionPool connectionPool = new LDAPConnectionPool();
/** Used by the browsers. */
private final IconPool iconPool = new IconPool();
@@ -319,36 +318,31 @@
/**
* Sets the dir context to be used by the ControlPanelInfo to retrieve
* user data.
- * @param ctx the connection.
+ * @param conn the connection.
* @throws NamingException if there is a problem updating the connection pool.
*/
- public void setUserDataDirContext(InitialLdapContext ctx)
- throws NamingException
+ public void setUserDataDirContext(ConnectionWrapper conn) throws NamingException
{
- if (userDataCtx != null)
+ if (userDataConn != null)
{
- unregisterConnection(connectionPool, ctx);
+ unregisterConnection(connectionPool, conn);
}
- this.userDataCtx = ctx;
- if (ctx != null)
+ this.userDataConn = conn;
+ if (conn != null)
{
- InitialLdapContext cloneLdc =
- ConnectionUtils.cloneInitialLdapContext(userDataCtx,
- getConnectTimeout(),
- getTrustManager(), null);
- connectionPool.registerConnection(cloneLdc);
+ ConnectionWrapper cloneConn = cloneConnectionWrapper(userDataConn, getConnectTimeout(), getTrustManager(), null);
+ connectionPool.registerConnection(cloneConn);
}
}
/**
- * Returns the dir context to be used by the ControlPanelInfo to retrieve
- * user data.
- * @return the dir context to be used by the ControlPanelInfo to retrieve
- * user data.
+ * Returns the connection to be used by the ControlPanelInfo to retrieve user data.
+ *
+ * @return the connection to be used by the ControlPanelInfo to retrieve user data.
*/
- public InitialLdapContext getUserDataDirContext()
+ public ConnectionWrapper getUserDataDirContext()
{
- return userDataCtx;
+ return userDataConn;
}
/**
@@ -436,11 +430,11 @@
{
StaticUtils.close(connWrapper);
connWrapper = null;
- if (userDataCtx != null)
+ if (userDataConn != null)
{
unregisterConnection(connectionPool, null);
- StaticUtils.close(userDataCtx);
- userDataCtx = null;
+ StaticUtils.close(userDataConn);
+ userDataConn = null;
}
}
if (isLocal)
@@ -474,7 +468,7 @@
getConnectTimeout(), getTrustManager());
}
}
- catch (ConfigReadException | NamingException cre)
+ catch (ConfigReadException | NamingException | IOException ignored)
{
// Ignore: we will ask the user for credentials.
}
@@ -497,7 +491,7 @@
Utilities.initializeConfigurationFramework();
reader = newRemoteConfigReader();
- boolean connectionWorks = checkConnections(connWrapper, userDataCtx);
+ boolean connectionWorks = checkConnections(connWrapper, userDataConn);
if (!connectionWorks)
{
if (isLocal)
@@ -511,9 +505,9 @@
}
StaticUtils.close(connWrapper);
this.connWrapper = null;
- unregisterConnection(connectionPool, connWrapper.getLdapContext());
- StaticUtils.close(userDataCtx);
- userDataCtx = null;
+ unregisterConnection(connectionPool, connWrapper);
+ StaticUtils.close(userDataConn);
+ userDataConn = null;
}
}
@@ -610,13 +604,13 @@
return status;
}
- private void unregisterConnection(LDAPConnectionPool connectionPool, InitialLdapContext userDataCtx)
+ private void unregisterConnection(LDAPConnectionPool connectionPool, ConnectionWrapper userDataConn)
{
- if (connectionPool.isConnectionRegistered(userDataCtx))
+ if (connectionPool.isConnectionRegistered(userDataConn))
{
try
{
- connectionPool.unregisterConnection(userDataCtx);
+ connectionPool.unregisterConnection(userDataConn);
}
catch (Throwable t)
{
@@ -1194,7 +1188,7 @@
return adminPort1 == adminPort2;
}
- private boolean checkConnections(ConnectionWrapper conn, InitialLdapContext userCtx)
+ private boolean checkConnections(ConnectionWrapper conn, ConnectionWrapper userConn)
{
// Check the connection
int nMaxErrors = 5;
@@ -1203,9 +1197,9 @@
try
{
Utilities.ping(conn);
- if (userCtx != null)
+ if (userConn != null)
{
- Utilities.pingDirContext(userCtx);
+ Utilities.ping(userConn);
}
return true;
}
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteEntryTask.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteEntryTask.java
index 76dc89d..eb72da3 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteEntryTask.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteEntryTask.java
@@ -34,11 +34,13 @@
import javax.naming.directory.SearchResult;
import javax.naming.ldap.BasicControl;
import javax.naming.ldap.Control;
-import javax.naming.ldap.InitialLdapContext;
import javax.swing.SwingUtilities;
import javax.swing.tree.TreePath;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.opendj.ldap.DN;
import org.opends.admin.ads.util.ConnectionUtils;
+import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.guitools.controlpanel.browser.BrowserController;
import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
import org.opends.guitools.controlpanel.datamodel.BaseDNDescriptor;
@@ -49,9 +51,7 @@
import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
import org.opends.guitools.controlpanel.ui.nodes.BrowserNodeInfo;
import org.opends.guitools.controlpanel.util.Utilities;
-import org.forgerock.i18n.LocalizableMessage;
import org.opends.server.schema.SchemaConstants;
-import org.forgerock.opendj.ldap.DN;
import org.opends.server.types.DirectoryException;
import org.opends.server.util.ServerConstants;
@@ -195,16 +195,15 @@
}
if (!isDnDeleted)
{
- InitialLdapContext ctx =
- controller.findConnectionForDisplayedEntry(node);
+ ConnectionWrapper conn = controller.findConnectionForDisplayedEntry(node);
useAdminCtx = controller.isConfigurationNode(node);
if (node.hasSubOrdinates())
{
- deleteSubtreeWithControl(ctx, dn, path, toNotify);
+ deleteSubtreeWithControl(conn, dn, path, toNotify);
}
else
{
- deleteSubtreeRecursively(ctx, dn, path, toNotify);
+ deleteSubtreeRecursively(conn, dn, path, toNotify);
}
alreadyDeleted.add(dn);
}
@@ -282,7 +281,7 @@
}
}
- private void deleteSubtreeRecursively(InitialLdapContext ctx, DN dnToRemove,
+ private void deleteSubtreeRecursively(ConnectionWrapper conn, DN dnToRemove,
TreePath path, ArrayList<BrowserNodeInfo> toNotify)
throws NamingException, DirectoryException
{
@@ -324,7 +323,7 @@
ctls.setReturningAttributes(
new String[] { SchemaConstants.NO_ATTRIBUTES });
NamingEnumeration<SearchResult> entryDNs =
- ctx.search(Utilities.getJNDIName(dnToRemove.toString()), filter, ctls);
+ conn.getLdapContext().search(Utilities.getJNDIName(dnToRemove.toString()), filter, ctls);
DN entryDNFound = dnToRemove;
try
@@ -337,7 +336,7 @@
CustomSearchResult res =
new CustomSearchResult(sr, dnToRemove.toString());
entryDNFound = DN.valueOf(res.getDN());
- deleteSubtreeRecursively(ctx, entryDNFound, null, toNotify);
+ deleteSubtreeRecursively(conn, entryDNFound, null, toNotify);
}
}
}
@@ -352,7 +351,7 @@
try
{
- ctx.destroySubcontext(Utilities.getJNDIName(dnToRemove.toString()));
+ conn.getLdapContext().destroySubcontext(Utilities.getJNDIName(dnToRemove.toString()));
if (path != null)
{
toNotify.add(controller.getNodeInfoFromPath(path));
@@ -392,7 +391,7 @@
}
}
- private void deleteSubtreeWithControl(InitialLdapContext ctx, DN dn,
+ private void deleteSubtreeWithControl(ConnectionWrapper conn, DN dn,
TreePath path, ArrayList<BrowserNodeInfo> toNotify)
throws NamingException
{
@@ -419,22 +418,22 @@
// Use a copy of the dir context since we are using an specific
// control to delete the subtree and this can cause
// synchronization problems when the tree is refreshed.
- InitialLdapContext ctx1 = null;
+ ConnectionWrapper conn1 = null;
try
{
- ctx1 = ConnectionUtils.cloneInitialLdapContext(ctx,
+ conn1 = ConnectionUtils.cloneConnectionWrapper(conn,
getInfo().getConnectTimeout(),
getInfo().getTrustManager(), null);
Control[] ctls = {
new BasicControl(ServerConstants.OID_SUBTREE_DELETE_CONTROL)};
- ctx1.setRequestControls(ctls);
- ctx1.destroySubcontext(Utilities.getJNDIName(dn.toString()));
+ conn1.getLdapContext().setRequestControls(ctls);
+ conn1.getLdapContext().destroySubcontext(Utilities.getJNDIName(dn.toString()));
}
finally
{
try
{
- ctx1.close();
+ conn1.close();
}
catch (Throwable th)
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
index 39dc729..fe6753a 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
@@ -32,7 +32,6 @@
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.DirContext;
import javax.naming.directory.ModificationItem;
-import javax.naming.ldap.InitialLdapContext;
import javax.swing.SwingUtilities;
import javax.swing.tree.TreePath;
@@ -43,6 +42,7 @@
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.RDN;
import org.forgerock.opendj.ldap.schema.AttributeType;
+import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.guitools.controlpanel.browser.BrowserController;
import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
import org.opends.guitools.controlpanel.datamodel.BaseDNDescriptor;
@@ -205,7 +205,7 @@
try
{
BasicNode node = (BasicNode)treePath.getLastPathComponent();
- InitialLdapContext ctx = controller.findConnectionForDisplayedEntry(node);
+ ConnectionWrapper conn = controller.findConnectionForDisplayedEntry(node);
useAdminCtx = controller.isConfigurationNode(node);
if (!mustRename)
{
@@ -228,7 +228,7 @@
}
});
- ctx.modifyAttributes(Utilities.getJNDIName(oldEntry.getDN()), mods);
+ conn.getLdapContext().modifyAttributes(Utilities.getJNDIName(oldEntry.getDN()), mods);
SwingUtilities.invokeLater(new Runnable()
{
@@ -248,7 +248,7 @@
}
else
{
- modifyAndRename(ctx, oldDn, oldEntry, newEntry, modifications);
+ modifyAndRename(conn, oldDn, oldEntry, newEntry, modifications);
}
state = State.FINISHED_SUCCESSFULLY;
}
@@ -314,7 +314,7 @@
/**
* Modifies and renames the entry.
- * @param ctx the connection to the server.
+ * @param conn the connection to the server.
* @param oldDN the oldDN of the entry.
* @param originalEntry the original entry.
* @param newEntry the new entry.
@@ -323,7 +323,7 @@
* @throws CannotRenameException if we cannot perform the modification.
* @throws NamingException if an error performing the modification occurs.
*/
- private void modifyAndRename(DirContext ctx, final DN oldDN,
+ private void modifyAndRename(ConnectionWrapper conn, final DN oldDN,
CustomSearchResult originalEntry, final Entry newEntry,
final ArrayList<ModificationItem> originalMods)
throws CannotRenameException, NamingException
@@ -353,7 +353,7 @@
}
});
- ctx.rename(Utilities.getJNDIName(oldDn.toString()),
+ conn.getLdapContext().rename(Utilities.getJNDIName(oldDn.toString()),
Utilities.getJNDIName(newEntry.getName().toString()));
final TreePath[] newPath = {null};
@@ -392,7 +392,7 @@
}
});
- ctx.modifyAttributes(Utilities.getJNDIName(newEntry.getName().toString()), mods);
+ conn.getLdapContext().modifyAttributes(Utilities.getJNDIName(newEntry.getName().toString()), mods);
SwingUtilities.invokeLater(new Runnable()
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewEntryTask.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewEntryTask.java
index 7feffcd..b19edb3 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewEntryTask.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewEntryTask.java
@@ -28,12 +28,13 @@
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
-import javax.naming.ldap.InitialLdapContext;
import javax.swing.SwingUtilities;
import javax.swing.tree.TreePath;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.ldap.ByteString;
+import org.forgerock.opendj.ldap.DN;
+import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.guitools.controlpanel.browser.BrowserController;
import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
import org.opends.guitools.controlpanel.datamodel.BaseDNDescriptor;
@@ -44,7 +45,6 @@
import org.opends.guitools.controlpanel.ui.nodes.BrowserNodeInfo;
import org.opends.guitools.controlpanel.util.Utilities;
import org.opends.server.config.ConfigConstants;
-import org.forgerock.opendj.ldap.DN;
import org.opends.server.types.Entry;
/** The task launched when we must create an entry. */
@@ -157,16 +157,16 @@
try
{
- InitialLdapContext ctx;
+ ConnectionWrapper conn;
if (parentNode != null)
{
- ctx = controller.findConnectionForDisplayedEntry(parentNode);
+ conn = controller.findConnectionForDisplayedEntry(parentNode);
useAdminCtx = controller.isConfigurationNode(parentNode);
}
else
{
- ctx = getInfo().getConnection().getLdapContext();
+ conn = getInfo().getConnection();
useAdminCtx = true;
}
BasicAttributes attrs = new BasicAttributes();
@@ -206,7 +206,7 @@
}
});
- ctx.createSubcontext(Utilities.getJNDIName(newEntry.getName().toString()),
+ conn.getLdapContext().createSubcontext(Utilities.getJNDIName(newEntry.getName().toString()),
attrs);
SwingUtilities.invokeLater(new Runnable()
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java
index c9f5e04..5a3a226 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java
@@ -29,9 +29,11 @@
import javax.naming.NamingEnumeration;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
-import javax.naming.ldap.InitialLdapContext;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.opendj.ldap.DN;
import org.opends.admin.ads.util.ConnectionUtils;
+import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.guitools.controlpanel.browser.BrowserController;
import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
import org.opends.guitools.controlpanel.datamodel.BaseDNDescriptor;
@@ -39,10 +41,8 @@
import org.opends.guitools.controlpanel.ui.ProgressDialog;
import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
import org.opends.guitools.controlpanel.util.Utilities;
-import org.forgerock.i18n.LocalizableMessage;
import org.opends.server.config.ConfigConstants;
import org.opends.server.tools.LDAPPasswordModify;
-import org.forgerock.opendj.ldap.DN;
/** The task called when we want to reset the password of the user. */
public class ResetUserPasswordTask extends Task
@@ -85,11 +85,10 @@
try
{
- InitialLdapContext ctx =
- controller.findConnectionForDisplayedEntry(node);
- if (ctx != null && isBoundAs(dn, ctx))
+ ConnectionWrapper conn = controller.findConnectionForDisplayedEntry(node);
+ if (conn != null && isBoundAs(dn, conn))
{
- currentPassword = ConnectionUtils.getBindPassword(ctx).toCharArray();
+ currentPassword = conn.getBindPassword().toCharArray();
}
}
catch (Throwable t)
@@ -202,7 +201,7 @@
String.valueOf(newPassword));
if (getInfo().getUserDataDirContext() != null)
{
- getInfo().getUserDataDirContext().addToEnvironment(
+ getInfo().getUserDataDirContext().getLdapContext().addToEnvironment(
Context.SECURITY_CREDENTIALS,
String.valueOf(newPassword));
}
@@ -223,17 +222,16 @@
* particular DN (we might be binding using a value specified in
* ds-cfg-alternate-bind-dn).
* @param dn the DN.
- * @param ctx the connection that we are using to modify the password.
+ * @param conn the connection that we are using to modify the password.
* @return <CODE>true</CODE> if we are bound using the provided entry.
*/
- private boolean isBoundAs(DN dn, InitialLdapContext ctx)
+ private boolean isBoundAs(DN dn, ConnectionWrapper conn)
{
boolean isBoundAs = false;
DN bindDN = DN.rootDN();
try
{
- String b = ConnectionUtils.getBindDN(ctx);
- bindDN = DN.valueOf(b);
+ bindDN = conn.getBindDn();
isBoundAs = dn.equals(bindDN);
}
catch (Throwable t)
@@ -251,7 +249,7 @@
String attrName = ConfigConstants.ATTR_ROOTDN_ALTERNATE_BIND_DN;
ctls.setReturningAttributes(new String[] {attrName});
NamingEnumeration<SearchResult> entries =
- ctx.search(Utilities.getJNDIName(dn.toString()), filter, ctls);
+ conn.getLdapContext().search(Utilities.getJNDIName(dn.toString()), filter, ctls);
try
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/Task.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/Task.java
index 11d737d..89d9918 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/Task.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/Task.java
@@ -34,12 +34,11 @@
import javax.naming.directory.Attribute;
import javax.naming.directory.DirContext;
import javax.naming.directory.ModificationItem;
-import javax.naming.ldap.InitialLdapContext;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.DN;
-import org.opends.admin.ads.util.ConnectionUtils;
+import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
import org.opends.guitools.controlpanel.event.ConfigurationElementCreatedEvent;
@@ -699,29 +698,23 @@
protected List<String> getConnectionCommandLineArguments(
boolean useAdminConnector, boolean addConnectionTypeParameters)
{
- ArrayList<String> args = new ArrayList<>();
- InitialLdapContext ctx;
+ ConnectionWrapper conn = useAdminConnector
+ ? getInfo().getConnection()
+ : getInfo().getUserDataDirContext();
- if (useAdminConnector)
+ List<String> args = new ArrayList<>();
+ if (isServerRunning() && conn != null)
{
- ctx = getInfo().getConnection().getLdapContext();
- }
- else
- {
- ctx = getInfo().getUserDataDirContext();
- }
- if (isServerRunning() && ctx != null)
- {
- HostPort hostPort = ConnectionUtils.getHostPort(ctx);
+ HostPort hostPort = conn.getHostPort();
String hostName = localHostName;
if (hostName == null || !getInfo().getServerDescriptor().isLocal())
{
hostName = hostPort.getHost();
}
- boolean isSSL = ConnectionUtils.isSSL(ctx);
- boolean isStartTLS = ConnectionUtils.isStartTLS(ctx);
- String bindDN = ConnectionUtils.getBindDN(ctx);
- String bindPwd = ConnectionUtils.getBindPassword(ctx);
+ boolean isSSL = conn.isSSL();
+ boolean isStartTLS = conn.isStartTLS();
+ String bindDN = conn.getBindDn().toString();
+ String bindPwd = conn.getBindPassword();
args.add("--hostName");
args.add(hostName);
args.add("--port");
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java
index 93ef43d..5f394d6 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java
@@ -32,6 +32,7 @@
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
+import java.io.IOException;
import java.net.URI;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
@@ -45,7 +46,6 @@
import java.util.TreeSet;
import javax.naming.NamingException;
-import javax.naming.ldap.InitialLdapContext;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.DefaultComboBoxModel;
@@ -147,7 +147,7 @@
private JLabel lNumberOfEntries;
private JLabel lNoMatchFound;
- private InitialLdapContext createdUserDataCtx;
+ private ConnectionWrapper createdUserDataConn;
/** The tree pane contained in this panel. */
protected TreePanel treePane;
/** The browser controller used to update the LDAP entry tree. */
@@ -1190,16 +1190,16 @@
try
{
ConnectionWrapper conn = getInfo().getConnection();
- InitialLdapContext ctx1 = controller.getConfigurationConnection();
- boolean setConnection = conn.getLdapContext() != ctx1;
+ ConnectionWrapper conn1 = controller.getConfigurationConnection();
+ boolean setConnection = conn != conn1;
updateNumSubordinateHacker(desc);
if (setConnection)
{
if (getInfo().getUserDataDirContext() == null)
{
- InitialLdapContext ctxUserData =
+ ConnectionWrapper connUserData =
createUserDataDirContext(conn.getBindDn().toString(), conn.getBindPassword());
- getInfo().setUserDataDirContext(ctxUserData);
+ getInfo().setUserDataDirContext(connUserData);
}
final NamingException[] fNe = { null };
Runnable runnable = new Runnable()
@@ -1240,16 +1240,16 @@
}
displayNodes = true;
}
- catch (NamingException ne)
+ catch (IOException | NamingException e)
{
errorTitle = INFO_CTRL_PANEL_ERROR_CONNECT_BROWSE_DETAILS.get();
- errorDetails = INFO_CTRL_PANEL_ERROR_CONNECT_BROWSE_SUMMARY.get(ne);
+ errorDetails = INFO_CTRL_PANEL_ERROR_CONNECT_BROWSE_SUMMARY.get(e);
displayErrorPane = true;
}
- catch (ConfigReadException cre)
+ catch (ConfigReadException e)
{
errorTitle = INFO_CTRL_PANEL_ERROR_CONNECT_BROWSE_DETAILS.get();
- errorDetails = INFO_CTRL_PANEL_ERROR_CONNECT_BROWSE_SUMMARY.get(cre.getMessageObject());
+ errorDetails = INFO_CTRL_PANEL_ERROR_CONNECT_BROWSE_SUMMARY.get(e.getMessageObject());
displayErrorPane = true;
}
}
@@ -1412,13 +1412,13 @@
* @throws ConfigReadException
* if an error occurs reading the configuration.
*/
- private InitialLdapContext createUserDataDirContext(final String bindDN, final String bindPassword)
- throws NamingException, ConfigReadException
+ private ConnectionWrapper createUserDataDirContext(final String bindDN, final String bindPassword)
+ throws NamingException, IOException, ConfigReadException
{
- createdUserDataCtx = null;
+ createdUserDataConn = null;
try
{
- createdUserDataCtx = Utilities.getUserDataDirContext(getInfo(), bindDN, bindPassword);
+ createdUserDataConn = Utilities.getUserDataDirContext(getInfo(), bindDN, bindPassword);
}
catch (NamingException ne)
{
@@ -1469,6 +1469,7 @@
{
final ConfigReadException[] fcre = { null };
final NamingException[] fne = { null };
+ final IOException[] fioe = { null };
try
{
SwingUtilities.invokeAndWait(new Runnable()
@@ -1488,6 +1489,10 @@
{
fne[0] = ne;
}
+ catch (IOException ioe)
+ {
+ fioe[0] = ioe;
+ }
}
});
}
@@ -1503,10 +1508,14 @@
{
throw fne[0];
}
+ if (fioe[0] != null)
+ {
+ throw fioe[0];
+ }
}
}
}
- return createdUserDataCtx;
+ return createdUserDataConn;
}
/**
@@ -1521,7 +1530,7 @@
* the bind password.
*/
private void handleCertificateException(UserDataCertificateException ce, String bindDN, String bindPassword)
- throws NamingException, ConfigReadException
+ throws NamingException, IOException, ConfigReadException
{
CertificateDialog dlg = new CertificateDialog(null, ce);
dlg.pack();
@@ -1537,7 +1546,7 @@
{
logger.info(LocalizableMessage.raw("Accepting certificate presented by host " + host));
getInfo().getTrustManager().acceptCertificate(chain, authType, host);
- createdUserDataCtx = createUserDataDirContext(bindDN, bindPassword);
+ createdUserDataConn = createUserDataDirContext(bindDN, bindPassword);
}
else
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java
index e7cefd9..2f0c80e 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java
@@ -44,7 +44,6 @@
import javax.naming.InterruptedNamingException;
import javax.naming.NamingException;
-import javax.naming.ldap.InitialLdapContext;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComponent;
@@ -66,6 +65,7 @@
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.opendj.ldap.schema.ObjectClass;
+import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.guitools.controlpanel.browser.NodeRefresher;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
import org.opends.guitools.controlpanel.datamodel.CustomSearchResult;
@@ -528,9 +528,8 @@
{
try
{
- InitialLdapContext ctx =
- controller.findConnectionForDisplayedEntry(node);
- LDAPEntryReader reader = new LDAPEntryReader(dn, ctx);
+ ConnectionWrapper conn = controller.findConnectionForDisplayedEntry(node);
+ LDAPEntryReader reader = new LDAPEntryReader(dn, conn);
reader.addEntryReadListener(entryPane);
// Required to update the browser controller properly if the entry is
// deleted.
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java
index ba20cd7..b6ce150 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java
@@ -28,7 +28,6 @@
import java.util.ArrayList;
import java.util.List;
-import javax.naming.ldap.InitialLdapContext;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
@@ -39,6 +38,7 @@
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.LocalizedIllegalArgumentException;
import org.forgerock.opendj.ldap.DN;
+import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.guitools.controlpanel.browser.BrowserController;
import org.opends.guitools.controlpanel.datamodel.CustomSearchResult;
import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
@@ -445,9 +445,8 @@
@Override
public CustomSearchResult processBackgroundTask() throws Throwable
{
- InitialLdapContext ctx =
- controller.findConnectionForDisplayedEntry(node);
- LDAPEntryReader reader = new LDAPEntryReader(node.getDN(), ctx);
+ ConnectionWrapper conn = controller.findConnectionForDisplayedEntry(node);
+ LDAPEntryReader reader = new LDAPEntryReader(node.getDN(), conn);
sleepIfRequired(700, t1);
return reader.processBackgroundTask();
}
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/LDAPEntryReader.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/LDAPEntryReader.java
index 9e97f1f..1c27e7d 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/LDAPEntryReader.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/LDAPEntryReader.java
@@ -23,8 +23,8 @@
import javax.naming.NamingEnumeration;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
-import javax.naming.ldap.InitialLdapContext;
+import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.guitools.controlpanel.datamodel.CustomSearchResult;
import org.opends.guitools.controlpanel.event.EntryReadErrorEvent;
import org.opends.guitools.controlpanel.event.EntryReadEvent;
@@ -38,7 +38,7 @@
public class LDAPEntryReader extends BackgroundTask<CustomSearchResult>
{
private final String dn;
- private final InitialLdapContext ctx;
+ private final ConnectionWrapper conn;
private final Set<EntryReadListener> listeners = new HashSet<>();
private boolean isOver;
private boolean notifyListeners;
@@ -46,12 +46,12 @@
/**
* Constructor of the entry reader.
* @param dn the DN of the entry.
- * @param ctx the connection to the server.
+ * @param conn the connection to the server.
*/
- public LDAPEntryReader(String dn, InitialLdapContext ctx)
+ public LDAPEntryReader(String dn, ConnectionWrapper conn)
{
this.dn = dn;
- this.ctx = ctx;
+ this.conn = conn;
this.notifyListeners = true;
}
@@ -69,7 +69,7 @@
controls.setSearchScope(SearchControls.OBJECT_SCOPE);
final String filter = "(|(objectclass=*)(objectclass=ldapsubentry))";
- en = ctx.search(Utilities.getJNDIName(dn), filter, controls);
+ en = conn.getLdapContext().search(Utilities.getJNDIName(dn), filter, controls);
SearchResult sr = null;
while (en.hasMore())
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 d0b2531..b606029 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
@@ -23,10 +23,10 @@
import static org.forgerock.opendj.ldap.DereferenceAliasesPolicy.*;
import static org.forgerock.opendj.ldap.SearchScope.*;
import static org.forgerock.opendj.ldap.requests.Requests.*;
-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.*;
+import static org.opends.server.schema.SchemaConstants.*;
import static org.opends.server.util.SchemaUtils.*;
import java.awt.Color;
@@ -58,11 +58,7 @@
import javax.naming.CompositeName;
import javax.naming.InvalidNameException;
import javax.naming.Name;
-import javax.naming.NamingEnumeration;
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 javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
@@ -111,6 +107,7 @@
import org.forgerock.opendj.ldap.schema.SchemaBuilder;
import org.forgerock.opendj.ldap.schema.SchemaElement;
import org.forgerock.opendj.ldap.schema.Syntax;
+import org.forgerock.opendj.ldif.ConnectionEntryReader;
import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.guitools.controlpanel.ControlPanel;
import org.opends.guitools.controlpanel.browser.IconPool;
@@ -2141,7 +2138,7 @@
}
/**
- * Returns the InitialLdapContext to connect to the administration connector
+ * Returns the connection to connect to the administration connector
* of the server using the information in the ControlCenterInfo object (which
* provides the host and administration connector port to be used) and some
* LDAP credentials.
@@ -2150,13 +2147,15 @@
* @param controlInfo the object which provides the connection parameters.
* @param bindDN the base DN to be used to bind.
* @param pwd the password to be used to bind.
- * @return the InitialLdapContext connected to the server.
+ * @return the connection to the server.
* @throws NamingException if there was a problem connecting to the server
* or the provided credentials do not have enough rights.
+ * @throws IOException if there was a problem connecting to the server
+ * or the provided credentials do not have enough rights.
* @throws ConfigReadException if there is an error reading the configuration.
*/
public static ConnectionWrapper getAdminDirContext(ControlPanelInfo controlInfo, String bindDN, String pwd)
- throws NamingException, ConfigReadException
+ throws NamingException, IOException, ConfigReadException
{
String usedUrl = controlInfo.getAdminConnectorURL();
if (usedUrl == null)
@@ -2168,115 +2167,87 @@
// Search for the config to check that it is the directory manager.
ConnectionWrapper conn = new ConnectionWrapper(
usedUrl, LDAPS, bindDN, pwd, controlInfo.getConnectTimeout(), controlInfo.getTrustManager());
- checkCanReadConfig(conn.getLdapContext());
+ checkCanReadConfig(conn);
return conn;
}
/**
- * Returns the InitialLdapContext to connect to the server using the
+ * Returns the connection to connect to the server using the
* information in the ControlCenterInfo object (which provides the host, port
* and protocol to be used) and some LDAP credentials. It also tests that
* the provided credentials have enough rights to read the configuration.
* @param controlInfo the object which provides the connection parameters.
* @param bindDN the base DN to be used to bind.
* @param pwd the password to be used to bind.
- * @return the InitialLdapContext connected to the server.
+ * @return the connection to the server.
* @throws NamingException if there was a problem connecting to the server
* or the provided credentials do not have enough rights.
+ * @throws IOException if there was a problem connecting to the server
+ * or the provided credentials do not have enough rights.
* @throws ConfigReadException if there is an error reading the configuration.
*/
- public static InitialLdapContext getUserDataDirContext(
- ControlPanelInfo controlInfo,
- String bindDN, String pwd) throws NamingException, ConfigReadException
+ public static ConnectionWrapper getUserDataDirContext(ControlPanelInfo controlInfo,
+ String bindDN, String pwd) throws NamingException, IOException, ConfigReadException
{
- InitialLdapContext ctx;
- String usedUrl;
+ ConnectionWrapper conn;
if (controlInfo.connectUsingStartTLS())
{
- usedUrl = controlInfo.getStartTLSURL();
+ String usedUrl = controlInfo.getStartTLSURL();
if (usedUrl == null)
{
throw new ConfigReadException(
ERR_COULD_NOT_FIND_VALID_LDAPURL.get());
}
- ctx = Utils.createStartTLSContext(usedUrl,
- bindDN, pwd, controlInfo.getConnectTimeout(), null,
- controlInfo.getTrustManager(), null);
+ conn = new ConnectionWrapper(usedUrl, START_TLS,
+ bindDN, pwd, controlInfo.getConnectTimeout(), controlInfo.getTrustManager());
}
else if (controlInfo.connectUsingLDAPS())
{
- usedUrl = controlInfo.getLDAPSURL();
+ String usedUrl = controlInfo.getLDAPSURL();
if (usedUrl == null)
{
throw new ConfigReadException(
ERR_COULD_NOT_FIND_VALID_LDAPURL.get());
}
- ctx = createLdapsContext(usedUrl,
- bindDN, pwd, controlInfo.getConnectTimeout(), null,
- controlInfo.getTrustManager(), null);
+ conn = new ConnectionWrapper(usedUrl, LDAPS,
+ bindDN, pwd, controlInfo.getConnectTimeout(), controlInfo.getTrustManager());
}
else
{
- usedUrl = controlInfo.getLDAPURL();
+ String usedUrl = controlInfo.getLDAPURL();
if (usedUrl == null)
{
throw new ConfigReadException(
ERR_COULD_NOT_FIND_VALID_LDAPURL.get());
}
- ctx = createLdapContext(usedUrl,
- bindDN, pwd, controlInfo.getConnectTimeout(), null);
+ conn = new ConnectionWrapper(usedUrl, LDAP,
+ bindDN, pwd, controlInfo.getConnectTimeout(), controlInfo.getTrustManager());
}
- checkCanReadConfig(ctx);
- return ctx;
+ checkCanReadConfig(conn);
+ return conn;
}
/**
* Checks that the provided connection can read cn=config.
- * @param ctx the connection to be tested.
- * @throws NamingException if an error occurs while reading cn=config.
+ *
+ * @param conn
+ * the connection to be tested.
+ * @throws IOException
+ * if an error occurs while reading cn=config.
*/
- private static void checkCanReadConfig(InitialLdapContext ctx)
- throws NamingException
+ private static void checkCanReadConfig(ConnectionWrapper conn) throws IOException
{
// Search for the config to check that it is the directory manager.
- SearchControls searchControls = new SearchControls();
- searchControls.setSearchScope(SearchControls.OBJECT_SCOPE);
- searchControls.setReturningAttributes(new String[] { SchemaConstants.NO_ATTRIBUTES });
- NamingEnumeration<SearchResult> sr =
- ctx.search("cn=config", "objectclass=*", searchControls);
- try
+ SearchRequest request = newSearchRequest("cn=config", BASE_OBJECT, "objectclass=*", NO_ATTRIBUTES);
+ try (ConnectionEntryReader entryReader = conn.getConnection().search(request))
{
- while (sr.hasMore())
+ while (entryReader.hasNext())
{
- sr.next();
+ entryReader.readEntry();
}
}
- finally
- {
- sr.close();
- }
- }
-
- /**
- * Ping the specified InitialLdapContext.
- * This method sends a search request on the root entry of the DIT
- * and forward the corresponding exception (if any).
- * @param ctx the InitialLdapContext to be "pinged".
- * @throws NamingException if the ping could not be performed.
- */
- public static void pingDirContext(InitialLdapContext ctx)
- throws NamingException {
- SearchControls sc = new SearchControls(
- SearchControls.OBJECT_SCOPE,
- 0, // count limit
- 0, // time limit
- new String[0], // No attributes
- false, // Don't return bound object
- false // Don't dereference link
- );
- ctx.search("", "objectClass=*", sc);
}
/**
@@ -2290,7 +2261,7 @@
*/
public static void ping(ConnectionWrapper connWrapper) throws NamingException
{
- SearchRequest request = newSearchRequest("", BASE_OBJECT, "objectClass=*", "1.1")
+ SearchRequest request = newSearchRequest("", BASE_OBJECT, "objectClass=*", NO_ATTRIBUTES)
.setSizeLimit(0)
.setTimeLimit(0)
.setDereferenceAliasesPolicy(NEVER);
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/Uninstaller.java b/opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/Uninstaller.java
index b82f673..8787314 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/Uninstaller.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/Uninstaller.java
@@ -1901,8 +1901,7 @@
}
/**
- * This method updates the replication in the remote server using the
- * provided InitialLdapContext.
+ * This method updates the replication in the remote server using the provided connection.
* It also tries to delete the server registration entry from the remote ADS
* servers if the serverADSProperties object passed is not null.
* @param connWrapper the connection to the remote server where we want to remove
diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/Application.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/Application.java
index 01ed639..c2c56a3 100644
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/Application.java
+++ b/opendj-server-legacy/src/main/java/org/opends/quicksetup/Application.java
@@ -14,7 +14,6 @@
* Copyright 2008-2010 Sun Microsystems, Inc.
* Portions Copyright 2012-2016 ForgeRock AS.
*/
-
package org.opends.quicksetup;
import static com.forgerock.opendj.cli.Utils.*;
@@ -601,7 +600,7 @@
* Use {@code 0} to express no timeout.
* @param cnx the ordered list of preferred connections to connect to the
* server.
- * @return the InitialLdapContext to the remote server.
+ * @return the connection to the remote server.
* @throws ApplicationException if something goes wrong.
*/
protected ConnectionWrapper getRemoteConnection(ServerDescriptor server, DN dn, String pwd, int timeout,
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 9c1861a..83416a3 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
@@ -61,7 +61,6 @@
import javax.naming.directory.DirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
-import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.Rdn;
import javax.swing.JPanel;
@@ -2061,7 +2060,7 @@
knownReplicationServerIds,
knownServerIds);
localTimeMeasureTime = System.currentTimeMillis();
- localTime = Utils.getServerClock(conn.getLdapContext());
+ localTime = Utils.getServerClock(conn);
localServerDisplay = conn.getHostPort();
}
catch (NamingException ne)
@@ -2154,7 +2153,7 @@
conn, remoteReplicationServers, replicationPort, enableSecureReplication,
knownReplicationServerIds, knownServerIds);
long remoteTimeMeasureTime = System.currentTimeMillis();
- long remoteTime = Utils.getServerClock(conn.getLdapContext());
+ long remoteTime = Utils.getServerClock(conn);
if (localTime != -1
&& remoteTime != -1
&& Math.abs(localTime - remoteTime - localTimeMeasureTime + remoteTimeMeasureTime) >
@@ -2472,7 +2471,7 @@
filter.setSearchMonitoringInformation(false);
filter.addBaseDNToSearch(ADSContext.getAdministrationSuffixDN());
filter.addBaseDNToSearch(Constants.SCHEMA_DN);
- ServerDescriptor s = createStandalone(remoteConn.getLdapContext(), filter);
+ ServerDescriptor s = createStandalone(remoteConn, filter);
for (ReplicaDescriptor replica : s.getReplicas())
{
String dn = replica.getSuffix().getDN();
@@ -2541,7 +2540,7 @@
TopologyCacheFilter filter = new TopologyCacheFilter();
filter.setSearchMonitoringInformation(false);
filter.addBaseDNToSearch(dn);
- ServerDescriptor s = createStandalone(remoteConn.getLdapContext(), filter);
+ ServerDescriptor s = createStandalone(remoteConn, filter);
for (ReplicaDescriptor r : s.getReplicas())
{
if (areDnsEqual(r.getSuffix().getDN(), dn))
@@ -2578,7 +2577,7 @@
logger.info(LocalizableMessage.raw("Calling initializeSuffix with base DN: " + dn));
logger.info(LocalizableMessage.raw("Try number: " + (6 - nTries)));
logger.info(LocalizableMessage.raw("replicationId of source replica: " + replicationId));
- initializeSuffix(conn.getLdapContext(), replicationId, dn, !isADS && !isSchema, hostPort);
+ initializeSuffix(conn, replicationId, dn, !isADS && !isSchema, hostPort);
initDone = true;
}
catch (PeerNotFoundException pnfe)
@@ -2654,7 +2653,7 @@
TopologyCacheFilter filter = new TopologyCacheFilter();
filter.setSearchMonitoringInformation(false);
filter.setSearchBaseDNInformation(false);
- ServerDescriptor server = createStandalone(remoteConn.getLdapContext(), filter);
+ ServerDescriptor server = createStandalone(remoteConn, filter);
server.updateAdsPropertiesWithServerProperties();
adsContext.registerServer(server.getAdsProperties());
createdRemoteAds = true;
@@ -2682,7 +2681,7 @@
TopologyCacheFilter filter = new TopologyCacheFilter();
filter.setSearchMonitoringInformation(false);
filter.setSearchBaseDNInformation(false);
- ServerDescriptor server = createStandalone(localConn.getLdapContext(), filter);
+ ServerDescriptor server = createStandalone(localConn, filter);
server.updateAdsPropertiesWithServerProperties();
if (0 == adsContext.registerOrUpdateServer(server.getAdsProperties()))
{
@@ -2697,7 +2696,7 @@
}
if (isRemoteServer)
{
- seedAdsTrustStore(localConn.getLdapContext(), adsContext.getTrustedCertificates());
+ seedAdsTrustStore(localConn, adsContext.getTrustedCertificates());
}
if (isVerbose())
{
@@ -3475,7 +3474,7 @@
}
else
{
- updateUserDataWithSuffixesInServer(conn.getLdapContext());
+ updateUserDataWithSuffixesInServer(conn);
}
}
catch (UserDataException ude)
@@ -3952,9 +3951,9 @@
/**
* Update the UserInstallData object with the contents of the server to which
- * we are connected with the provided InitialLdapContext.
+ * we are connected with the provided connection.
*/
- private void updateUserDataWithSuffixesInServer(InitialLdapContext ctx) throws NamingException
+ private void updateUserDataWithSuffixesInServer(ConnectionWrapper conn) throws NamingException
{
SuffixesToReplicateOptions suf = getUserData().getSuffixesToReplicateOptions();
SuffixesToReplicateOptions.Type type;
@@ -3968,7 +3967,7 @@
type = SuffixesToReplicateOptions.Type.NEW_SUFFIX_IN_TOPOLOGY;
}
- ServerDescriptor s = createStandalone(ctx, new TopologyCacheFilter());
+ ServerDescriptor s = createStandalone(conn, new TopologyCacheFilter());
Set<ReplicaDescriptor> replicas = s.getReplicas();
for (ReplicaDescriptor replica : replicas)
{
@@ -4108,7 +4107,7 @@
*
* @param server
* the object describing the server.
- * @return the InitialLdapContext to the remote server.
+ * @return the connection to the remote server.
* @throws ApplicationException
* if something goes wrong.
*/
@@ -4148,7 +4147,7 @@
* Initializes a suffix with the contents of a replica that has a given
* replication id.
*
- * @param ctx
+ * @param conn
* the connection to the server whose suffix we want to initialize.
* @param replicaId
* the replication ID of the replica we want to use to initialize the
@@ -4165,7 +4164,7 @@
* @throws PeerNotFoundException
* if the replication mechanism cannot find a peer.
*/
- public void initializeSuffix(InitialLdapContext ctx, int replicaId, String suffixDn, boolean displayProgress,
+ public void initializeSuffix(ConnectionWrapper conn, int replicaId, String suffixDn, boolean displayProgress,
HostPort sourceServerDisplay) throws ApplicationException, PeerNotFoundException
{
boolean taskCreated = false;
@@ -4189,7 +4188,7 @@
attrs.put("ds-task-id", id);
try
{
- DirContext dirCtx = ctx.createSubcontext(dn, attrs);
+ DirContext dirCtx = conn.getLdapContext().createSubcontext(dn, attrs);
taskCreated = true;
logger.info(LocalizableMessage.raw("created task entry: " + attrs));
dirCtx.close();
@@ -4236,7 +4235,7 @@
}
try
{
- NamingEnumeration<SearchResult> res = ctx.search(dn, filter, searchControls);
+ NamingEnumeration<SearchResult> res = conn.getLdapContext().search(dn, filter, searchControls);
SearchResult sr = null;
try
{
@@ -4405,7 +4404,7 @@
.get(sourceServerDisplay), ne), ne);
}
}
- resetGenerationId(ctx, suffixDn, sourceServerDisplay);
+ resetGenerationId(conn, suffixDn, sourceServerDisplay);
}
/**
@@ -4425,7 +4424,7 @@
return getUserData().getHostName() + ":" + getUserData().getReplicationOptions().getReplicationPort();
}
- private void resetGenerationId(InitialLdapContext ctx, String suffixDn, HostPort sourceServerDisplay)
+ private void resetGenerationId(ConnectionWrapper conn, String suffixDn, HostPort sourceServerDisplay)
throws ApplicationException
{
boolean taskCreated = false;
@@ -4448,7 +4447,7 @@
attrs.put("ds-task-id", id);
try
{
- DirContext dirCtx = ctx.createSubcontext(dn, attrs);
+ DirContext dirCtx = conn.getLdapContext().createSubcontext(dn, attrs);
taskCreated = true;
logger.info(LocalizableMessage.raw("created task entry: " + attrs));
dirCtx.close();
@@ -4475,7 +4474,7 @@
StaticUtils.sleep(500);
try
{
- NamingEnumeration<SearchResult> res = ctx.search(dn, filter, searchControls);
+ NamingEnumeration<SearchResult> res = conn.getLdapContext().search(dn, filter, searchControls);
SearchResult sr = null;
try
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/ServerController.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/ServerController.java
index 62a980c..888423f 100644
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/ServerController.java
+++ b/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/ServerController.java
@@ -20,18 +20,23 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
import javax.naming.NamingException;
-import javax.naming.ldap.InitialLdapContext;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.LocalizableMessageBuilder;
import org.forgerock.i18n.slf4j.LocalizedLogger;
-import org.opends.quicksetup.*;
+import org.opends.admin.ads.util.ConnectionWrapper;
+import org.opends.admin.ads.util.PreferredConnection.Type;
+import org.opends.quicksetup.Application;
+import org.opends.quicksetup.ApplicationException;
+import org.opends.quicksetup.Configuration;
+import org.opends.quicksetup.Installation;
+import org.opends.quicksetup.ReturnCode;
import org.opends.quicksetup.installer.InstallerHelper;
import org.opends.server.util.SetupUtils;
-import org.opends.server.util.StaticUtils;
import com.forgerock.opendj.cli.CliConstants;
@@ -39,8 +44,8 @@
import static com.forgerock.opendj.cli.Utils.*;
import static com.forgerock.opendj.util.OperatingSystem.*;
-import static org.opends.admin.ads.util.ConnectionUtils.*;
import static org.opends.messages.QuickSetupMessages.*;
+import static org.opends.server.util.CollectionUtils.*;
/** Class used to manipulate an OpenDS server. */
public class ServerController {
@@ -298,13 +303,13 @@
/**
* This methods starts the server.
- * @param verify boolean indicating whether this method will attempt to
+ * @param verifyCanConnect boolean indicating whether this method will attempt to
* connect to the server after starting to verify that it is listening.
* @param suppressOutput indicating that ouput to standard output streams
* from the server should be suppressed.
* @throws org.opends.quicksetup.ApplicationException if something goes wrong.
*/
- private void startServer(boolean verify, boolean suppressOutput)
+ private void startServer(boolean verifyCanConnect, boolean suppressOutput)
throws ApplicationException
{
if (suppressOutput && !StandardOutputSuppressor.isSuppressed()) {
@@ -324,173 +329,14 @@
mb.append(application.getLineBreak());
application.notifyListeners(mb.toMessage());
}
- logger.info(LocalizableMessage.raw("starting server"));
- ArrayList<String> argList = new ArrayList<>();
- argList.add(Utils.getScriptPath(
- Utils.getPath(installation.getServerStartCommandFile())));
- argList.add("--timeout");
- argList.add("0");
- String[] args = new String[argList.size()];
- argList.toArray(args);
- ProcessBuilder pb = new ProcessBuilder(args);
- pb.directory(installation.getBinariesDirectory());
- Map<String, String> env = pb.environment();
- env.put(SetupUtils.OPENDJ_JAVA_HOME, System.getProperty("java.home"));
- env.remove(SetupUtils.OPENDJ_JAVA_ARGS);
-
- // Upgrader's classpath contains jars located in the temporary
- // directory that we don't want locked by the directory server
- // when it starts. Since we're just calling the start-ds script
- // it will figure out the correct classpath for the server.
- env.remove("CLASSPATH");
try
{
- String startedId = getStartedId();
- Process process = pb.start();
+ startServerViaAnotherProcess();
- BufferedReader err =
- new BufferedReader(new InputStreamReader(process.getErrorStream()));
- BufferedReader out =
- new BufferedReader(new InputStreamReader(process.getInputStream()));
-
- StartReader errReader = new StartReader(err, startedId, true);
- StartReader outputReader = new StartReader(out, startedId, false);
-
- int returnValue = process.waitFor();
-
- logger.info(LocalizableMessage.raw("start-ds return value: "+returnValue));
-
- if (returnValue != 0)
+ if (verifyCanConnect)
{
- throw new ApplicationException(ReturnCode.START_ERROR,
- INFO_ERROR_STARTING_SERVER_CODE.get(returnValue),
- null);
- }
- if (outputReader.isFinished())
- {
- logger.info(LocalizableMessage.raw("Output reader finished."));
- }
- if (errReader.isFinished())
- {
- logger.info(LocalizableMessage.raw("Error reader finished."));
- }
- if (!outputReader.startedIdFound() && !errReader.startedIdFound())
- {
- logger.warn(LocalizableMessage.raw("Started ID could not be found"));
- }
-
- // Check if something wrong occurred reading the starting of the server
- ApplicationException ex = errReader.getException();
- if (ex == null)
- {
- ex = outputReader.getException();
- }
- if (ex != null)
- {
- // This is meaningless right now since we throw
- // the exception below, but in case we change out
- // minds later or add the ability to return exceptions
- // in the output only instead of throwing...
- throw ex;
- } else if (verify)
- {
- /*
- * There are no exceptions from the readers and they are marked as
- * finished. So it seems that everything went fine.
- *
- * However we can have issues with the firewalls or do not have rights
- * to connect or since the startup process is asynchronous we will
- * have to wait for the databases and the listeners to initialize.
- * Just check if we can connect to the server.
- * Try 30 times with an interval of 3 seconds between try.
- */
- boolean connected = false;
- Configuration config = installation.getCurrentConfiguration();
- int port = config.getAdminConnectorPort();
-
- // See if the application has prompted for credentials. If
- // not we'll just try to connect anonymously.
- String userDn = null;
- String userPw = null;
- if (application != null) {
- userDn = application.getUserData().getDirectoryManagerDn();
- userPw = application.getUserData().getDirectoryManagerPwd();
- }
- if (userDn == null || userPw == null) {
- userDn = null;
- userPw = null;
- }
-
- InitialLdapContext ctx = null;
- for (int i=0; i<50 && !connected; i++)
- {
- String hostName = null;
- if (application != null)
- {
- hostName = application.getUserData().getHostName();
- }
- if (hostName == null)
- {
- hostName = "localhost";
- }
-
- int dig = i % 10;
-
- if ((dig == 3 || dig == 4) && !"localhost".equals(hostName))
- {
- // Try with local host. This might be necessary in certain
- // network configurations.
- hostName = "localhost";
- }
-
- if (dig == 5 || dig == 6)
- {
- // Try with 0.0.0.0. This might be necessary in certain
- // network configurations.
- hostName = "0.0.0.0";
- }
-
- hostName = getHostNameForLdapUrl(hostName);
- String ldapUrl = "ldaps://"+hostName+":" + port;
- try
- {
- int timeout = CliConstants.DEFAULT_LDAP_CONNECT_TIMEOUT;
- if (application != null && application.getUserData() != null)
- {
- timeout = application.getUserData().getConnectTimeout();
- }
- ctx = createLdapsContext(ldapUrl, userDn, userPw, timeout,
- null, null, null);
- connected = true;
- }
- catch (NamingException ne)
- {
- logger.warn(LocalizableMessage.raw("Could not connect to server: "+ne, ne));
- }
- finally
- {
- StaticUtils.close(ctx);
- }
- if (!connected)
- {
- try
- {
- Thread.sleep(3000);
- }
- catch (Throwable t)
- {
- // do nothing
- }
- }
- }
- if (!connected)
- {
- final LocalizableMessage msg = isWindows()
- ? INFO_ERROR_STARTING_SERVER_IN_WINDOWS.get(port)
- : INFO_ERROR_STARTING_SERVER_IN_UNIX.get(port);
- throw new ApplicationException(ReturnCode.START_ERROR, msg, null);
- }
+ verifyCanConnect();
}
} catch (IOException | InterruptedException ioe)
{
@@ -513,6 +359,172 @@
}
}
+ private void startServerViaAnotherProcess() throws IOException, InterruptedException, ApplicationException
+ {
+ logger.info(LocalizableMessage.raw("starting server"));
+
+ List<String> argList = newArrayList(
+ Utils.getScriptPath(Utils.getPath(installation.getServerStartCommandFile())),
+ "--timeout", "0");
+
+ ProcessBuilder pb = new ProcessBuilder(argList.toArray(new String[argList.size()]));
+ pb.directory(installation.getBinariesDirectory());
+ Map<String, String> env = pb.environment();
+ env.put(SetupUtils.OPENDJ_JAVA_HOME, System.getProperty("java.home"));
+ env.remove(SetupUtils.OPENDJ_JAVA_ARGS);
+
+ // Upgrader's classpath contains jars located in the temporary
+ // directory that we don't want locked by the directory server
+ // when it starts. Since we're just calling the start-ds script
+ // it will figure out the correct classpath for the server.
+ env.remove("CLASSPATH");
+
+ String startedId = getStartedId();
+ Process process = pb.start();
+
+ BufferedReader err = new BufferedReader(new InputStreamReader(process.getErrorStream()));
+ BufferedReader out = new BufferedReader(new InputStreamReader(process.getInputStream()));
+
+ StartReader errReader = new StartReader(err, startedId, true);
+ StartReader outputReader = new StartReader(out, startedId, false);
+
+ int returnValue = process.waitFor();
+
+ logger.info(LocalizableMessage.raw("start-ds return value: " + returnValue));
+
+ if (returnValue != 0)
+ {
+ throw new ApplicationException(ReturnCode.START_ERROR, INFO_ERROR_STARTING_SERVER_CODE.get(returnValue), null);
+ }
+ if (outputReader.isFinished())
+ {
+ logger.info(LocalizableMessage.raw("Output reader finished."));
+ }
+ if (errReader.isFinished())
+ {
+ logger.info(LocalizableMessage.raw("Error reader finished."));
+ }
+ if (!outputReader.startedIdFound() && !errReader.startedIdFound())
+ {
+ logger.warn(LocalizableMessage.raw("Started ID could not be found"));
+ }
+
+ // Check if something wrong occurred reading the starting of the server
+ ApplicationException ex = errReader.getException();
+ if (ex == null)
+ {
+ ex = outputReader.getException();
+ }
+ if (ex != null)
+ {
+ // This is meaningless right now since we throw
+ // the exception below, but in case we change out
+ // minds later or add the ability to return exceptions
+ // in the output only instead of throwing...
+ throw ex;
+ }
+ }
+
+ private void verifyCanConnect() throws IOException, ApplicationException
+ {
+ /*
+ * There are no exceptions from the readers and they are marked as
+ * finished. So it seems that everything went fine.
+ *
+ * However we can have issues with the firewalls or do not have rights
+ * to connect or since the startup process is asynchronous we will
+ * have to wait for the databases and the listeners to initialize.
+ * Just check if we can connect to the server.
+ * Try 30 times with an interval of 3 seconds between try.
+ */
+ boolean connected = false;
+ Configuration config = installation.getCurrentConfiguration();
+ int port = config.getAdminConnectorPort();
+
+ // See if the application has prompted for credentials. If
+ // not we'll just try to connect anonymously.
+ String userDn = null;
+ String userPw = null;
+ if (application != null) {
+ userDn = application.getUserData().getDirectoryManagerDn();
+ userPw = application.getUserData().getDirectoryManagerPwd();
+ }
+ if (userDn == null || userPw == null) {
+ userDn = null;
+ userPw = null;
+ }
+
+ for (int i=0; i<50 && !connected; i++)
+ {
+ String hostName = getHostName(i);
+ String ldapUrl = "ldaps://"+hostName+":" + port;
+ try
+ {
+ int timeout = CliConstants.DEFAULT_LDAP_CONNECT_TIMEOUT;
+ if (application != null && application.getUserData() != null)
+ {
+ timeout = application.getUserData().getConnectTimeout();
+ }
+ try (ConnectionWrapper conn = new ConnectionWrapper(ldapUrl, Type.LDAPS, userDn, userPw, timeout, null))
+ {
+ return;
+ }
+ }
+ catch (NamingException ne)
+ {
+ logger.warn(LocalizableMessage.raw("Could not connect to server: "+ne, ne));
+ }
+
+ try
+ {
+ // not connected yet
+ Thread.sleep(3000);
+ }
+ catch (Throwable t)
+ {
+ // do nothing
+ }
+ }
+
+ // Could not connect
+ final LocalizableMessage msg = isWindows()
+ ? INFO_ERROR_STARTING_SERVER_IN_WINDOWS.get(port)
+ : INFO_ERROR_STARTING_SERVER_IN_UNIX.get(port);
+ throw new ApplicationException(ReturnCode.START_ERROR, msg, null);
+ }
+
+ private String getHostName(int i)
+ {
+ String hostName = null;
+ if (application != null)
+ {
+ hostName = application.getUserData().getHostName();
+ }
+ if (hostName == null)
+ {
+ hostName = "localhost";
+ }
+
+ int dig = i % 10;
+
+ if ((dig == 3 || dig == 4) && !"localhost".equals(hostName))
+ {
+ // Try with local host. This might be necessary in certain
+ // network configurations.
+ hostName = "localhost";
+ }
+
+ if (dig == 5 || dig == 6)
+ {
+ // Try with 0.0.0.0. This might be necessary in certain
+ // network configurations.
+ hostName = "0.0.0.0";
+ }
+
+ hostName = getHostNameForLdapUrl(hostName);
+ return hostName;
+ }
+
/**
* This class is used to read the standard error and standard output of the
* Stop process.
diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/Utils.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/Utils.java
index 6fc80bd..82e57bf 100644
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/Utils.java
+++ b/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/Utils.java
@@ -76,6 +76,7 @@
import org.opends.admin.ads.SuffixDescriptor;
import org.opends.admin.ads.TopologyCacheException;
import org.opends.admin.ads.util.ConnectionUtils;
+import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.quicksetup.Constants;
import org.opends.quicksetup.Installation;
import org.opends.quicksetup.SecurityOptions;
@@ -956,11 +957,11 @@
/**
* Returns the current time of a server in milliseconds.
*
- * @param ctx
+ * @param conn
* the connection to the server.
* @return the current time of a server in milliseconds.
*/
- public static long getServerClock(InitialLdapContext ctx)
+ public static long getServerClock(ConnectionWrapper conn)
{
long time = -1;
SearchControls ctls = new SearchControls();
@@ -971,7 +972,7 @@
try
{
LdapName jndiName = new LdapName("cn=monitor");
- NamingEnumeration<?> listeners = ctx.search(jndiName, filter, ctls);
+ NamingEnumeration<?> listeners = conn.getLdapContext().search(jndiName, filter, ctls);
try
{
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 a574f38..c494743 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
@@ -3593,11 +3593,11 @@
private Type getConnectionType(final ConnectionWrapper conn)
{
- if (isSSL(conn.getLdapContext()))
+ if (conn.isSSL())
{
return LDAPS;
}
- else if (isStartTLS(conn.getLdapContext()))
+ else if (conn.isStartTLS())
{
return START_TLS;
}
@@ -3696,8 +3696,8 @@
{
TopologyCacheFilter filter = new TopologyCacheFilter();
filter.setSearchMonitoringInformation(false);
- ServerDescriptor server1 = ServerDescriptor.createStandalone(conn1.getLdapContext(), filter);
- ServerDescriptor server2 = ServerDescriptor.createStandalone(conn2.getLdapContext(), filter);
+ ServerDescriptor server1 = ServerDescriptor.createStandalone(conn1, filter);
+ ServerDescriptor server2 = ServerDescriptor.createStandalone(conn2, filter);
for (ReplicaDescriptor rep1 : server1.getReplicas())
{
@@ -3814,7 +3814,7 @@
filter.setSearchMonitoringInformation(false);
try
{
- ServerDescriptor server = ServerDescriptor.createStandalone(conn.getLdapContext(), filter);
+ ServerDescriptor server = ServerDescriptor.createStandalone(conn, filter);
suffixes.addAll(server.getReplicas());
}
catch (Throwable t)
@@ -3975,8 +3975,8 @@
private void printSuccessfullyEnabled(ConnectionWrapper conn1, ConnectionWrapper conn2)
{
- long time1 = getServerClock(conn1.getLdapContext());
- long time2 = getServerClock(conn2.getLdapContext());
+ long time1 = getServerClock(conn1);
+ long time2 = getServerClock(conn2);
if (time1 != -1
&& time2 != -1
&& Math.abs(time1 - time2) > Installer.THRESHOLD_CLOCK_DIFFERENCE_WARNING * 60 * 1000)
@@ -5196,7 +5196,7 @@
{
try
{
- ServerDescriptor.seedAdsTrustStore(connDestination.getLdapContext(), adsCtxSource.getTrustedCertificates());
+ ServerDescriptor.seedAdsTrustStore(connDestination, adsCtxSource.getTrustedCertificates());
}
catch (Throwable t)
{
@@ -5491,7 +5491,7 @@
{
try
{
- return ServerDescriptor.createStandalone(conn.getLdapContext(), filter);
+ return ServerDescriptor.createStandalone(conn, filter);
}
catch (NamingException ne)
{
@@ -6974,7 +6974,7 @@
TopologyCacheFilter filter = new TopologyCacheFilter();
filter.setSearchMonitoringInformation(false);
filter.addBaseDNToSearch(baseDN);
- ServerDescriptor source = ServerDescriptor.createStandalone(connSource.getLdapContext(), filter);
+ ServerDescriptor source = ServerDescriptor.createStandalone(connSource, filter);
for (ReplicaDescriptor replica : source.getReplicas())
{
if (areDnsEqual(replica.getSuffix().getDN(), baseDN))
@@ -7019,7 +7019,7 @@
try
{
installer.initializeSuffix(
- connDestination.getLdapContext(), replicationId, baseDN, displayProgress, connSource.getHostPort());
+ connDestination, replicationId, baseDN, displayProgress, connSource.getHostPort());
initDone = true;
}
catch (PeerNotFoundException pnfe)
@@ -9062,7 +9062,7 @@
catch (Throwable t)
{
logger.warn(LocalizableMessage.raw("Error loading topology cache in "
- + getLdapUrl(conn.getLdapContext()) + ": " + t, t));
+ + conn.getLdapUrl() + ": " + t, t));
}
return null;
}
@@ -9382,7 +9382,7 @@
server.getHostPort(true)+" with certificates of "+ adsCtxSource.getHostPort()));
try (ConnectionWrapper conn = getConnection(cacheDestination, server))
{
- ServerDescriptor.seedAdsTrustStore(conn.getLdapContext(), adsCtxSource.getTrustedCertificates());
+ ServerDescriptor.seedAdsTrustStore(conn, adsCtxSource.getTrustedCertificates());
}
}
}
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 ef673b3..205c870 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
@@ -325,17 +325,17 @@
if (!controlInfo.getServerDescriptor().getExceptions().isEmpty()) {
return ReturnCode.ERROR_INITIALIZING_SERVER.get();
}
- } catch (NamingException ne) {
+ } catch (NamingException |IOException e) {
// This should not happen but this is useful information to
// diagnose the error.
println();
- println(INFO_ERROR_READING_SERVER_CONFIGURATION.get(ne));
+ println(INFO_ERROR_READING_SERVER_CONFIGURATION.get(e));
return ReturnCode.ERROR_INITIALIZING_SERVER.get();
- } catch (ConfigReadException cre) {
+ } catch (ConfigReadException e) {
// This should not happen but this is useful information to
// diagnose the error.
println();
- println(cre.getMessageObject());
+ println(e.getMessageObject());
return ReturnCode.ERROR_INITIALIZING_SERVER.get();
}
} else {
--
Gitblit v1.10.0