opendj-server-legacy/src/main/java/org/opends/admin/ads/ADSContext.java
@@ -12,7 +12,7 @@ * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2007-2010 Sun Microsystems, Inc. * Portions Copyright 2012-2015 ForgeRock AS. * Portions Copyright 2012-2016 ForgeRock AS. */ package org.opends.admin.ads; @@ -54,6 +54,7 @@ import org.forgerock.i18n.slf4j.LocalizedLogger; import org.opends.admin.ads.ADSContextException.ErrorType; import org.opends.admin.ads.util.ConnectionUtils; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.quicksetup.Constants; import org.opends.server.schema.SchemaConstants; @@ -320,16 +321,18 @@ /** The context used to retrieve information. */ private final InitialLdapContext dirContext; private final ConnectionWrapper connectionWrapper; /** * Constructor of the ADSContext. * * @param dirContext * the DirContext that must be used to retrieve information. * @param connectionWrapper * provide connection either via JNDI or Ldap Connection */ public ADSContext(InitialLdapContext dirContext) public ADSContext(ConnectionWrapper connectionWrapper) { this.dirContext = dirContext; this.connectionWrapper = connectionWrapper; this.dirContext = connectionWrapper.getLdapContext(); } /** @@ -343,6 +346,16 @@ } /** * Returns the connection used to retrieve information by this ADSContext. * * @return the connection */ public ConnectionWrapper getConnection() { return connectionWrapper; } /** * Method called to register a server in the ADS. * * @param serverProperties @@ -2228,7 +2241,7 @@ { ben = getDefaultBackendName(); } helper.createAdministrationSuffix(getDirContext(), ben); helper.createAdministrationSuffix(connectionWrapper, ben); } /** opendj-server-legacy/src/main/java/org/opends/admin/ads/ADSContextHelper.java
@@ -32,10 +32,8 @@ 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.config.client.ManagementContext; import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor; import org.forgerock.opendj.config.client.ldap.LDAPManagementContext; import org.forgerock.opendj.server.config.client.LDIFBackendCfgClient; import org.forgerock.opendj.server.config.client.RootCfgClient; import org.forgerock.opendj.server.config.meta.BackendCfgDefn; @@ -69,14 +67,12 @@ * @throws ADSContextException if the administration suffix could not be * created. */ void createAdministrationSuffix(InitialLdapContext ctx, String backendName) void createAdministrationSuffix(ConnectionWrapper conn, String backendName) throws ADSContextException { try { ManagementContext mCtx = LDAPManagementContext.createFromContext( JNDIDirContextAdaptor.adapt(ctx)); RootCfgClient root = mCtx.getRootConfiguration(); RootCfgClient root = conn.getRootConfiguration(); LDIFBackendCfgClient backend = null; try { opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionWrapper.java
New file @@ -0,0 +1,150 @@ /* * The contents of this file are subject to the terms of the Common Development and * Distribution License (the License). You may not use this file except in compliance with the * License. * * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the * specific language governing permission and limitations under the License. * * When distributing Covered Software, include this CDDL Header Notice in each file and include * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL * Header, with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2016 ForgeRock AS. */ package org.opends.admin.ads.util; import static org.forgerock.opendj.ldap.LDAPConnectionFactory.AUTHN_BIND_REQUEST; import static org.forgerock.opendj.ldap.LDAPConnectionFactory.CONNECT_TIMEOUT; import static org.forgerock.opendj.ldap.LDAPConnectionFactory.SSL_CONTEXT; import static org.forgerock.opendj.ldap.LDAPConnectionFactory.SSL_USE_STARTTLS; import static org.opends.admin.ads.util.ConnectionUtils.getBindDN; import static org.opends.admin.ads.util.ConnectionUtils.getBindPassword; import static org.opends.admin.ads.util.ConnectionUtils.getHostName; import static org.opends.admin.ads.util.ConnectionUtils.getPort; import static org.opends.admin.ads.util.ConnectionUtils.isSSL; import static org.opends.admin.ads.util.ConnectionUtils.isStartTLS; import java.io.Closeable; import java.security.GeneralSecurityException; import java.util.concurrent.TimeUnit; import javax.naming.NamingException; import javax.naming.ldap.InitialLdapContext; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import org.forgerock.opendj.config.LDAPProfile; import org.forgerock.opendj.config.client.ManagementContext; import org.forgerock.opendj.config.client.ldap.LDAPManagementContext; import org.forgerock.opendj.ldap.Connection; import org.forgerock.opendj.ldap.LDAPConnectionFactory; import org.forgerock.opendj.ldap.LdapException; import org.forgerock.opendj.ldap.SSLContextBuilder; import org.forgerock.opendj.ldap.requests.Requests; import org.forgerock.opendj.server.config.client.RootCfgClient; import org.forgerock.util.Options; import org.forgerock.util.time.Duration; import org.opends.server.util.StaticUtils; /** * Wraps a connection to a directory, either relying on JNDI or relying on OpenDJ Connection. * <p> * You can either: * <ul> * <li>call {@code getLdapContext()} method to obtain an {@code InitialLdapContext} for JNDI.</li> * <li>or call the {@code getConnection()} method to obtain a {@code Connection} object.</li> * </ul> */ public class ConnectionWrapper implements Closeable { private final LDAPConnectionFactory connectionFactory; private final Connection connection; private final InitialLdapContext ldapContext; /** * Creates a connection wrapper from JNDI context and connection data. * * @param ctx * the initial ldap context for JNDI * @param connectTimeout * connect timeout to use for the connection * @param trustManager * trust manager to use for a secure connection * @throws NamingException * If an error occurs */ public ConnectionWrapper(InitialLdapContext ctx, long connectTimeout, TrustManager trustManager) throws NamingException { ldapContext = ctx; Options options = Options.defaultOptions(); options.set(CONNECT_TIMEOUT, new Duration(connectTimeout, TimeUnit.MILLISECONDS)); if (isSSL(ctx) || isStartTLS(ctx)) { options.set(SSL_CONTEXT, getSSLContext(trustManager)).set(SSL_USE_STARTTLS, isStartTLS(ctx)); } options.set(AUTHN_BIND_REQUEST, Requests.newSimpleBindRequest(getBindDN(ctx), getBindPassword(ctx).toCharArray())); connectionFactory = new LDAPConnectionFactory(getHostName(ctx), getPort(ctx), options); try { connection = connectionFactory.getConnection(); } catch (LdapException e) { throw new NamingException("Unable to get a connection from connection factory:" + e.getMessage()); } } /** * Returns the connection. * * @return the connection */ public Connection getConnection() { return connection; } /** * Returns the root configuration client by using the inrnal Connection. * * @return the root configuration client */ public RootCfgClient getRootConfiguration() { ManagementContext ctx = LDAPManagementContext.newManagementContext(getConnection(), LDAPProfile.getInstance()); return ctx.getRootConfiguration(); } /** * Returns the ldap context (JNDI). * * @return the ldap context */ public InitialLdapContext getLdapContext() { return ldapContext; } private SSLContext getSSLContext(TrustManager trustManager) throws NamingException { try { return new SSLContextBuilder().setTrustManager(trustManager).getSSLContext(); } catch (GeneralSecurityException e) { throw new NamingException("Unable to perform SSL initialization:" + e.getMessage()); } } @Override public void close() { StaticUtils.close(connectionFactory, connection); StaticUtils.close(ldapContext); } } opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ServerLoader.java
@@ -12,7 +12,7 @@ * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2008-2010 Sun Microsystems, Inc. * Portions Copyright 2013-2015 ForgeRock AS. * Portions Copyright 2013-2016 ForgeRock AS. */ package org.opends.admin.ads.util; @@ -159,51 +159,32 @@ serverDescriptor.setAdsProperties(serverProperties); serverDescriptor.updateAdsPropertiesWithServerProperties(); } catch (NoPermissionException npe) catch (NoPermissionException e) { logger.warn(LocalizableMessage.raw( "Permissions error reading server: "+getLastLdapUrl(), npe)); if (!isAdministratorDn()) { lastException = new TopologyCacheException( TopologyCacheException.Type.NOT_GLOBAL_ADMINISTRATOR, npe, trustManager, getLastLdapUrl()); "Permissions error reading server: " + getLastLdapUrl(), e)); Type type = isAdministratorDn() ? TopologyCacheException.Type.NO_PERMISSIONS : TopologyCacheException.Type.NOT_GLOBAL_ADMINISTRATOR; lastException = new TopologyCacheException(type, e, trustManager, getLastLdapUrl()); } else { lastException = new TopologyCacheException( TopologyCacheException.Type.NO_PERMISSIONS, npe, trustManager, getLastLdapUrl()); } } catch (AuthenticationException ae) catch (AuthenticationException e) { logger.warn(LocalizableMessage.raw( "Authentication exception: "+getLastLdapUrl(), ae)); if (!isAdministratorDn()) { lastException = new TopologyCacheException( TopologyCacheException.Type.NOT_GLOBAL_ADMINISTRATOR, ae, trustManager, getLastLdapUrl()); "Authentication exception: " + getLastLdapUrl(), e)); Type type = isAdministratorDn() ? TopologyCacheException.Type.GENERIC_READING_SERVER : TopologyCacheException.Type.NOT_GLOBAL_ADMINISTRATOR; lastException = new TopologyCacheException(type, e, trustManager, getLastLdapUrl()); } else { lastException = new TopologyCacheException( TopologyCacheException.Type.GENERIC_READING_SERVER, ae, trustManager, getLastLdapUrl()); } } catch (NamingException ne) catch (NamingException e) { logger.warn(LocalizableMessage.raw( "NamingException error reading server: "+getLastLdapUrl(), ne)); Type type = ctx == null ? TopologyCacheException.Type.GENERIC_CREATING_CONNECTION : TopologyCacheException.Type.GENERIC_READING_SERVER; lastException = new TopologyCacheException( type, ne, trustManager, getLastLdapUrl()); "NamingException error reading server: " + getLastLdapUrl(), e)); Type type = ctx != null ? TopologyCacheException.Type.GENERIC_READING_SERVER : TopologyCacheException.Type.GENERIC_CREATING_CONNECTION; lastException = new TopologyCacheException(type, e, trustManager, getLastLdapUrl()); } catch (Throwable t) { @@ -256,13 +237,11 @@ { case LDAPS: ctx = ConnectionUtils.createLdapsContext(lastLdapUrl, dn, pwd, timeout, null, trustManager, null); timeout, null, trustManager, null); break; case START_TLS: ctx = ConnectionUtils.createStartTLSContext(lastLdapUrl, dn, pwd, timeout, null, trustManager, null, null); timeout, null, trustManager, null, null); break; default: ctx = ConnectionUtils.createLdapContext(lastLdapUrl, dn, pwd, @@ -274,6 +253,18 @@ } /** * Returns a Connection Wrapper. * * @return the connection wrapper * @throws NamingException * If an error occurs. */ public ConnectionWrapper createConnectionWrapper() throws NamingException { return new ConnectionWrapper(createContext(), timeout, trustManager); } /** * Returns the last LDAP URL to which we tried to connect. * @return the last LDAP URL to which we tried to connect. */ @@ -310,7 +301,7 @@ */ private String getStartTlsLdapUrl(Map<ServerProperty,Object> serverProperties) { if (isLdapEnabled(serverProperties) && isStartTlsEnabled(serverProperties)) if (isStartTlsEnabled(serverProperties)) { return "ldap://" + getHostNameForLdapUrl(serverProperties) + ":" + serverProperties.get(ServerProperty.LDAP_PORT); @@ -328,8 +319,7 @@ */ private String getLdapsUrl(Map<ServerProperty,Object> serverProperties) { boolean ldapsEnabled = isLdapsEnabled(serverProperties); if (ldapsEnabled) if (isLdapsEnabled(serverProperties)) { return "ldaps://" + getHostNameForLdapUrl(serverProperties) + ":" + serverProperties.get(ServerProperty.LDAPS_PORT); @@ -348,21 +338,13 @@ private String getAdminConnectorUrl( Map<ServerProperty,Object> serverProperties) { boolean portDefined; if (isPropertyEnabled(serverProperties, ServerProperty.ADMIN_ENABLED)) { Object v = serverProperties.get(ServerProperty.ADMIN_PORT); portDefined = v != null; } else Object adminPort = serverProperties.get(ServerProperty.ADMIN_PORT); if (adminPort != null) { portDefined = false; return "ldaps://" + getHostNameForLdapUrl(serverProperties) + ":" + adminPort; } if (portDefined) { return "ldaps://" + getHostNameForLdapUrl(serverProperties) + ":" + serverProperties.get(ServerProperty.ADMIN_PORT); } return null; } @@ -379,7 +361,7 @@ private boolean isStartTlsEnabled(Map<ServerProperty, Object> serverProperties) { return isPropertyEnabled(serverProperties, ServerProperty.STARTTLS_ENABLED); return isLdapEnabled(serverProperties) && isPropertyEnabled(serverProperties, ServerProperty.STARTTLS_ENABLED); } private boolean isPropertyEnabled(Map<ServerProperty, Object> serverProperties, ServerProperty property) @@ -420,9 +402,9 @@ catch (Throwable t) { logger.warn(LocalizableMessage.raw("Error parsing authentication DNs.", t)); } return false; } } /** * Returns the list of LDAP URLs that can be used to connect to the server. @@ -466,24 +448,19 @@ if (adminConnectorUrl != null) { ldapUrls.add( new PreferredConnection(adminConnectorUrl, PreferredConnection.Type.LDAPS)); ldapUrls.add(new PreferredConnection(adminConnectorUrl, PreferredConnection.Type.LDAPS)); } if (ldapsUrl != null) { ldapUrls.add( new PreferredConnection(ldapsUrl, PreferredConnection.Type.LDAPS)); ldapUrls.add(new PreferredConnection(ldapsUrl, PreferredConnection.Type.LDAPS)); } if (startTLSUrl != null) { ldapUrls.add(new PreferredConnection(startTLSUrl, PreferredConnection.Type.START_TLS)); ldapUrls.add(new PreferredConnection(startTLSUrl, PreferredConnection.Type.START_TLS)); } if (ldapUrl != null) { ldapUrls.add(new PreferredConnection(ldapUrl, PreferredConnection.Type.LDAP)); ldapUrls.add(new PreferredConnection(ldapUrl, PreferredConnection.Type.LDAP)); } return ldapUrls; } opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java
@@ -12,14 +12,13 @@ * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2008-2010 Sun Microsystems, Inc. * Portions Copyright 2014-2015 ForgeRock AS. * Portions Copyright 2014-2016 ForgeRock AS. */ package org.opends.guitools.controlpanel.datamodel; import static org.opends.admin.ads.util.ConnectionUtils.*; import static org.opends.guitools.controlpanel.util.Utilities.*; import static org.opends.server.tools.ConfigureWindowsService.*; import static com.forgerock.opendj.cli.Utils.*; import static com.forgerock.opendj.util.OperatingSystem.*; @@ -42,6 +41,7 @@ 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; import org.opends.guitools.controlpanel.datamodel.ServerDescriptor.ServerStatus; @@ -77,7 +77,7 @@ private ServerDescriptor serverDesc; private Set<Task> tasks = new HashSet<>(); private InitialLdapContext ctx; private ConnectionWrapper connWrapper; private InitialLdapContext userDataCtx; private final LDAPConnectionPool connectionPool = new LDAPConnectionPool(); /** Used by the browsers. */ @@ -288,13 +288,14 @@ /** * Sets the dir context to be used by the ControlPanelInfo to retrieve * monitoring and configuration information. * @param ctx the connection. * @param connWrapper the connection. */ public void setDirContext(InitialLdapContext ctx) public void setConnection(ConnectionWrapper connWrapper) { this.ctx = ctx; if (ctx != null) this.connWrapper = connWrapper; if (connWrapper != null) { InitialLdapContext ctx = connWrapper.getLdapContext(); lastWorkingBindDN = ConnectionUtils.getBindDN(ctx); lastWorkingBindPwd = ConnectionUtils.getBindPassword(ctx); lastRemoteHostName = ConnectionUtils.getHostName(ctx); @@ -303,14 +304,14 @@ } /** * Returns the dir context to be used by the ControlPanelInfo to retrieve * Returns the connection to be used by the ControlPanelInfo to retrieve * monitoring and configuration information. * @return the dir context to be used by the ControlPanelInfo to retrieve * @return the connection to be used by the ControlPanelInfo to retrieve * monitoring and configuration information. */ public InitialLdapContext getDirContext() public ConnectionWrapper getConnection() { return ctx; return connWrapper; } /** @@ -443,7 +444,7 @@ ServerDescriptor desc = createNewServerDescriptorInstance(); desc.setIsLocal(isLocal); InitialLdapContext ctx = getDirContext(); ConnectionWrapper connWrapper = getConnection(); if (isLocal) { desc.setOpenDSVersion( @@ -465,11 +466,11 @@ desc.setStatus(status); if (status == ServerStatus.STOPPING) { StaticUtils.close(ctx); this.ctx = null; StaticUtils.close(connWrapper); this.connWrapper = null; if (userDataCtx != null) { unregisterConnection(connectionPool, ctx); unregisterConnection(connectionPool, connWrapper.getLdapContext()); StaticUtils.close(userDataCtx); userDataCtx = null; } @@ -490,41 +491,42 @@ { desc.setStatus(ServerStatus.STARTED); if (ctx == null && lastWorkingBindDN != null) if (connWrapper == null && lastWorkingBindDN != null) { // Try with previous credentials. try { InitialLdapContext context = null; if (isLocal) { ctx = Utilities.getAdminDirContext(this, lastWorkingBindDN, lastWorkingBindPwd); context = Utilities.getAdminDirContext(this, lastWorkingBindDN, lastWorkingBindPwd); } else if (lastRemoteAdministrationURL != null) { ctx = createLdapsContext(lastRemoteAdministrationURL, context = createLdapsContext(lastRemoteAdministrationURL, lastWorkingBindDN, lastWorkingBindPwd, getConnectTimeout(), null, getTrustManager(), null); } connWrapper = new ConnectionWrapper(context, getConnectTimeout(), getTrustManager()); } catch (ConfigReadException | NamingException cre) { // Ignore: we will ask the user for credentials. } if (ctx != null) if (connWrapper != null) { this.ctx = ctx; this.connWrapper = connWrapper; } } if (isLocal && ctx == null) if (isLocal && connWrapper == null) { reader = createNewConfigFromFileReader(); ((ConfigFromFile)reader).readConfiguration(); } else if (!isLocal && ctx == null) else if (!isLocal && connWrapper == null) { desc.setStatus(ServerStatus.NOT_CONNECTED_TO_REMOTE); reader = null; @@ -533,9 +535,9 @@ { Utilities.initializeLegacyConfigurationFramework(); reader = createNewConfigFromDirContextReader(); ((ConfigFromDirContext) reader).readConfiguration(ctx); ((ConfigFromDirContext) reader).readConfiguration(connWrapper); boolean connectionWorks = checkConnections(ctx, userDataCtx); boolean connectionWorks = checkConnections(connWrapper.getLdapContext(), userDataCtx); if (!connectionWorks) { if (isLocal) @@ -549,9 +551,9 @@ desc.setStatus(ServerStatus.NOT_CONNECTED_TO_REMOTE); reader = null; } StaticUtils.close(ctx); this.ctx = null; unregisterConnection(connectionPool, ctx); StaticUtils.close(connWrapper); this.connWrapper = null; unregisterConnection(connectionPool, connWrapper.getLdapContext()); StaticUtils.close(userDataCtx); userDataCtx = null; } @@ -1226,9 +1228,9 @@ adminPort1 = server.getAdminConnector().getPort(); } if (getDirContext() != null) if (getConnection() != null) { adminPort2 = ConnectionUtils.getPort(getDirContext()); adminPort2 = ConnectionUtils.getPort(getConnection().getLdapContext()); } return adminPort1 == adminPort2; } opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteBaseDNAndBackendTask.java
@@ -17,7 +17,7 @@ package org.opends.guitools.controlpanel.task; import static org.opends.messages.AdminToolMessages.*; import static org.opends.messages.ConfigMessages.*; import static org.opends.server.config.ConfigConstants.ATTR_BACKEND_BASE_DN; import java.util.ArrayList; import java.util.Collection; @@ -31,11 +31,11 @@ import java.util.TreeSet; import java.util.concurrent.atomic.AtomicReference; import javax.naming.ldap.InitialLdapContext; import javax.swing.SwingUtilities; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.opendj.config.server.ConfigException; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.guitools.controlpanel.datamodel.BackendDescriptor; import org.opends.guitools.controlpanel.datamodel.BaseDNDescriptor; import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo; @@ -43,10 +43,9 @@ import org.opends.guitools.controlpanel.ui.ProgressDialog; import org.opends.guitools.controlpanel.util.ConfigReader; import org.opends.guitools.controlpanel.util.Utilities; import org.forgerock.opendj.config.client.ManagementContext; import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor; import org.forgerock.opendj.config.client.ldap.LDAPManagementContext; import org.forgerock.opendj.config.server.ServerManagementContext; import org.forgerock.opendj.ldap.schema.AttributeType; import org.forgerock.opendj.ldap.schema.CoreSchema; import org.forgerock.opendj.ldap.schema.Schema; import org.forgerock.opendj.server.config.client.PluggableBackendCfgClient; import org.forgerock.opendj.server.config.client.ReplicationDomainCfgClient; import org.forgerock.opendj.server.config.client.ReplicationSynchronizationProviderCfgClient; @@ -54,11 +53,14 @@ import org.forgerock.opendj.server.config.server.ReplicationDomainCfg; import org.forgerock.opendj.server.config.server.ReplicationSynchronizationProviderCfg; import org.forgerock.opendj.server.config.server.RootCfg; import org.opends.server.config.ConfigConstants; import org.opends.server.types.Entry; import org.opends.server.config.DNConfigAttribute; import org.opends.server.core.ConfigurationHandler; import org.opends.server.core.DirectoryServer; import org.forgerock.opendj.ldap.AttributeDescription; import org.forgerock.opendj.ldap.DN; import org.forgerock.opendj.ldap.Entry; import org.forgerock.opendj.ldap.LinkedAttribute; import org.forgerock.opendj.ldap.LinkedHashMapEntry; import org.opends.server.types.DirectoryException; import org.opends.server.types.OpenDsException; /** The task used to delete a set of base DNs or backends. */ @@ -213,7 +215,7 @@ * Update the configuration in the server. * @throws OpenDsException if an error occurs. */ private void updateConfiguration() throws OpenDsException, ConfigException private void updateConfiguration() throws Exception { boolean configHandlerUpdated = false; final int totalNumber = baseDNsToDelete.size() + backendsToDelete.size(); @@ -228,8 +230,7 @@ { DirectoryServer.deregisterBaseDN(DN.valueOf("cn=config")); } DirectoryServer.getInstance().initializeConfiguration( org.opends.server.extensions.ConfigFileHandler.class.getName(), DirectoryServer.getInstance().initializeConfiguration(ConfigurationHandler.class.getName(), ConfigReader.configFile); getInfo().setMustDeregisterConfig(true); } @@ -300,7 +301,7 @@ }); if (isServerRunning()) { deleteBaseDNs(getInfo().getDirContext(), baseDNs); deleteBaseDNs(getInfo().getConnection(), baseDNs); } else { @@ -369,7 +370,7 @@ }); if (isServerRunning()) { deleteBackend(getInfo().getDirContext(), backend); deleteBackend(getInfo().getConnection(), backend); } else { @@ -427,31 +428,34 @@ newBaseDNs.removeAll(dnsToRemove); String backendName = backend.getBackendID(); DN dn = DN.valueOf("ds-cfg-backend-id" + "=" + backendName + ",cn=Backends,cn=config"); Entry configEntry = DirectoryServer.getConfigurationHandler().getConfigEntry(dn); DN dn = DN.valueOf("ds-cfg-backend-id=" + backendName + ",cn=Backends,cn=config"); updateConfigEntryWithAttribute(dn, ATTR_BACKEND_BASE_DN, newBaseDNs); } DNConfigAttribute baseDNAttr = new DNConfigAttribute( ConfigConstants.ATTR_BACKEND_BASE_DN, INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BASE_DNS.get(), true, true, false, newBaseDNs); configEntry.putConfigAttribute(baseDNAttr); DirectoryServer.getConfigurationHandler().writeUpdatedConfig(); /** Update a config entry with the provided attribute parameters. */ private void updateConfigEntryWithAttribute(DN entryDn, String attrName, List<DN> newBaseDNs) throws DirectoryException, ConfigException { ConfigurationHandler configHandler = DirectoryServer.getConfigurationHandler(); final Entry configEntry = configHandler.getEntry(entryDn); final Entry newEntry = new LinkedHashMapEntry(configEntry); AttributeType attrType = Schema.getDefaultSchema().getAttributeType( attrName, CoreSchema.getDirectoryStringSyntax()); newEntry.replaceAttribute(new LinkedAttribute(AttributeDescription.create(attrType), newBaseDNs)); configHandler.replaceEntry(configEntry, newEntry); } /** * Deletes a set of base DNs. The code assumes that the server is running * and that the provided connection is active. * @param baseDNs the list of base DNs. * @param ctx the connection to the server. * @param connWrapper the connection to the server. * @throws OpenDsException if an error occurs. */ private void deleteBaseDNs(InitialLdapContext ctx, Set<BaseDNDescriptor> baseDNs) throws OpenDsException private void deleteBaseDNs(ConnectionWrapper connWrapper, Set<BaseDNDescriptor> baseDNs) throws Exception { ManagementContext mCtx = LDAPManagementContext.createFromContext( JNDIDirContextAdaptor.adapt(ctx)); RootCfgClient root = mCtx.getRootConfiguration(); RootCfgClient root = connWrapper.getRootConfiguration(); PluggableBackendCfgClient backend = (PluggableBackendCfgClient)root.getBackend( baseDNs.iterator().next().getBackend().getBackendID()); @@ -483,15 +487,13 @@ * Deletes a backend. The code assumes that the server is running * and that the provided connection is active. * @param backend the backend to be deleted. * @param ctx the connection to the server. * @param connWrapper the connection to the server. * @throws OpenDsException if an error occurs. */ private void deleteBackend(InitialLdapContext ctx, BackendDescriptor backend) throws OpenDsException private void deleteBackend(ConnectionWrapper connWrapper, BackendDescriptor backend) throws Exception { ManagementContext mCtx = LDAPManagementContext.createFromContext( JNDIDirContextAdaptor.adapt(ctx)); RootCfgClient root = mCtx.getRootConfiguration(); RootCfgClient root = connWrapper.getRootConfiguration(); root.removeBackend(backend.getBackendID()); root.commit(); } @@ -590,7 +592,7 @@ * @throws OpenDsException if an error occurs. */ private void disableReplicationIfRequired(final BaseDNDescriptor baseDN) throws OpenDsException, ConfigException throws Exception { if (baseDN.getType() == BaseDNDescriptor.Type.REPLICATED) { @@ -600,17 +602,15 @@ { if (isServerRunning()) { InitialLdapContext ctx = getInfo().getDirContext(); ManagementContext mCtx = LDAPManagementContext.createFromContext( JNDIDirContextAdaptor.adapt(ctx)); RootCfgClient root = mCtx.getRootConfiguration(); ConnectionWrapper connWrapper = getInfo().getConnection(); RootCfgClient root = connWrapper.getRootConfiguration(); ReplicationSynchronizationProviderCfgClient sync = null; try { sync = (ReplicationSynchronizationProviderCfgClient) root.getSynchronizationProvider("Multimaster Synchronization"); } catch (OpenDsException oe) catch (Exception oe) { // Ignore this one } @@ -636,7 +636,7 @@ else { RootCfg root = ServerManagementContext.getInstance().getRootConfiguration(); DirectoryServer.getInstance().getServerContext().getServerManagementContext().getRootConfiguration(); ReplicationSynchronizationProviderCfg sync = null; try { opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteIndexTask.java
@@ -26,10 +26,10 @@ import java.util.Set; import java.util.TreeSet; import javax.naming.ldap.InitialLdapContext; import javax.swing.SwingUtilities; import org.forgerock.i18n.LocalizableMessage; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.guitools.controlpanel.datamodel.AbstractIndexDescriptor; import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo; import org.opends.guitools.controlpanel.datamodel.VLVIndexDescriptor; @@ -37,12 +37,10 @@ import org.opends.guitools.controlpanel.ui.ProgressDialog; import org.opends.guitools.controlpanel.util.ConfigReader; import org.opends.guitools.controlpanel.util.Utilities; import org.forgerock.opendj.config.client.ManagementContext; import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor; import org.forgerock.opendj.config.client.ldap.LDAPManagementContext; import org.forgerock.opendj.server.config.client.BackendCfgClient; import org.forgerock.opendj.server.config.client.PluggableBackendCfgClient; import org.forgerock.opendj.server.config.client.RootCfgClient; import org.opends.server.core.ConfigurationHandler; import org.opends.server.core.DirectoryServer; import org.forgerock.opendj.ldap.DN; import org.opends.server.types.OpenDsException; @@ -128,7 +126,7 @@ * @throws OpenDsException * if an error occurs. */ private void updateConfiguration() throws OpenDsException private void updateConfiguration() throws Exception { boolean configHandlerUpdated = false; final int totalNumber = indexesToDelete.size(); @@ -144,7 +142,7 @@ DirectoryServer.deregisterBaseDN(DN.valueOf("cn=config")); } DirectoryServer.getInstance().initializeConfiguration( org.opends.server.extensions.ConfigFileHandler.class.getName(), ConfigReader.configFile); ConfigurationHandler.class.getName(), ConfigReader.configFile); getInfo().setMustDeregisterConfig(true); } boolean isFirst = true; @@ -197,7 +195,7 @@ }); if (isServerRunning()) { deleteIndex(getInfo().getDirContext(), index); deleteIndex(getInfo().getConnection(), index); } else { @@ -263,7 +261,7 @@ { dn = "ds-cfg-attribute" + "=" + index.getName() + ",cn=Index," + backendId + ",cn=Backends,cn=config"; } DirectoryServer.getConfigurationHandler().deleteEntry(DN.valueOf(dn), null); DirectoryServer.getConfigurationHandler().deleteEntry(DN.valueOf(dn)); } /** @@ -277,10 +275,9 @@ * @throws OpenDsException * if an error occurs. */ private void deleteIndex(final InitialLdapContext ctx, final AbstractIndexDescriptor index) throws OpenDsException private void deleteIndex(final ConnectionWrapper connWrapper, final AbstractIndexDescriptor index) throws Exception { final ManagementContext mCtx = LDAPManagementContext.createFromContext(JNDIDirContextAdaptor.adapt(ctx)); final RootCfgClient root = mCtx.getRootConfiguration(); final RootCfgClient root = connWrapper.getRootConfiguration(); final BackendCfgClient backend = root.getBackend(index.getBackend().getBackendID()); removeBackendIndex((PluggableBackendCfgClient) backend, index); @@ -288,7 +285,7 @@ } private void removeBackendIndex(final PluggableBackendCfgClient backend, final AbstractIndexDescriptor index) throws OpenDsException throws Exception { final String indexName = index.getName(); if (isVLVIndex(index)) opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java
@@ -18,7 +18,6 @@ import static org.opends.messages.AdminToolMessages.*; import static org.opends.messages.QuickSetupMessages.*; import static com.forgerock.opendj.cli.Utils.*; import java.awt.Component; @@ -1195,7 +1194,7 @@ { try { InitialLdapContext ctx = getInfo().getDirContext(); InitialLdapContext ctx = getInfo().getConnection().getLdapContext(); InitialLdapContext ctx1 = controller.getConfigurationConnection(); boolean setConnection = ctx != ctx1; updateNumSubordinateHacker(desc); @@ -1216,7 +1215,8 @@ try { controller.setConnections( getInfo().getServerDescriptor(), getInfo().getDirContext(), getInfo().getUserDataDirContext()); getInfo().getServerDescriptor(), getInfo().getConnection().getLdapContext(), getInfo().getUserDataDirContext()); applyButtonClicked(); } catch (NamingException ne) opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java
@@ -12,7 +12,7 @@ * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2008-2009 Sun Microsystems, Inc. * Portions Copyright 2014-2015 ForgeRock AS. * Portions Copyright 2014-2016 ForgeRock AS. */ package org.opends.guitools.controlpanel.ui; @@ -88,6 +88,7 @@ { private boolean lastStatusStopped; /** {@inheritDoc} */ @Override public void configurationChanged(final ConfigurationChangeEvent ev) { final boolean displayLogin; @@ -109,6 +110,7 @@ SwingUtilities.invokeLater(new Runnable() { /** {@inheritDoc} */ @Override public void run() { updateAuthenticationLabel(ev.getNewDescriptor()); @@ -179,7 +181,7 @@ try { String bindDN = ConnectionUtils.getBindDN( statusPane.getInfo().getDirContext()); statusPane.getInfo().getConnection().getLdapContext()); lAuthenticatedAs.setText( INFO_CTRL_PANEL_AUTHENTICATED_AS.get(bindDN).toString()); } opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ImportLDIFPanel.java
@@ -16,6 +16,7 @@ */ package org.opends.guitools.controlpanel.ui; import static org.opends.admin.ads.util.ConnectionUtils.getHostPort; import static org.opends.messages.AdminToolMessages.*; import static org.opends.messages.QuickSetupMessages.*; import static com.forgerock.opendj.cli.Utils.OBFUSCATED_VALUE; @@ -30,6 +31,7 @@ import java.util.Set; import java.util.TreeSet; import javax.naming.ldap.InitialLdapContext; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JCheckBox; @@ -816,12 +818,12 @@ INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_INITIALIZE_ALL.get()+ "<br><b>"+cmd+"</b><br><br>", ColorAndFontConstants.progressFont)); InitialLdapContext ctx = getInfo().getConnection().getLdapContext(); for (DN baseDN : replicatedBaseDNs) { LocalizableMessage msg = INFO_PROGRESS_INITIALIZING_SUFFIX.get(baseDN, ConnectionUtils.getHostPort(getInfo().getDirContext())); LocalizableMessage msg = INFO_PROGRESS_INITIALIZING_SUFFIX.get(baseDN, getHostPort(ctx)); getProgressDialog().appendProgressHtml(Utilities.applyFont(msg + "<br>", ColorAndFontConstants.progressFont)); repl.initializeAllSuffix(baseDN.toString(), getInfo().getDirContext(), true); repl.initializeAllSuffix(baseDN.toString(), ctx, true); } } @@ -833,7 +835,7 @@ args.add("--hostName"); args.add(getInfo().getServerDescriptor().getHostname()); args.add("--port"); args.add(String.valueOf(ConnectionUtils.getPort(getInfo().getDirContext()))); args.add(String.valueOf(ConnectionUtils.getPort(getInfo().getConnection().getLdapContext()))); for (DN baseDN : replicatedBaseDNs) { args.add("--baseDN"); opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/IndexPanel.java
@@ -32,7 +32,6 @@ import java.util.SortedSet; import java.util.TreeSet; import javax.naming.ldap.InitialLdapContext; import javax.swing.Box; import javax.swing.JCheckBox; import javax.swing.JComponent; @@ -45,6 +44,7 @@ import javax.swing.event.DocumentListener; import org.forgerock.i18n.LocalizableMessage; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.guitools.controlpanel.datamodel.AbstractIndexDescriptor; import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo; import org.opends.guitools.controlpanel.datamodel.IndexDescriptor; @@ -56,16 +56,13 @@ import org.opends.guitools.controlpanel.task.Task; import org.opends.guitools.controlpanel.util.ConfigReader; import org.opends.guitools.controlpanel.util.Utilities; import org.forgerock.opendj.config.client.ManagementContext; import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor; import org.forgerock.opendj.config.client.ldap.LDAPManagementContext; import org.forgerock.opendj.server.config.client.BackendCfgClient; import org.forgerock.opendj.server.config.client.BackendIndexCfgClient; import org.forgerock.opendj.server.config.client.PluggableBackendCfgClient; import org.opends.server.core.ConfigurationHandler; import org.opends.server.core.DirectoryServer; import org.forgerock.opendj.ldap.schema.AttributeType; import org.forgerock.opendj.ldap.DN; import org.opends.server.types.OpenDsException; /** * The panel that displays an existing index (it appears on the right of the @@ -549,7 +546,7 @@ * @throws OpenDsException * if there is an error updating the configuration. */ private void updateConfiguration() throws OpenDsException private void updateConfiguration() throws Exception { boolean configHandlerUpdated = false; try @@ -563,7 +560,7 @@ DirectoryServer.deregisterBaseDN(DN.valueOf("cn=config")); } DirectoryServer.getInstance().initializeConfiguration( org.opends.server.extensions.ConfigFileHandler.class.getName(), ConfigReader.configFile); ConfigurationHandler.class.getName(), ConfigReader.configFile); getInfo().setMustDeregisterConfig(true); } else @@ -598,7 +595,7 @@ if (isServerRunning()) { modifyIndexOnline(getInfo().getDirContext()); modifyIndexOnline(getInfo().getConnection()); } else { @@ -628,19 +625,18 @@ /** * Modifies index using the provided connection. * * @param ctx * @param connWrapper * the connection to be used to update the index configuration. * @throws OpenDsException * if there is an error updating the server. */ private void modifyIndexOnline(final InitialLdapContext ctx) throws OpenDsException private void modifyIndexOnline(final ConnectionWrapper connWrapper) throws Exception { final ManagementContext mCtx = LDAPManagementContext.createFromContext(JNDIDirContextAdaptor.adapt(ctx)); final BackendCfgClient backend = mCtx.getRootConfiguration().getBackend(backendName); final BackendCfgClient backend = connWrapper.getRootConfiguration().getBackend(backendName); modifyBackendIndexOnline((PluggableBackendCfgClient) backend); } private void modifyBackendIndexOnline(final PluggableBackendCfgClient backend) throws OpenDsException private void modifyBackendIndexOnline(final PluggableBackendCfgClient backend) throws Exception { final BackendIndexCfgClient index = backend.getBackendIndex(attributeName); if (!indexTypes.equals(indexToModify.getTypes())) opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java
@@ -48,6 +48,7 @@ import org.opends.admin.ads.ServerDescriptor; 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.ControlPanelArgumentParser; import org.opends.guitools.controlpanel.datamodel.ConfigReadException; import org.opends.guitools.controlpanel.datamodel.CustomSearchResult; @@ -68,7 +69,6 @@ import org.opends.server.util.StaticUtils; import static com.forgerock.opendj.cli.Utils.*; import static org.opends.admin.ads.util.ConnectionUtils.*; import static org.opends.guitools.controlpanel.util.Utilities.*; import static org.opends.messages.AdminToolMessages.*; @@ -582,7 +582,8 @@ }); closeInfoConnections(); getInfo().setIsLocal(isLocal); getInfo().setDirContext(ctx); getInfo().setConnection( new ConnectionWrapper(ctx, getInfo().getConnectTimeout(), getInfo().getTrustManager())); getInfo().setUserDataDirContext(null); getInfo().regenerateDescriptor(); return ctx; @@ -972,6 +973,7 @@ private void closeInfoConnections() { StaticUtils.close(getInfo().getDirContext(), getInfo().getUserDataDirContext()); StaticUtils.close(getInfo().getConnection()); StaticUtils.close(getInfo().getUserDataDirContext()); } } opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LoginPanel.java
@@ -34,6 +34,7 @@ import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.opends.admin.ads.util.ApplicationTrustManager; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.guitools.controlpanel.datamodel.ConfigReadException; import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent; import org.opends.guitools.controlpanel.util.BackgroundTask; @@ -46,7 +47,6 @@ import org.opends.server.util.StaticUtils; import static com.forgerock.opendj.cli.Utils.*; import static org.opends.messages.AdminToolMessages.*; import static org.opends.messages.QuickSetupMessages.*; @@ -204,11 +204,11 @@ ctx = Utilities.getAdminDirContext(getInfo(), dn.getText(), String.valueOf(pwd.getPassword())); if (getInfo().getDirContext() != null) if (getInfo().getConnection() != null) { try { getInfo().getDirContext().close(); getInfo().getConnection().close(); } catch (Throwable t) { @@ -240,7 +240,8 @@ INFO_CTRL_PANEL_READING_CONFIGURATION_SUMMARY.get()); } }); getInfo().setDirContext(ctx); getInfo().setConnection( new ConnectionWrapper(ctx, getInfo().getConnectTimeout(), getInfo().getTrustManager())); getInfo().setUserDataDirContext(null); getInfo().regenerateDescriptor(); return ctx; opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java
@@ -77,9 +77,7 @@ import org.opends.quicksetup.Installation; import org.opends.quicksetup.installer.InstallerHelper; import org.opends.quicksetup.util.Utils; import org.forgerock.opendj.config.AdminException; import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor; import org.forgerock.opendj.config.client.ldap.LDAPManagementContext; import org.forgerock.opendj.ldap.LdapException; import org.forgerock.opendj.server.config.client.BackendCfgClient; import org.forgerock.opendj.server.config.client.BackendIndexCfgClient; import org.forgerock.opendj.server.config.client.PluggableBackendCfgClient; @@ -87,8 +85,8 @@ import org.forgerock.opendj.server.config.meta.BackendCfgDefn; import org.forgerock.opendj.server.config.meta.BackendIndexCfgDefn; import org.forgerock.opendj.server.config.meta.BackendIndexCfgDefn.IndexType; import org.opends.server.core.ConfigurationHandler; import org.opends.server.core.DirectoryServer; import org.opends.server.extensions.ConfigFileHandler; import org.opends.server.tools.BackendCreationHelper; import org.opends.server.tools.BackendCreationHelper.DefaultIndex; import org.opends.server.tools.BackendTypeHelper; @@ -853,7 +851,7 @@ return args; } private void updateConfigurationOnline() throws OpenDsException private void updateConfigurationOnline() throws Exception { SwingUtilities.invokeLater(new Runnable() { @@ -876,7 +874,7 @@ refreshProgressBar(); } private void updateConfigurationOffline() throws OpenDsException private void updateConfigurationOffline() throws Exception { boolean configHandlerUpdated = false; try @@ -887,7 +885,7 @@ DirectoryServer.deregisterBaseDN(DN.valueOf("cn=config")); } DirectoryServer.getInstance().initializeConfiguration( ConfigFileHandler.class.getName(), ConfigReader.configFile); ConfigurationHandler.class.getName(), ConfigReader.configFile); getInfo().setMustDeregisterConfig(true); configHandlerUpdated = true; @@ -919,7 +917,7 @@ }); } private void performTask() throws OpenDsException private void performTask() throws Exception { final String backendName = getBackendName(); if (isNewBackend()) @@ -934,7 +932,7 @@ } } private void createBackend(String backendName) throws OpenDsException private void createBackend(String backendName) throws Exception { if (!isServerRunning()) { @@ -959,11 +957,11 @@ } @RemoveOnceNewConfigFrameworkIsUsed("Use BackendCreationHelper.createBackend(...)") private void createBackendOnline(String backendName) throws OpenDsException private void createBackendOnline(String backendName) throws Exception { final RootCfgClient root = getRootConfigurationClient(); final BackendCfgClient backend = root.createBackend(getSelectedBackendType().getLegacyConfigurationFrameworkBackend(), backendName, null); root.createBackend(getSelectedBackendType().getBackend(), backendName, null); backend.setEnabled(true); backend.setBaseDN(Collections.singleton(DN.valueOf(newBaseDN))); backend.setBackendId(backendName); @@ -971,13 +969,12 @@ backend.commit(); } private RootCfgClient getRootConfigurationClient() private RootCfgClient getRootConfigurationClient() throws LdapException { final JNDIDirContextAdaptor jndiContext = JNDIDirContextAdaptor.adapt(getInfo().getDirContext()); return LDAPManagementContext.createFromContext(jndiContext).getRootConfiguration(); return getInfo().getConnection().getRootConfiguration(); } private void addNewBaseDN(String backendName) throws OpenDsException private void addNewBaseDN(String backendName) throws Exception { if (!isServerRunning()) { @@ -1014,7 +1011,7 @@ } } private void createAdditionalIndexes() throws OpenDsException private void createAdditionalIndexes() throws Exception { final String backendName = getBackendName(); displayCreateAdditionalIndexesDsConfigCmdLine(); @@ -1023,7 +1020,7 @@ displayCreateAdditionalIndexesDone(); } private void addBackendDefaultIndexes(PluggableBackendCfgClient backendCfgClient) throws AdminException private void addBackendDefaultIndexes(PluggableBackendCfgClient backendCfgClient) throws Exception { for (DefaultIndex defaultIndex : BackendCreationHelper.DEFAULT_INDEXES) { opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewIndexPanel.java
@@ -31,12 +31,12 @@ import java.util.SortedSet; import java.util.TreeSet; import javax.naming.ldap.InitialLdapContext; import javax.swing.DefaultComboBoxModel; import javax.swing.JCheckBox; import javax.swing.SwingUtilities; import org.forgerock.i18n.LocalizableMessage; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.guitools.controlpanel.datamodel.BackendDescriptor; import org.opends.guitools.controlpanel.datamodel.CategorizedComboBoxElement; import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo; @@ -48,18 +48,15 @@ import org.opends.guitools.controlpanel.util.ConfigReader; import org.opends.guitools.controlpanel.util.Utilities; import org.forgerock.opendj.config.PropertyException; import org.forgerock.opendj.config.client.ManagementContext; import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor; import org.forgerock.opendj.config.client.ldap.LDAPManagementContext; import org.forgerock.opendj.server.config.client.BackendCfgClient; import org.forgerock.opendj.server.config.client.BackendIndexCfgClient; import org.forgerock.opendj.server.config.client.PluggableBackendCfgClient; import org.forgerock.opendj.server.config.meta.BackendIndexCfgDefn; import org.opends.server.core.ConfigurationHandler; import org.opends.server.core.DirectoryServer; import org.forgerock.opendj.ldap.schema.AttributeType; import org.opends.server.schema.SomeSchemaElement; import org.forgerock.opendj.ldap.DN; import org.opends.server.types.OpenDsException; import org.opends.server.types.Schema; /** @@ -395,7 +392,7 @@ return canLaunch; } private void updateConfiguration() throws OpenDsException private void updateConfiguration() throws Exception { boolean configHandlerUpdated = false; try @@ -409,7 +406,7 @@ DirectoryServer.deregisterBaseDN(DN.valueOf("cn=config")); } DirectoryServer.getInstance().initializeConfiguration( org.opends.server.extensions.ConfigFileHandler.class.getName(), ConfigReader.configFile); ConfigurationHandler.class.getName(), ConfigReader.configFile); getInfo().setMustDeregisterConfig(true); } else @@ -438,7 +435,7 @@ if (isServerRunning()) { createIndexOnline(getInfo().getDirContext()); createIndexOnline(getInfo().getConnection()); } else { @@ -463,14 +460,13 @@ } } private void createIndexOnline(final InitialLdapContext ctx) throws OpenDsException private void createIndexOnline(final ConnectionWrapper connWrapper) throws Exception { final ManagementContext mCtx = LDAPManagementContext.createFromContext(JNDIDirContextAdaptor.adapt(ctx)); final BackendCfgClient backend = mCtx.getRootConfiguration().getBackend(backendName.getText()); final BackendCfgClient backend = connWrapper.getRootConfiguration().getBackend(backendName.getText()); createBackendIndexOnline((PluggableBackendCfgClient) backend); } private void createBackendIndexOnline(final PluggableBackendCfgClient backend) throws OpenDsException private void createBackendIndexOnline(final PluggableBackendCfgClient backend) throws Exception { final List<PropertyException> exceptions = new ArrayList<>(); final BackendIndexCfgClient index = backend.createBackendIndex( opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java
@@ -28,12 +28,12 @@ import java.util.Set; import java.util.TreeSet; import javax.naming.ldap.InitialLdapContext; import javax.swing.SwingUtilities; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.opendj.ldap.DN; import org.forgerock.opendj.ldap.SearchScope; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.guitools.controlpanel.datamodel.BackendDescriptor; import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo; import org.opends.guitools.controlpanel.datamodel.ServerDescriptor; @@ -44,15 +44,12 @@ import org.opends.guitools.controlpanel.util.ConfigReader; import org.opends.guitools.controlpanel.util.Utilities; import org.forgerock.opendj.config.PropertyException; import org.forgerock.opendj.config.client.ManagementContext; import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor; import org.forgerock.opendj.config.client.ldap.LDAPManagementContext; import org.forgerock.opendj.server.config.client.BackendCfgClient; import org.forgerock.opendj.server.config.client.BackendVLVIndexCfgClient; import org.forgerock.opendj.server.config.client.PluggableBackendCfgClient; import org.forgerock.opendj.server.config.meta.BackendVLVIndexCfgDefn; import org.opends.server.core.ConfigurationHandler; import org.opends.server.core.DirectoryServer; import org.opends.server.types.OpenDsException; /** * Panel that appears when the user defines a new VLV index. @@ -217,7 +214,7 @@ return true; } private void updateConfiguration() throws OpenDsException private void updateConfiguration() throws Exception { boolean configHandlerUpdated = false; try @@ -231,7 +228,7 @@ DirectoryServer.deregisterBaseDN(DN.valueOf("cn=config")); } DirectoryServer.getInstance().initializeConfiguration( org.opends.server.extensions.ConfigFileHandler.class.getName(), ConfigReader.configFile); ConfigurationHandler.class.getName(), ConfigReader.configFile); getInfo().setMustDeregisterConfig(true); } else @@ -260,7 +257,7 @@ if (isServerRunning()) { createVLVIndexOnline(getInfo().getDirContext()); createVLVIndexOnline(getInfo().getConnection()); } else { @@ -286,14 +283,13 @@ } } private void createVLVIndexOnline(InitialLdapContext ctx) throws OpenDsException private void createVLVIndexOnline(ConnectionWrapper ctx) throws Exception { final ManagementContext mCtx = LDAPManagementContext.createFromContext(JNDIDirContextAdaptor.adapt(ctx)); final BackendCfgClient backend = mCtx.getRootConfiguration().getBackend(backendName.getText()); final BackendCfgClient backend = ctx.getRootConfiguration().getBackend(backendName.getText()); createBackendVLVIndexOnline((PluggableBackendCfgClient) backend); } private void createBackendVLVIndexOnline(final PluggableBackendCfgClient backend) throws OpenDsException private void createBackendVLVIndexOnline(final PluggableBackendCfgClient backend) throws Exception { final List<PropertyException> exceptions = new ArrayList<>(); final BackendVLVIndexCfgClient index = opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
@@ -12,7 +12,7 @@ * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2008-2010 Sun Microsystems, Inc. * Portions Copyright 2013-2015 ForgeRock AS. * Portions Copyright 2013-2016 ForgeRock AS. */ package org.opends.guitools.controlpanel.ui; @@ -2010,7 +2010,7 @@ ctls.setReturningAttributes(new String[] { SchemaConstants.NO_ATTRIBUTES }); String filter = BrowserController.ALL_OBJECTS_FILTER; NamingEnumeration<SearchResult> result = getInfo().getDirContext().search(Utilities.getJNDIName(dn), filter, ctls); getInfo().getConnection().getLdapContext().search(Utilities.getJNDIName(dn), filter, ctls); try { @@ -2051,7 +2051,7 @@ ctls.setReturningAttributes(new String[] { ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME }); String filter = BrowserController.ALL_OBJECTS_FILTER; NamingEnumeration<SearchResult> result = getInfo().getDirContext().search(Utilities.getJNDIName(dn), filter, ctls); getInfo().getConnection().getLdapContext().search(Utilities.getJNDIName(dn), filter, ctls); try { opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/VLVIndexPanel.java
@@ -33,7 +33,6 @@ import java.util.Set; import java.util.TreeSet; import javax.naming.ldap.InitialLdapContext; import javax.swing.Box; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; @@ -50,9 +49,9 @@ import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.LocalizedIllegalArgumentException; import org.forgerock.opendj.config.server.ConfigException; import org.forgerock.opendj.ldap.DN; import org.forgerock.opendj.ldap.SearchScope; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.guitools.controlpanel.datamodel.AbstractIndexDescriptor; import org.opends.guitools.controlpanel.datamodel.CategorizedComboBoxElement; import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo; @@ -65,14 +64,11 @@ import org.opends.guitools.controlpanel.task.Task; import org.opends.guitools.controlpanel.util.ConfigReader; import org.opends.guitools.controlpanel.util.Utilities; import org.forgerock.opendj.config.client.ManagementContext; import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor; import org.forgerock.opendj.config.client.ldap.LDAPManagementContext; import org.forgerock.opendj.server.config.client.BackendVLVIndexCfgClient; import org.forgerock.opendj.server.config.client.PluggableBackendCfgClient; import org.forgerock.opendj.server.config.client.RootCfgClient; import org.opends.server.core.ConfigurationHandler; import org.opends.server.core.DirectoryServer; import org.opends.server.types.OpenDsException; /** * The panel that displays an existing VLV index (it appears on the right of the @@ -604,7 +600,7 @@ return canLaunch; } private void updateConfiguration() throws OpenDsException, ConfigException private void updateConfiguration() throws Exception { boolean configHandlerUpdated = false; try @@ -618,7 +614,7 @@ DirectoryServer.deregisterBaseDN(DN.valueOf("cn=config")); } DirectoryServer.getInstance().initializeConfiguration( org.opends.server.extensions.ConfigFileHandler.class.getName(), ConfigReader.configFile); ConfigurationHandler.class.getName(), ConfigReader.configFile); getInfo().setMustDeregisterConfig(true); } else @@ -648,7 +644,7 @@ if (isServerRunning()) { modifyVLVIndexOnline(getInfo().getDirContext()); modifyVLVIndexOnline(getInfo().getConnection()); } else { @@ -683,14 +679,13 @@ * @throws OpenDsException * if there is an error updating the server. */ private void modifyVLVIndexOnline(InitialLdapContext ctx) throws OpenDsException private void modifyVLVIndexOnline(ConnectionWrapper connWrapper) throws Exception { final ManagementContext mCtx = LDAPManagementContext.createFromContext(JNDIDirContextAdaptor.adapt(ctx)); final RootCfgClient root = mCtx.getRootConfiguration(); final RootCfgClient root = connWrapper.getRootConfiguration(); modifyBackendVLVIndexOnline((PluggableBackendCfgClient) root.getBackend(backendID)); } private void modifyBackendVLVIndexOnline(final PluggableBackendCfgClient backend) throws OpenDsException private void modifyBackendVLVIndexOnline(final PluggableBackendCfgClient backend) throws Exception { final BackendVLVIndexCfgClient index = backend.getBackendVLVIndex(indexName); final DN b = DN.valueOf(baseDN); opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
@@ -45,6 +45,7 @@ import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.config.server.ConfigException; import org.opends.admin.ads.util.ConnectionUtils; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.guitools.controlpanel.datamodel.AbstractIndexDescriptor; import org.opends.guitools.controlpanel.datamodel.BackendDescriptor; import org.opends.guitools.controlpanel.datamodel.BaseDNDescriptor; @@ -55,12 +56,6 @@ import org.opends.guitools.controlpanel.datamodel.VLVIndexDescriptor; import org.opends.guitools.controlpanel.datamodel.VLVSortOrder; import org.opends.guitools.controlpanel.task.OnlineUpdateException; import org.forgerock.opendj.ldap.LdapException; import org.forgerock.opendj.config.client.ConcurrentModificationException; import org.forgerock.opendj.config.client.ManagementContext; import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor; import org.forgerock.opendj.config.client.ldap.LDAPManagementContext; import org.forgerock.opendj.server.config.client.AdministrationConnectorCfgClient; import org.forgerock.opendj.server.config.client.BackendCfgClient; import org.forgerock.opendj.server.config.client.BackendIndexCfgClient; @@ -240,12 +235,12 @@ * Reads configuration and monitoring information using the provided * connection. * * @param context * @param connWrapper * the connection to be used to read the information. */ public void readConfiguration(final InitialLdapContext context) public void readConfiguration(final ConnectionWrapper connWrapper) { final List<OpenDsException> errors = new ArrayList<>(); final List<Exception> errors = new ArrayList<>(); final Set<ConnectionHandlerDescriptor> connectionHandlers = new HashSet<>(); final Set<BackendDescriptor> backendDescriptors = new HashSet<>(); final Set<DN> as = new HashSet<>(); @@ -260,18 +255,18 @@ hmConnectionHandlersMonitor.clear(); readSchemaIfNeeded(context, errors); readSchemaIfNeeded(connWrapper.getLdapContext(), errors); try { readConfig(context, connectionHandlers, backendDescriptors, as, errors); readConfig(connWrapper, connectionHandlers, backendDescriptors, as, errors); } catch (final Throwable t) { errors.add(new OnlineUpdateException(ERR_READING_CONFIG_LDAP.get(t), t)); } for (OpenDsException oe : errors) for (Exception oe : errors) { logger.warn(LocalizableMessage.raw("Error reading configuration: " + oe, oe)); } @@ -280,7 +275,7 @@ backends = Collections.unmodifiableSet(backendDescriptors); try { updateMonitorInformation(context, errors); updateMonitorInformation(connWrapper.getLdapContext(), errors); } catch (Throwable t) { @@ -290,7 +285,7 @@ try { updateTaskInformation(context, errors, tasks); updateTaskInformation(connWrapper.getLdapContext(), errors, tasks); } catch (Throwable t) { @@ -311,7 +306,7 @@ exceptions = Collections.unmodifiableList(errors); } private void readSchemaIfNeeded(final InitialLdapContext context, final List<OpenDsException> errors) private void readSchemaIfNeeded(final InitialLdapContext context, final List<Exception> errors) { if (mustReadSchema()) { @@ -332,13 +327,11 @@ } } private void readConfig(final InitialLdapContext context, private void readConfig(final ConnectionWrapper connWrapper, final Set<ConnectionHandlerDescriptor> connectionHandlers, final Set<BackendDescriptor> backendDescriptors, final Set<DN> alternateBindDNs, final List<OpenDsException> errors) throws Exception final Set<DN> alternateBindDNs, final List<Exception> errors) throws Exception { // Get the Directory Server configuration handler and use it. ManagementContext mCtx = LDAPManagementContext.createFromContext(JNDIDirContextAdaptor.adapt(context)); final RootCfgClient root = mCtx.getRootConfiguration(); final RootCfgClient root = connWrapper.getRootConfiguration(); readAdminConnector(root, errors); readConnectionHandlers(connectionHandlers, root, errors); @@ -357,22 +350,23 @@ readAlternateBindDNs(alternateBindDNs, root, errors); } private void readAdminConnector(final RootCfgClient root, final List<OpenDsException> errors) private void readAdminConnector(final RootCfgClient root, final List<Exception> errors) { try { AdministrationConnectorCfgClient adminConnector = root.getAdministrationConnector(); this.adminConnector = getConnectionHandler(adminConnector); } catch (OpenDsException oe) catch (Exception oe) { errors.add(oe); } } private void readConnectionHandlers(final Set<ConnectionHandlerDescriptor> connectionHandlers, RootCfgClient root, final List<OpenDsException> errors) throws ConcurrentModificationException, AuthorizationException, CommunicationException RootCfgClient root, final List<Exception> errors) { try { for (String connHandler : root.listConnectionHandlers()) { @@ -381,15 +375,20 @@ ConnectionHandlerCfgClient connectionHandler = root.getConnectionHandler(connHandler); connectionHandlers.add(getConnectionHandler(connectionHandler, connHandler)); } catch (OpenDsException oe) catch (Exception oe) { errors.add(oe); } } } catch (Exception oe) { errors.add(oe); } } private void readBackendConfiguration(final Set<BackendDescriptor> backendDescriptors, final RootCfgClient root, final List<OpenDsException> errors) throws Exception final RootCfgClient root, final List<Exception> errors) throws Exception { for (final String backendName : root.listBackends()) { @@ -426,7 +425,7 @@ } backendDescriptors.add(desc); } catch (OpenDsException oe) catch (Exception oe) { errors.add(oe); } @@ -466,14 +465,14 @@ } private void refreshBackendConfig(final Set<IndexDescriptor> indexes, final Set<VLVIndexDescriptor> vlvIndexes, final BackendCfgClient backend, final List<OpenDsException> errors) final Set<VLVIndexDescriptor> vlvIndexes, final BackendCfgClient backend, final List<Exception> errors) { final PluggableBackendCfgClient db = (PluggableBackendCfgClient) backend; readBackendIndexes(indexes, errors, db); readBackendVLVIndexes(vlvIndexes, errors, db); } private void readBackendIndexes(final Set<IndexDescriptor> indexes, final List<OpenDsException> errors, private void readBackendIndexes(final Set<IndexDescriptor> indexes, final List<Exception> errors, final PluggableBackendCfgClient db) { indexes.add(new IndexDescriptor(DN2ID_INDEX_NAME)); @@ -488,14 +487,14 @@ null, IndexTypeDescriptor.fromBackendIndexTypes(index.getIndexType()), index.getIndexEntryLimit())); } } catch (OpenDsException oe) catch (Exception oe) { errors.add(oe); } } private void readBackendVLVIndexes(final Set<VLVIndexDescriptor> vlvIndexes, final List<OpenDsException> errors, final PluggableBackendCfgClient db) final List<Exception> errors, final PluggableBackendCfgClient db) { try { @@ -508,19 +507,19 @@ index.getFilter(), sortOrder)); } } catch (OpenDsException oe) catch (Exception oe) { errors.add(oe); } } private boolean readIfReplicationIsSecure(final RootCfgClient root, final List<OpenDsException> errors) private boolean readIfReplicationIsSecure(final RootCfgClient root, final List<Exception> errors) { try { return root.getCryptoManager().isSSLEncryption(); } catch (OpenDsException oe) catch (Exception oe) { errors.add(oe); return false; @@ -533,7 +532,7 @@ { return (ReplicationSynchronizationProviderCfgClient) root.getSynchronizationProvider(SYNC_PROVIDER_NAME); } catch (OpenDsException oe) catch (Exception oe) { return null; } @@ -541,7 +540,7 @@ private void readReplicationConfig(final Set<ConnectionHandlerDescriptor> connectionHandlers, final Set<BackendDescriptor> backendDescriptors, final ReplicationSynchronizationProviderCfgClient sync, boolean isReplicationSecure, final List<OpenDsException> errors) boolean isReplicationSecure, final List<Exception> errors) { replicationPort = -1; try @@ -585,14 +584,14 @@ } } } catch (OpenDsException oe) catch (Exception oe) { errors.add(oe); } } private void readAlternateBindDNs(final Set<DN> alternateBindDNs, final RootCfgClient root, final List<OpenDsException> errors) final List<Exception> errors) { try { @@ -607,7 +606,7 @@ } } } catch (OpenDsException oe) catch (Exception oe) { errors.add(oe); } @@ -860,7 +859,7 @@ * if there is an error retrieving the values of the search result. */ private void handleTaskSearchResult(SearchResult sr, String searchBaseDN, Collection<TaskEntry> taskEntries, List<OpenDsException> ex) throws NamingException List<Exception> ex) throws NamingException { CustomSearchResult csr = new CustomSearchResult(sr, searchBaseDN); try @@ -877,7 +876,7 @@ } private void updateMonitorInformation(InitialLdapContext ctx, List<OpenDsException> ex) List<Exception> ex) { // Read monitoring information: since it is computed, it is faster // to get everything in just one request. @@ -924,7 +923,7 @@ * @param ts * the list of task entries to be updated. */ public void updateTaskInformation(InitialLdapContext ctx, List<OpenDsException> ex, Collection<TaskEntry> ts) public void updateTaskInformation(InitialLdapContext ctx, List<Exception> ex, Collection<TaskEntry> ts) { // Read monitoring information: since it is computed, it is faster // to get everything in just one request. opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/UninstallCliHelper.java
@@ -20,7 +20,6 @@ import static org.opends.admin.ads.util.ConnectionUtils.*; import static org.opends.messages.AdminToolMessages.*; import static org.opends.messages.QuickSetupMessages.*; import static com.forgerock.opendj.cli.ArgumentConstants.*; import static com.forgerock.opendj.cli.Utils.*; @@ -48,6 +47,7 @@ import org.opends.admin.ads.TopologyCacheException; 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.datamodel.ConnectionProtocolPolicy; import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo; import org.opends.quicksetup.Application; @@ -1194,8 +1194,9 @@ ctx = createAdministrativeContext(host, port, useSSL, useStartTLS, dn, pwd, getConnectTimeout(), userData.getTrustManager()); ConnectionWrapper connWrapper = new ConnectionWrapper(ctx, getConnectTimeout(), userData.getTrustManager()); ADSContext adsContext = new ADSContext(ctx); ADSContext adsContext = new ADSContext(connWrapper); if (interactive && userData.getTrustManager() == null) { // This is required when the user did connect to the server using SSL opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/Uninstaller.java
@@ -27,7 +27,6 @@ import javax.naming.Context; import javax.naming.NamingException; import javax.naming.ldap.InitialLdapContext; import javax.swing.JFrame; import javax.swing.SwingUtilities; @@ -42,6 +41,7 @@ import org.opends.admin.ads.TopologyCacheException; import org.opends.admin.ads.util.ApplicationTrustManager; import org.opends.admin.ads.util.ConnectionUtils; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.admin.ads.util.PreferredConnection; import org.opends.guitools.uninstaller.ui.ConfirmUninstallPanel; import org.opends.guitools.uninstaller.ui.LoginDialog; @@ -51,13 +51,8 @@ import org.opends.quicksetup.util.ServerController; import org.opends.quicksetup.util.UIKeyStore; import org.opends.quicksetup.util.Utils; import org.forgerock.opendj.config.AttributeTypePropertyDefinition; import org.forgerock.opendj.config.ConfigurationFramework; import org.forgerock.opendj.config.ClassPropertyDefinition; import org.forgerock.opendj.config.ManagedObjectNotFoundException; import org.forgerock.opendj.config.client.ManagementContext; import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor; import org.forgerock.opendj.config.client.ldap.LDAPManagementContext; import org.forgerock.opendj.server.config.client.ReplicationDomainCfgClient; import org.forgerock.opendj.server.config.client.ReplicationServerCfgClient; import org.forgerock.opendj.server.config.client.ReplicationSynchronizationProviderCfgClient; @@ -71,7 +66,6 @@ import static com.forgerock.opendj.cli.ArgumentConstants.*; import static com.forgerock.opendj.cli.Utils.*; import static com.forgerock.opendj.util.OperatingSystem.*; import static org.forgerock.util.Utils.*; import static org.opends.messages.AdminToolMessages.*; import static org.opends.messages.QuickSetupMessages.*; @@ -118,25 +112,20 @@ // Bootstrap definition classes. try { if (!ClassLoaderProvider.getInstance().isEnabled()) ConfigurationFramework configFramework = ConfigurationFramework.getInstance(); if (!configFramework.isInitialized()) { ClassLoaderProvider.getInstance().enable(); configFramework.initialize(); } configFramework.setIsClient(true); } catch (Throwable t) { logger.warn(LocalizableMessage.raw("Error enabling admin framework class loader: "+t, t)); logger.warn(LocalizableMessage.raw("Error enabling admin framework class loader: "+t, t)); } // Switch off class name validation in client. ClassPropertyDefinition.setAllowClassValidation(false); // Switch off attribute type name validation in client. AttributeTypePropertyDefinition.setCheckSchema(false); logger.info(LocalizableMessage.raw("Uninstaller is created.")); } /** {@inheritDoc} */ @Override public LocalizableMessage getFrameTitle() { @@ -1522,11 +1511,11 @@ { getUninstallUserData().setAdminUID(loginDialog.getAdministratorUid()); getUninstallUserData().setAdminPwd(loginDialog.getAdministratorPwd()); final InitialLdapContext ctx = loginDialog.getContext(); final ConnectionWrapper connWrapper = loginDialog.getConnection(); try { getUninstallUserData().setLocalServerUrl( (String)ctx.getEnvironment().get(Context.PROVIDER_URL)); (String)connWrapper.getLdapContext().getEnvironment().get(Context.PROVIDER_URL)); } catch (NamingException ne) { @@ -1544,7 +1533,7 @@ public TopologyCache processBackgroundTask() throws Throwable { logger.info(LocalizableMessage.raw("Loading Topology Cache in askForAuthentication")); ADSContext adsContext = new ADSContext(ctx); ADSContext adsContext = new ADSContext(connWrapper); TopologyCache cache = new TopologyCache(adsContext, getTrustManager(), getConnectTimeout()); cache.getFilter().setSearchMonitoringInformation(false); @@ -1925,19 +1914,19 @@ logger.info(LocalizableMessage.raw("Updating references in: "+ server.getHostPort(true))); notifyListeners(getFormattedWithPoints( INFO_PROGRESS_REMOVING_REFERENCES.get(server.getHostPort(true)))); InitialLdapContext ctx = null; ConnectionWrapper connWrapper = null; try { String dn = ADSContext.getAdministratorDN( getUninstallUserData().getAdminUID()); String pwd = getUninstallUserData().getAdminPwd(); ctx = getRemoteConnection(server, dn, pwd, getTrustManager(), connWrapper = getRemoteConnection(server, dn, pwd, getTrustManager(), getConnectTimeout(), new LinkedHashSet<PreferredConnection>()); // Update replication servers and domains. If the domain // is an ADS, then remove it from there. removeReferences(ctx, server.getHostPort(true), serverADSProperties); removeReferences(connWrapper, server.getHostPort(true), serverADSProperties); notifyListeners(getFormattedDoneWithLineBreak()); } @@ -1966,7 +1955,7 @@ } finally { StaticUtils.close(ctx); StaticUtils.close(connWrapper); } } } @@ -1976,7 +1965,7 @@ * provided InitialLdapContext. * It also tries to delete the server registration entry from the remote ADS * servers if the serverADSProperties object passed is not null. * @param ctx the connection to the remote server where we want to remove * @param connWrapper the connection to the remote server where we want to remove * references to the server that we are trying to uninstall. * @param serverDisplay an String representation that is used to identify * the remote server in the log messages we present to the user. @@ -1985,15 +1974,13 @@ * @throws ApplicationException if an error occurs while updating the remote * OpenDS server configuration. */ private void removeReferences(InitialLdapContext ctx, String serverDisplay, private void removeReferences(ConnectionWrapper connWrapper, String serverDisplay, Map<ADSContext.ServerProperty, Object> serverADSProperties) throws ApplicationException { try { ManagementContext mCtx = LDAPManagementContext.createFromContext( JNDIDirContextAdaptor.adapt(ctx)); RootCfgClient root = mCtx.getRootConfiguration(); RootCfgClient root = connWrapper.getRootConfiguration(); ReplicationSynchronizationProviderCfgClient sync = (ReplicationSynchronizationProviderCfgClient) root.getSynchronizationProvider("Multimaster Synchronization"); @@ -2004,16 +1991,7 @@ Set<String> replServers = replicationServer.getReplicationServer(); if (replServers != null) { String replServer = null; for (String o : replServers) { if (getUninstallUserData().getReplicationServer().equalsIgnoreCase( o)) { replServer = o; break; } } String replServer = findReplicationServer(replServers); if (replServer != null) { logger.info(LocalizableMessage.raw("Updating references in replication server on "+ @@ -2042,16 +2020,7 @@ Set<String> replServers = domain.getReplicationServer(); if (replServers != null) { String replServer = null; for (String o : replServers) { if (getUninstallUserData().getReplicationServer(). equalsIgnoreCase(o)) { replServer = o; break; } } String replServer = findReplicationServer(replServers); if (replServer != null) { logger.info(LocalizableMessage.raw("Updating references in domain " + @@ -2088,14 +2057,14 @@ throw new ApplicationException( ReturnCode.CONFIGURATION_ERROR, errorMessage, t); } ADSContext adsContext = new ADSContext(ctx); ADSContext adsContext = new ADSContext(connWrapper); try { if (adsContext.hasAdminData() && serverADSProperties != null) { logger.info(LocalizableMessage.raw("Unregistering server on ADS of server "+ ConnectionUtils.getHostPort(ctx)+". Properties: "+ ConnectionUtils.getHostPort(connWrapper.getLdapContext())+". Properties: "+ serverADSProperties)); adsContext.unregisterServer(serverADSProperties); } @@ -2119,6 +2088,18 @@ } } private String findReplicationServer(Set<String> replServers) { for (String s : replServers) { if (getUninstallUserData().getReplicationServer().equalsIgnoreCase(s)) { return s; } } return null; } /** * Tells whether this ServerDescriptor object represents the server that we * are trying to uninstall or not. opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/ui/LoginDialog.java
@@ -12,7 +12,7 @@ * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2008-2010 Sun Microsystems, Inc. * Portions Copyright 2014-2015 ForgeRock AS. * Portions Copyright 2014-2016 ForgeRock AS. */ package org.opends.guitools.uninstaller.ui; @@ -42,6 +42,7 @@ import org.forgerock.i18n.slf4j.LocalizedLogger; import org.opends.admin.ads.ADSContext; import org.opends.admin.ads.util.ApplicationTrustManager; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.guitools.controlpanel.datamodel.ConnectionProtocolPolicy; import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo; import org.opends.guitools.controlpanel.util.ConfigFromFile; @@ -61,7 +62,6 @@ import org.opends.quicksetup.util.Utils; import static com.forgerock.opendj.cli.Utils.*; import static org.opends.messages.AdminToolMessages.*; import static org.opends.messages.QuickSetupMessages.*; @@ -94,6 +94,8 @@ private InitialLdapContext ctx; private ConnectionWrapper connWrapper; private String usedUrl; private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); @@ -197,6 +199,16 @@ } /** * Returns the connection we got with the provided authentication. * * @return the connection */ public ConnectionWrapper getConnection() { return connWrapper; } /** * Creates and returns the panel of the dialog. * @return the panel of the dialog. */ @@ -397,10 +409,8 @@ throw new ApplicationException(ReturnCode.APPLICATION_ERROR, ERR_COULD_NOT_FIND_VALID_LDAPURL.get(), null); } ctx = org.opends.guitools.controlpanel.util.Utilities.getAdminDirContext( info, dn, pwd); ctx = org.opends.guitools.controlpanel.util.Utilities.getAdminDirContext(info, dn, pwd); connWrapper = new ConnectionWrapper(ctx, info.getConnectTimeout(), info.getTrustManager()); } catch (NamingException ne) { opendj-server-legacy/src/main/java/org/opends/quicksetup/Application.java
@@ -12,13 +12,12 @@ * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2008-2010 Sun Microsystems, Inc. * Portions Copyright 2012-2015 ForgeRock AS. * Portions Copyright 2012-2016 ForgeRock AS. */ package org.opends.quicksetup; import static org.opends.messages.QuickSetupMessages.*; import static com.forgerock.opendj.cli.Utils.*; import java.io.ByteArrayOutputStream; @@ -28,8 +27,6 @@ import java.util.Set; 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; @@ -38,6 +35,7 @@ import org.opends.admin.ads.TopologyCacheException; import org.opends.admin.ads.TopologyCacheFilter; import org.opends.admin.ads.util.ApplicationTrustManager; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.admin.ads.util.PreferredConnection; import org.opends.admin.ads.util.ServerLoader; import org.opends.quicksetup.event.ProgressNotifier; @@ -612,7 +610,7 @@ } /** * Gets an InitialLdapContext based on the information that appears on the * Gets a connection based on the information that appears on the * provided ServerDescriptor object. Note that the server is assumed to be * registered and that contains a Map with ADSContext.ServerProperty keys. * @param server the object describing the server. @@ -627,7 +625,7 @@ * @return the InitialLdapContext to the remote server. * @throws ApplicationException if something goes wrong. */ protected InitialLdapContext getRemoteConnection(ServerDescriptor server, protected ConnectionWrapper getRemoteConnection(ServerDescriptor server, String dn, String pwd, ApplicationTrustManager trustManager, int timeout, Set<PreferredConnection> cnx) @@ -641,10 +639,10 @@ ServerLoader loader = new ServerLoader(adsProperties, dn, pwd, trustManager, timeout, cnx, filter); InitialLdapContext ctx; ConnectionWrapper connection; try { ctx = loader.createContext(); connection = loader.createConnectionWrapper(); } catch (NamingException ne) { @@ -662,7 +660,7 @@ throw new ApplicationException(ReturnCode.CONFIGURATION_ERROR, msg, ne); } return ctx; return connection; } /** opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java
@@ -12,7 +12,7 @@ * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2006-2010 Sun Microsystems, Inc. * Portions Copyright 2011-2015 ForgeRock AS. * Portions Copyright 2011-2016 ForgeRock AS. */ package org.opends.quicksetup.installer; @@ -25,7 +25,6 @@ import static org.opends.quicksetup.installer.DataReplicationOptions.Type.*; import static org.opends.quicksetup.installer.InstallProgressStep.*; import static org.opends.quicksetup.util.Utils.*; import static com.forgerock.opendj.cli.ArgumentConstants.*; import static com.forgerock.opendj.cli.Utils.*; @@ -78,6 +77,7 @@ import org.opends.admin.ads.TopologyCacheFilter; import org.opends.admin.ads.util.ApplicationTrustManager; import org.opends.admin.ads.util.ConnectionUtils; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.admin.ads.util.PreferredConnection; import org.opends.quicksetup.ApplicationException; import org.opends.quicksetup.ButtonName; @@ -1414,7 +1414,7 @@ */ private void unconfigureRemote() { InitialLdapContext ctx = null; ConnectionWrapper connectionWrapper = null; if (registeredNewServerOnRemote || createdAdministrator || createdRemoteAds) { // Try to connect @@ -1426,9 +1426,9 @@ } try { ctx = createInitialLdapContext(auth); connectionWrapper = createConnection(auth); ADSContext adsContext = new ADSContext(ctx); ADSContext adsContext = new ADSContext(connectionWrapper); if (createdRemoteAds) { adsContext.removeAdminData(true); @@ -1468,7 +1468,7 @@ } finally { StaticUtils.close(ctx); StaticUtils.close(connectionWrapper); } } InstallerHelper helper = new InstallerHelper(); @@ -1477,8 +1477,9 @@ notifyListeners(getFormattedWithPoints(INFO_PROGRESS_UNCONFIGURING_REPLICATION_REMOTE.get(getHostPort(server)))); try { ctx = getRemoteConnection(server, getTrustManager(), getPreferredConnections()); helper.unconfigureReplication(ctx, hmConfiguredRemoteReplication.get(server), ConnectionUtils.getHostPort(ctx)); connectionWrapper = getRemoteConnection(server, getTrustManager(), getPreferredConnections()); helper.unconfigureReplication(connectionWrapper, hmConfiguredRemoteReplication.get(server), ConnectionUtils.getHostPort(connectionWrapper.getLdapContext())); } catch (ApplicationException ae) { @@ -1486,7 +1487,7 @@ } finally { StaticUtils.close(ctx); StaticUtils.close(connectionWrapper); } notifyListeners(getFormattedDoneWithLineBreak()); } @@ -1582,15 +1583,16 @@ private void createReplicatedBackends(final Map<String, Set<String>> hmBackendSuffix, final Map<String, BackendTypeUIAdapter> backendTypes) throws ApplicationException { InitialLdapContext ctx = null; ConnectionWrapper connection = null; try { ctx = createLocalContext(); connection = createLocalConnection(); final InstallerHelper helper = new InstallerHelper(); for (String backendName : hmBackendSuffix.keySet()) { helper.createBackend(ctx, backendName, hmBackendSuffix.get(backendName), ConnectionUtils.getHostPort(ctx), backendTypes.get(backendName).getLegacyConfigurationFrameworkBackend()); helper.createBackend(connection, backendName, hmBackendSuffix.get(backendName), ConnectionUtils.getHostPort(connection.getLdapContext()), backendTypes.get(backendName).getBackend()); } } catch (NamingException ne) @@ -1600,7 +1602,7 @@ } finally { StaticUtils.close(ctx); StaticUtils.close(connection); } } @@ -1700,21 +1702,21 @@ replicationServers.put(ADSContext.getAdministrationSuffixDN(), adsServers); replicationServers.put(Constants.SCHEMA_DN, new HashSet<String>(adsServers)); InitialLdapContext ctx = null; ConnectionWrapper connWrapper = null; long localTime = -1; long localTimeMeasureTime = -1; String localServerDisplay = null; try { ctx = createLocalContext(); helper.configureReplication(ctx, replicationServers, connWrapper = createLocalConnection(); helper.configureReplication(connWrapper, replicationServers, getUserData().getReplicationOptions().getReplicationPort(), getUserData().getReplicationOptions().useSecureReplication(), getLocalHostPort(), knownReplicationServerIds, knownServerIds); localTimeMeasureTime = System.currentTimeMillis(); localTime = Utils.getServerClock(ctx); localServerDisplay = ConnectionUtils.getHostPort(ctx); localTime = Utils.getServerClock(connWrapper.getLdapContext()); localServerDisplay = ConnectionUtils.getHostPort(connWrapper.getLdapContext()); } catch (NamingException ne) { @@ -1723,7 +1725,7 @@ } finally { StaticUtils.close(ctx); StaticUtils.close(connWrapper); } notifyListeners(getFormattedDoneWithLineBreak()); checkAbort(); @@ -1804,9 +1806,10 @@ } } ctx = getRemoteConnection(server, getTrustManager(), getPreferredConnections()); connWrapper = getRemoteConnection(server, getTrustManager(), getPreferredConnections()); InitialLdapContext ctx = connWrapper.getLdapContext(); ConfiguredReplication repl = helper.configureReplication(ctx, remoteReplicationServers, replicationPort, enableSecureReplication, helper.configureReplication(connWrapper, remoteReplicationServers, replicationPort, enableSecureReplication, ConnectionUtils.getHostPort(ctx), knownReplicationServerIds, knownServerIds); long remoteTimeMeasureTime = System.currentTimeMillis(); long remoteTime = Utils.getServerClock(ctx); @@ -1821,7 +1824,7 @@ hmConfiguredRemoteReplication.put(server, repl); StaticUtils.close(ctx); StaticUtils.close(connWrapper); notifyListeners(getFormattedDoneWithLineBreak()); checkAbort(); } @@ -2110,15 +2113,15 @@ */ protected void initializeSuffixes() throws ApplicationException { InitialLdapContext ctx = null; ConnectionWrapper conn = null; try { ctx = createLocalContext(); conn = createLocalConnection(); } catch (Throwable t) { LocalizableMessage failedMsg = getThrowableMsg(INFO_ERROR_CONNECTING_TO_LOCAL.get(), t); StaticUtils.close(ctx); StaticUtils.close(conn); throw new ApplicationException(ReturnCode.CONFIGURATION_ERROR, failedMsg, t); } @@ -2127,15 +2130,15 @@ /* Initialize local ADS and schema contents using any replica. */ { ServerDescriptor server = suffixes.iterator().next().getReplicas().iterator().next().getServer(); InitialLdapContext rCtx = null; ConnectionWrapper remoteConn = null; try { rCtx = getRemoteConnection(server, getTrustManager(), getPreferredConnections()); remoteConn = getRemoteConnection(server, getTrustManager(), getPreferredConnections()); TopologyCacheFilter filter = new TopologyCacheFilter(); filter.setSearchMonitoringInformation(false); filter.addBaseDNToSearch(ADSContext.getAdministrationSuffixDN()); filter.addBaseDNToSearch(Constants.SCHEMA_DN); ServerDescriptor s = createStandalone(rCtx, filter); ServerDescriptor s = createStandalone(remoteConn.getLdapContext(), filter); for (ReplicaDescriptor replica : s.getReplicas()) { String dn = replica.getSuffix().getDN(); @@ -2164,7 +2167,7 @@ } finally { StaticUtils.close(rCtx); StaticUtils.close(remoteConn); } } @@ -2203,14 +2206,14 @@ if (replicationId == -1) { // This occurs if the remote server had not replication configured. InitialLdapContext rCtx = null; ConnectionWrapper remoteConn = null; try { rCtx = getRemoteConnection(server, getTrustManager(), getPreferredConnections()); remoteConn = getRemoteConnection(server, getTrustManager(), getPreferredConnections()); TopologyCacheFilter filter = new TopologyCacheFilter(); filter.setSearchMonitoringInformation(false); filter.addBaseDNToSearch(dn); ServerDescriptor s = createStandalone(rCtx, filter); ServerDescriptor s = createStandalone(remoteConn.getLdapContext(), filter); for (ReplicaDescriptor r : s.getReplicas()) { if (areDnsEqual(r.getSuffix().getDN(), dn)) @@ -2234,7 +2237,7 @@ } finally { StaticUtils.close(rCtx); StaticUtils.close(remoteConn); } } if (replicationId == -1) @@ -2251,7 +2254,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(ctx, replicationId, dn, !isADS && !isSchema, hostPort); initializeSuffix(conn.getLdapContext(), replicationId, dn, !isADS && !isSchema, hostPort); initDone = true; } catch (PeerNotFoundException pnfe) @@ -2268,7 +2271,7 @@ } catch (ApplicationException ae) { StaticUtils.close(ctx); StaticUtils.close(conn); throw ae; } if ((isADS || isSchema) && isVerbose()) @@ -2297,8 +2300,8 @@ DataReplicationOptions repl = getUserData().getReplicationOptions(); boolean isRemoteServer = repl.getType() == DataReplicationOptions.Type.IN_EXISTING_TOPOLOGY; AuthenticationData auth = isRemoteServer ? repl.getAuthenticationData() : null; InitialLdapContext remoteCtx = null; // Bound to remote ADS host (if any). InitialLdapContext localCtx = null; // Bound to local server. ConnectionWrapper remoteConn = null; // Bound to remote ADS host (if any). ConnectionWrapper localConn = null; // Bound to local server. ADSContext adsContext = null; // Bound to ADS host (via one of above). /* @@ -2309,8 +2312,8 @@ { if (isRemoteServer) { remoteCtx = createInitialLdapContext(auth); adsContext = new ADSContext(remoteCtx); // adsContext owns remoteCtx remoteConn = createConnection(auth); adsContext = new ADSContext(remoteConn); // adsContext owns remoteCtx /* * Check the remote server for ADS. If it does not exist, create the @@ -2327,7 +2330,7 @@ TopologyCacheFilter filter = new TopologyCacheFilter(); filter.setSearchMonitoringInformation(false); filter.setSearchBaseDNInformation(false); ServerDescriptor server = createStandalone(remoteCtx, filter); ServerDescriptor server = createStandalone(remoteConn.getLdapContext(), filter); server.updateAdsPropertiesWithServerProperties(); adsContext.registerServer(server.getAdsProperties()); createdRemoteAds = true; @@ -2344,7 +2347,7 @@ { notifyListeners(getFormattedWithPoints(INFO_PROGRESS_CREATING_ADS.get())); } localCtx = createLocalContext(); localConn = createLocalConnection(); // if (isRemoteServer) // { // /* Create an empty ADS suffix on the local server. */ @@ -2354,14 +2357,14 @@ if (!isRemoteServer) { /* Configure local server to have an ADS */ adsContext = new ADSContext(localCtx); // adsContext owns localCtx adsContext = new ADSContext(localConn); // adsContext owns localCtx adsContext.createAdminData(null); } /* Register new server in ADS. */ TopologyCacheFilter filter = new TopologyCacheFilter(); filter.setSearchMonitoringInformation(false); filter.setSearchBaseDNInformation(false); ServerDescriptor server = createStandalone(localCtx, filter); ServerDescriptor server = createStandalone(localConn.getLdapContext(), filter); server.updateAdsPropertiesWithServerProperties(); if (0 == adsContext.registerOrUpdateServer(server.getAdsProperties())) { @@ -2376,7 +2379,7 @@ } if (isRemoteServer) { seedAdsTrustStore(localCtx, adsContext.getTrustedCertificates()); seedAdsTrustStore(localConn.getLdapContext(), adsContext.getTrustedCertificates()); } if (isVerbose()) { @@ -2439,23 +2442,29 @@ } finally { StaticUtils.close(remoteCtx, localCtx); StaticUtils.close(remoteConn, localConn); } } private InitialLdapContext createInitialLdapContext(AuthenticationData auth) throws NamingException private ConnectionWrapper createConnection(AuthenticationData auth) throws NamingException { String ldapUrl = getLdapUrl(auth); String dn = auth.getDn(); String pwd = auth.getPwd(); InitialLdapContext context = null; if (auth.useSecureConnection()) { ApplicationTrustManager trustManager = getTrustManager(); trustManager.setHost(auth.getHostName()); return createLdapsContext(ldapUrl, dn, pwd, getConnectTimeout(), null, trustManager, null); context = createLdapsContext(ldapUrl, dn, pwd, getConnectTimeout(), null, trustManager, null); } return createLdapContext(ldapUrl, dn, pwd, getConnectTimeout(), null); else { context = createLdapContext(ldapUrl, dn, pwd, getConnectTimeout(), null); } return new ConnectionWrapper(context, getConnectTimeout(), getTrustManager()); } /** @@ -3106,6 +3115,7 @@ host = getHostNameForLdapUrl(host); String ldapUrl = "ldaps://" + host + ":" + port; InitialLdapContext ctx = null; ConnectionWrapper conn = null; ApplicationTrustManager trustManager = getTrustManager(); trustManager.setHost(host); @@ -3131,8 +3141,8 @@ throw t; } } ADSContext adsContext = new ADSContext(ctx); conn = new ConnectionWrapper(ctx, getConnectTimeout(), trustManager); ADSContext adsContext = new ADSContext(conn); if (adsContext.hasAdminData()) { /* Check if there are already global administrators */ @@ -3271,6 +3281,7 @@ finally { StaticUtils.close(ctx); StaticUtils.close(conn); } } @@ -3829,17 +3840,18 @@ return servers; } private InitialLdapContext createLocalContext() throws NamingException private ConnectionWrapper createLocalConnection() throws NamingException { String ldapUrl = "ldaps://" + getHostNameForLdapUrl(getUserData().getHostName()) + ":" + getUserData().getAdminConnectorPort(); String dn = getUserData().getDirectoryManagerDn(); String pwd = getUserData().getDirectoryManagerPwd(); return createLdapsContext(ldapUrl, dn, pwd, getConnectTimeout(), null, null, null); InitialLdapContext context = createLdapsContext(ldapUrl, dn, pwd, getConnectTimeout(), null, null, null); return new ConnectionWrapper(context, getConnectTimeout(), null); } /** * Gets an InitialLdapContext based on the information that appears on the * Gets a connection based on the information that appears on the * provided ServerDescriptor. * * @param server @@ -3853,7 +3865,7 @@ * @throws ApplicationException * if something goes wrong. */ private InitialLdapContext getRemoteConnection(ServerDescriptor server, ApplicationTrustManager trustManager, private ConnectionWrapper getRemoteConnection(ServerDescriptor server, ApplicationTrustManager trustManager, Set<PreferredConnection> cnx) throws ApplicationException { Map<ADSContext.ServerProperty, Object> adsProperties; opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/InstallerHelper.java
@@ -44,13 +44,11 @@ import java.util.Set; import java.util.TreeSet; import javax.naming.directory.DirContext; import javax.naming.ldap.InitialLdapContext; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.LocalizedIllegalArgumentException; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.config.server.ConfigException; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.guitools.controlpanel.util.Utilities; import org.opends.messages.BackendMessages; import org.opends.messages.CoreMessages; @@ -65,9 +63,6 @@ import org.forgerock.opendj.config.ManagedObjectDefinition; import org.forgerock.opendj.config.ManagedObjectNotFoundException; import org.forgerock.opendj.config.PropertyException; import org.forgerock.opendj.config.client.ManagementContext; import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor; import org.forgerock.opendj.config.client.ldap.LDAPManagementContext; import org.forgerock.opendj.server.config.client.BackendCfgClient; import org.forgerock.opendj.server.config.client.CryptoManagerCfgClient; import org.forgerock.opendj.server.config.client.ReplicationDomainCfgClient; @@ -307,21 +302,17 @@ /** * Deletes a backend on the server. * @param ctx the connection to the server. * @param connWrapper the connection to the server. * @param backendName the name of the backend to be deleted. * @param serverDisplay the server display. * @throws ApplicationException if something goes wrong. */ public void deleteBackend(InitialLdapContext ctx, String backendName, String serverDisplay) public void deleteBackend(ConnectionWrapper connWrapper, String backendName, String serverDisplay) throws ApplicationException { try { ManagementContext mCtx = LDAPManagementContext.createFromContext( JNDIDirContextAdaptor.adapt(ctx)); RootCfgClient root = mCtx.getRootConfiguration(); root.removeBackend(backendName); connWrapper.getRootConfiguration().removeBackend(backendName); } catch (Throwable t) { @@ -356,7 +347,7 @@ /** * Creates a database backend on the server. * * @param ctx * @param connWrapper * the connection to the server. * @param backendName * the name of the backend to be created. @@ -369,14 +360,13 @@ * @throws ApplicationException * if something goes wrong. */ public void createBackend(DirContext ctx, String backendName, Set<String> baseDNs, String serverDisplay, ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backendType) public void createBackend(ConnectionWrapper connWrapper, String backendName, Set<String> baseDNs, String serverDisplay, ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backendType) throws ApplicationException { try { ManagementContext mCtx = LDAPManagementContext.createFromContext(JNDIDirContextAdaptor.adapt(ctx)); RootCfgClient root = mCtx.getRootConfiguration(); RootCfgClient root = connWrapper.getRootConfiguration(); BackendCfgClient backend = root.createBackend(backendType, backendName, null); backend.setEnabled(true); backend.setBaseDN(toByteStrings(baseDNs)); @@ -403,25 +393,19 @@ /** * Sets the base DNs on a given backend. * @param ctx the connection to the server. * @param connWrapper the connection to the server. * @param backendName the name of the backend where the base Dns must be * defined. * @param baseDNs the list of base DNs to be defined on the server. * @param serverDisplay the server display. * @throws ApplicationException if something goes wrong. */ public void setBaseDns(InitialLdapContext ctx, String backendName, Set<String> baseDNs, String serverDisplay) public void setBaseDns(ConnectionWrapper connWrapper, String backendName, Set<String> baseDNs, String serverDisplay) throws ApplicationException { try { ManagementContext mCtx = LDAPManagementContext.createFromContext( JNDIDirContextAdaptor.adapt(ctx)); RootCfgClient root = mCtx.getRootConfiguration(); BackendCfgClient backend = root.getBackend(backendName); BackendCfgClient backend = connWrapper.getRootConfiguration().getBackend(backendName); backend.setBaseDN(toByteStrings(baseDNs)); backend.commit(); } @@ -436,7 +420,7 @@ /** * Configures the replication on a given server. * @param remoteCtx the connection to the server where we want to configure * @param connWrapper the connection to the server where we want to configure * the replication. * @param replicationServers a Map where the key value is the base dn and * the value is the list of replication servers for that base dn (or domain). @@ -453,7 +437,7 @@ * @return a ConfiguredReplication object describing what has been configured. */ public ConfiguredReplication configureReplication( InitialLdapContext remoteCtx, Map<String,Set<String>> replicationServers, ConnectionWrapper connWrapper, Map<String,Set<String>> replicationServers, int replicationPort, boolean useSecureReplication, String serverDisplay, Set<Integer> usedReplicationServerIds, Set<Integer> usedServerIds) throws ApplicationException @@ -464,9 +448,7 @@ boolean secureReplicationEnabled; try { ManagementContext mCtx = LDAPManagementContext.createFromContext( JNDIDirContextAdaptor.adapt(remoteCtx)); RootCfgClient root = mCtx.getRootConfiguration(); RootCfgClient root = connWrapper.getRootConfiguration(); /* * Configure Synchronization plugin. @@ -654,7 +636,7 @@ /** * Configures the replication on a given server. * * @param remoteCtx * @param connWrapper * the connection to the server where we want to configure the * replication. * @param replConf @@ -664,13 +646,12 @@ * @throws ApplicationException * if something goes wrong. */ public void unconfigureReplication(InitialLdapContext remoteCtx, ConfiguredReplication replConf, String serverDisplay) throws ApplicationException public void unconfigureReplication(ConnectionWrapper connWrapper, ConfiguredReplication replConf, String serverDisplay) throws ApplicationException { try { ManagementContext mCtx = LDAPManagementContext.createFromContext(JNDIDirContextAdaptor.adapt(remoteCtx)); RootCfgClient root = mCtx.getRootConfiguration(); RootCfgClient root = connWrapper.getRootConfiguration(); final String syncProvider = "Multimaster Synchronization"; // Unconfigure Synchronization plugin. if (replConf.isSynchProviderCreated()) opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java
@@ -65,11 +65,16 @@ import org.forgerock.i18n.LocalizableMessageDescriptor.Arg1; import org.forgerock.i18n.LocalizableMessageDescriptor.Arg2; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.config.ConfigurationFramework; import org.forgerock.opendj.config.ManagedObjectNotFoundException; import org.forgerock.opendj.config.PropertyException; import org.forgerock.opendj.config.server.ConfigException; import org.opends.admin.ads.*; import org.opends.admin.ads.ADSContext.ADSPropertySyntax; import org.opends.admin.ads.ADSContext.AdministratorProperty; import org.opends.admin.ads.ADSContext.ServerProperty; import org.opends.admin.ads.util.ApplicationTrustManager; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.admin.ads.util.OpendsCertificateException; import org.opends.admin.ads.util.PreferredConnection; import org.opends.admin.ads.util.ServerLoader; @@ -86,10 +91,6 @@ import org.opends.quicksetup.installer.PeerNotFoundException; import org.opends.quicksetup.installer.offline.OfflineInstaller; import org.opends.quicksetup.util.PlainTextProgressMessageFormatter; import org.opends.server.admin.*; import org.forgerock.opendj.config.client.ManagementContext; import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor; import org.forgerock.opendj.config.client.ldap.LDAPManagementContext; import org.forgerock.opendj.server.config.client.*; import org.forgerock.opendj.server.config.meta.ReplicationDomainCfgDefn; import org.forgerock.opendj.server.config.meta.ReplicationServerCfgDefn; @@ -136,7 +137,6 @@ import static com.forgerock.opendj.cli.Utils.*; import static com.forgerock.opendj.util.OperatingSystem.*; import static com.forgerock.opendj.cli.CommonArguments.*; import static java.util.Collections.*; import static org.forgerock.util.Utils.*; import static org.opends.admin.ads.util.ConnectionUtils.*; @@ -431,17 +431,14 @@ // Bootstrap definition classes. try { if (!ClassLoaderProvider.getInstance().isEnabled()) ConfigurationFramework configFramework = ConfigurationFramework.getInstance(); if (!configFramework.isInitialized()) { ClassLoaderProvider.getInstance().enable(); configFramework.initialize(); } // Switch off class name validation in client. ClassPropertyDefinition.setAllowClassValidation(false); // Switch off attribute type name validation in client. AttributeTypePropertyDefinition.setCheckSchema(false); configFramework.setIsClient(true); } catch (InitializationException ie) catch (ConfigException ie) { errPrintln(ie.getMessageObject()); return ERROR_INITIALIZING_ADMINISTRATION_FRAMEWORK; @@ -1111,6 +1108,12 @@ return createInitialLdapContextInteracting(ci, isInteractive() && ci.isTrustStoreInMemory()); } private ConnectionWrapper createConnectionInteracting(LDAPConnectionConsoleInteraction ci) throws ClientException { return createConnectionInteracting(ci, isInteractive() && ci.isTrustStoreInMemory()); } private OpendsCertificateException getCertificateRootException(Throwable t) { while (t != null) @@ -1124,6 +1127,22 @@ return null; } private ConnectionWrapper createConnectionInteracting(LDAPConnectionConsoleInteraction ci, boolean promptForCertificate) throws ClientException { try { InitialLdapContext ctx= createInitialLdapContextInteracting(ci, promptForCertificate); return new ConnectionWrapper(ctx, CliConstants.DEFAULT_LDAP_CONNECT_TIMEOUT, ci.getTrustManager()); } catch (NamingException e) { String hostName = getHostNameForLdapUrl(ci.getHostName()); Integer portNumber = ci.getPortNumber(); throw new ClientException(ReturnCode.CLIENT_SIDE_CONNECT_ERROR, ERR_FAILED_TO_CONNECT.get(hostName, portNumber)); } } /** * Creates an Initial LDAP Context interacting with the user if the * application is interactive. @@ -1561,6 +1580,27 @@ return createAdministrativeContext(uData, bindDn); } private ConnectionWrapper createAdministrativeConnection(MonoServerReplicationUserData uData) { final String bindDn = getAdministratorDN(uData.getAdminUid()); return createAdministrativeConnection(uData, bindDn); } private ConnectionWrapper createAdministrativeConnection(MonoServerReplicationUserData uData, final String bindDn) { try { return new ConnectionWrapper(createAdministrativeContext(uData, bindDn), getConnectTimeout(), getTrustManager(sourceServerCI)); } catch (NamingException e) { String hostPort = getServerRepresentation(uData.getHostName(), uData.getPort()); logger.error(LocalizableMessage.raw("Error when creating connection for:" + hostPort)); return null; } } private InitialLdapContext createAdministrativeContext(MonoServerReplicationUserData uData, final String bindDn) { try @@ -1965,11 +2005,11 @@ */ private boolean promptIfRequired(PurgeHistoricalUserData uData) { InitialLdapContext ctx = null; ConnectionWrapper connWrapper = null; try { ctx = getInitialLdapContext(uData); if (ctx == null) connWrapper = getConnection(uData); if (connWrapper == null) { return false; } @@ -1987,7 +2027,7 @@ List<String> suffixes = argParser.getBaseDNs(); if (uData.isOnline()) { checkSuffixesForPurgeHistorical(suffixes, ctx, true); checkSuffixesForPurgeHistorical(suffixes, connWrapper.getLdapContext(), true); } else { @@ -2001,7 +2041,7 @@ if (uData.isOnline()) { List<? extends TaskEntry> taskEntries = getAvailableTaskEntries(ctx); List<? extends TaskEntry> taskEntries = getAvailableTaskEntries(connWrapper.getLdapContext()); TaskScheduleInteraction interaction = new TaskScheduleInteraction(uData.getTaskSchedule(), argParser.taskArgs, this, @@ -2022,7 +2062,21 @@ } finally { close(ctx); close(connWrapper); } } private ConnectionWrapper getConnection(PurgeHistoricalUserData uData) { try { InitialLdapContext ctx = getInitialLdapContext(uData); return new ConnectionWrapper(ctx, sourceServerCI.getConnectTimeout(), sourceServerCI.getTrustManager()); } catch (NamingException ce) { logger.warn(LocalizableMessage.raw("An error occured " + ce)); return null; } } @@ -2099,10 +2153,10 @@ InitialLdapContext ctx) { List<TaskEntry> taskEntries = new ArrayList<>(); List<OpenDsException> exceptions = new ArrayList<>(); List<Exception> exceptions = new ArrayList<>(); ConfigFromDirContext cfg = new ConfigFromDirContext(); cfg.updateTaskInformation(ctx, exceptions, taskEntries); for (OpenDsException ode : exceptions) for (Exception ode : exceptions) { logger.warn(LocalizableMessage.raw("Error retrieving task entries: "+ode, ode)); } @@ -2163,7 +2217,7 @@ */ sourceServerCI.initializeGlobalArguments(host1, port1, adminUid, bindDn1, pwd, pwdFile == null ? null : new LinkedHashMap<String, String>(pwdFile)); InitialLdapContext ctx1 = null; ConnectionWrapper ctx1 = null; while (ctx1 == null && !cancelled) { @@ -2187,7 +2241,7 @@ bindDn1 = sourceServerCI.getBindDN(); pwd1 = sourceServerCI.getBindPassword(); ctx1 = createInitialLdapContextInteracting(sourceServerCI); ctx1 = createConnectionInteracting(sourceServerCI); if (ctx1 == null) { cancelled = true; @@ -2227,7 +2281,7 @@ if (replicationServer1Configured && !configureReplicationServer1) { final LocalizableMessage msg = INFO_REPLICATION_SERVER_CONFIGURED_WARNING_PROMPT.get(getHostPort(ctx1), repPort1); INFO_REPLICATION_SERVER_CONFIGURED_WARNING_PROMPT.get(getHostPort(ctx1.getLdapContext()), repPort1); if (!askConfirmation(msg, false)) { cancelled = true; @@ -2335,7 +2389,7 @@ // eventually admin authentication data. if (!cancelled) { AtomicReference<InitialLdapContext> aux = new AtomicReference<>(ctx1); AtomicReference<ConnectionWrapper> aux = new AtomicReference<>(ctx1); cancelled = !loadADSAndAcceptCertificates(sourceServerCI, aux, uData, true); ctx1 = aux.get(); } @@ -2405,7 +2459,7 @@ pwdFile == null ? null : new LinkedHashMap<String, String>(pwdFile)); destinationServerCI.setUseAdminOrBindDn(true); } InitialLdapContext ctx2 = null; ConnectionWrapper ctx2 = null; while (ctx2 == null && !cancelled) { @@ -2441,7 +2495,7 @@ if (!error) { ctx2 = createInitialLdapContextInteracting(destinationServerCI, true); ctx2 = createConnectionInteracting(destinationServerCI, true); if (ctx2 == null) { cancelled = true; @@ -2496,7 +2550,7 @@ if (replicationServer2Configured && !configureReplicationServer2) { final LocalizableMessage prompt = INFO_REPLICATION_SERVER_CONFIGURED_WARNING_PROMPT.get(getHostPort(ctx2), repPort2); INFO_REPLICATION_SERVER_CONFIGURED_WARNING_PROMPT.get(getHostPort(ctx2.getLdapContext()), repPort2); if (!askConfirmation(prompt, false)) { cancelled = true; @@ -2613,7 +2667,7 @@ // to load the ADS to ask the user to accept the certificates. if (!cancelled) { AtomicReference<InitialLdapContext> aux = new AtomicReference<>(ctx2); AtomicReference<ConnectionWrapper> aux = new AtomicReference<>(ctx2); cancelled = !loadADSAndAcceptCertificates(destinationServerCI, aux, uData, false); ctx2 = aux.get(); } @@ -2744,7 +2798,7 @@ int port = argParser.getPortToDisable(); /* Try to connect to the server. */ InitialLdapContext ctx = null; ConnectionWrapper ctx = null; while (ctx == null && !cancelled) { @@ -2758,7 +2812,7 @@ adminUid = sourceServerCI.getProvidedAdminUID(); adminPwd = sourceServerCI.getBindPassword(); ctx = createInitialLdapContextInteracting(sourceServerCI); ctx = createConnectionInteracting(sourceServerCI); if (ctx == null) { cancelled = true; @@ -2795,7 +2849,7 @@ // disableReplication(DisableReplicationUserData) method. Here we have // to load the ADS to ask the user to accept the certificates and // eventually admin authentication data. AtomicReference<InitialLdapContext> aux = new AtomicReference<>(ctx); AtomicReference<ConnectionWrapper> aux = new AtomicReference<>(ctx); cancelled = !loadADSAndAcceptCertificates(sourceServerCI, aux, uData, false); ctx = aux.get(); } @@ -2840,7 +2894,8 @@ if (disableReplicationServer && repPort < 0) { disableReplicationServer = false; final LocalizableMessage msg = INFO_REPLICATION_PROMPT_NO_REPLICATION_SERVER_TO_DISABLE.get(getHostPort(ctx)); final LocalizableMessage msg = INFO_REPLICATION_PROMPT_NO_REPLICATION_SERVER_TO_DISABLE.get( getHostPort(ctx.getLdapContext())); try { cancelled = askConfirmation(msg, false, logger); @@ -2860,18 +2915,19 @@ if (!cancelled && !disableAll) { List<String> suffixes = argParser.getBaseDNs(); checkSuffixesForDisableReplication(suffixes, ctx, true, !disableReplicationServer); checkSuffixesForDisableReplication(suffixes, ctx.getLdapContext(), true, !disableReplicationServer); cancelled = suffixes.isEmpty() && !disableReplicationServer; uData.setBaseDNs(suffixes); if (!uData.disableReplicationServer() && repPort > 0 && disableAllBaseDns(ctx, uData) && !argParser.advancedArg.isPresent()) disableAllBaseDns(ctx.getLdapContext(), uData) && !argParser.advancedArg.isPresent()) { try { uData.setDisableReplicationServer(askConfirmation( INFO_REPLICATION_DISABLE_ALL_SUFFIXES_DISABLE_REPLICATION_SERVER.get(getHostPort(ctx), repPort), true, INFO_REPLICATION_DISABLE_ALL_SUFFIXES_DISABLE_REPLICATION_SERVER.get( getHostPort(ctx.getLdapContext()), repPort), true, logger)); } catch (ClientException ce) @@ -3005,16 +3061,16 @@ */ private boolean promptIfRequiredForPreOrPost(MonoServerReplicationUserData uData) { InitialLdapContext ctx = null; ConnectionWrapper ctx = null; try { ctx = getInitialLdapContext(uData); ctx = getConnection(uData); if (ctx == null) { return false; } List<String> suffixes = argParser.getBaseDNs(); checkSuffixesForInitializeReplication(suffixes, ctx, true); checkSuffixesForInitializeReplication(suffixes, ctx.getLdapContext(), true); uData.setBaseDNs(suffixes); return !suffixes.isEmpty(); } @@ -3024,6 +3080,20 @@ } } private ConnectionWrapper getConnection(MonoServerReplicationUserData uData) { try { InitialLdapContext ctx = getInitialLdapContext(uData); return new ConnectionWrapper(ctx, sourceServerCI.getConnectTimeout(), getTrustManager(sourceServerCI)); } catch (NamingException ce) { logger.warn(LocalizableMessage.raw("An error occured " + ce)); return null; } } private InitialLdapContext getInitialLdapContext(MonoServerReplicationUserData uData) { // Try to connect to the server. @@ -3082,10 +3152,10 @@ private boolean promptIfRequired(StatusReplicationUserData uData) throws ReplicationCliException { InitialLdapContext ctx = null; ConnectionWrapper ctx = null; try { ctx = getInitialLdapContext(uData); ctx = getConnection(uData); if (ctx == null) { return false; @@ -3096,7 +3166,7 @@ // statusReplication(StatusReplicationUserData) method. Here we have // to load the ADS to ask the user to accept the certificates and // eventually admin authentication data. AtomicReference<InitialLdapContext> aux = new AtomicReference<>(ctx); AtomicReference<ConnectionWrapper> aux = new AtomicReference<>(ctx); boolean cancelled = !loadADSAndAcceptCertificates(sourceServerCI, aux, uData, false); ctx = aux.get(); if (cancelled) @@ -3150,7 +3220,7 @@ sourceServerCI.initializeGlobalArguments(hostSource, portSource, adminUid, null, adminPwd, pwdFile == null ? null : new LinkedHashMap<String, String>(pwdFile)); /* Try to connect to the source server. */ InitialLdapContext ctxSource = null; ConnectionWrapper ctxSource = null; while (ctxSource == null && !cancelled) { @@ -3163,7 +3233,7 @@ adminUid = sourceServerCI.getAdministratorUID(); adminPwd = sourceServerCI.getBindPassword(); ctxSource = createInitialLdapContextInteracting(sourceServerCI); ctxSource = createConnectionInteracting(sourceServerCI); if (ctxSource == null) { @@ -3212,7 +3282,7 @@ destinationServerCI.initializeGlobalArguments(hostDestination, portDestination, adminUid, null, adminPwd, pwdFile == null ? null : new LinkedHashMap<String, String>(pwdFile)); /* Try to connect to the destination server. */ InitialLdapContext ctxDestination = null; ConnectionWrapper ctxDestination = null; destinationServerCI.resetHeadingDisplayed(); while (ctxDestination == null && !cancelled) @@ -3237,7 +3307,7 @@ if (!error) { ctxDestination = createInitialLdapContextInteracting(destinationServerCI, true); ctxDestination = createConnectionInteracting(destinationServerCI, true); if (ctxDestination == null) { @@ -3269,14 +3339,16 @@ if (!cancelled) { List<String> suffixes = argParser.getBaseDNs(); cancelled = serversOperations.continueAfterUserInput(suffixes, ctxSource, ctxDestination, true); cancelled = serversOperations.continueAfterUserInput( suffixes, ctxSource.getLdapContext(), ctxDestination.getLdapContext(), true); uData.setBaseDNs(suffixes); } if (!cancelled) { println(); cancelled = serversOperations.confirmOperation(uData, ctxSource, ctxDestination, true); cancelled = serversOperations.confirmOperation( uData, ctxSource.getLdapContext(), ctxDestination.getLdapContext(), true); println(); } @@ -3463,30 +3535,28 @@ /** * Tells whether the server to which the LdapContext is connected has a * replication port or not. * @param ctx the InitialLdapContext to be used. * @param connWrapper the InitialLdapContext to be used. * @return <CODE>true</CODE> if the replication port for the server could * be found and <CODE>false</CODE> otherwise. */ private boolean hasReplicationPort(InitialLdapContext ctx) private boolean hasReplicationPort(ConnectionWrapper connWrapper) { return getReplicationPort(ctx) != -1; return getReplicationPort(connWrapper) != -1; } /** * Returns the replication port of server to which the LdapContext is * connected and -1 if the replication port could not be found. * @param ctx the InitialLdapContext to be used. * @param connWrapper the InitialLdapContext to be used. * @return the replication port of server to which the LdapContext is * connected and -1 if the replication port could not be found. */ private int getReplicationPort(InitialLdapContext ctx) private int getReplicationPort(ConnectionWrapper connWrapper) { int replicationPort = -1; try { ManagementContext mCtx = LDAPManagementContext.createFromContext( JNDIDirContextAdaptor.adapt(ctx)); RootCfgClient root = mCtx.getRootConfiguration(); RootCfgClient root = connWrapper.getRootConfiguration(); ReplicationSynchronizationProviderCfgClient sync = (ReplicationSynchronizationProviderCfgClient) @@ -3514,7 +3584,7 @@ * accordingly. * * @param ci the LDAP connection to the server * @param ctx the Ldap context to be used in an array: note the context * @param connWrapper the Ldap context to be used in an array: note the context * may be modified with the new credentials provided by the user. * @param uData the ReplicationUserData to be updated. * @param isFirstOrSourceServer whether this is the first server in the @@ -3527,12 +3597,13 @@ * messages. */ private boolean loadADSAndAcceptCertificates(LDAPConnectionConsoleInteraction ci, AtomicReference<InitialLdapContext> ctx, ReplicationUserData uData, boolean isFirstOrSourceServer) AtomicReference<ConnectionWrapper> connWrapper, ReplicationUserData uData, boolean isFirstOrSourceServer) throws ReplicationCliException { boolean cancelled = false; boolean triedWithUserProvidedAdmin = false; final InitialLdapContext ctx1 = ctx.get(); final ConnectionWrapper connWrapper1 = connWrapper.get(); final InitialLdapContext ctx1 = connWrapper1.getLdapContext(); String host = getHostName(ctx1); int port = getPort(ctx1); boolean isSSL = isSSL(ctx1); @@ -3546,7 +3617,7 @@ } try { ADSContext adsContext = new ADSContext(ctx1); ADSContext adsContext = new ADSContext(connWrapper1); if (adsContext.hasAdminData()) { boolean reloadTopology = true; @@ -3629,8 +3700,10 @@ final InitialLdapContext ctx2 = createAdministrativeContext(host, port, isSSL, isStartTLS, getAdministratorDN(adminUid), adminPwd, getConnectTimeout(), getTrustManager(ci)); ctx.set(ctx2); adsContext = new ADSContext(ctx2); final ConnectionWrapper connWrapper2 = new ConnectionWrapper(ctx2, getConnectTimeout(), getTrustManager(ci)); connWrapper.set(connWrapper2); adsContext = new ADSContext(connWrapper2); cache = new TopologyCache(adsContext, getTrustManager(ci), getConnectTimeout()); cache.getFilter().setSearchMonitoringInformation(false); @@ -3716,15 +3789,15 @@ /** * Tells whether there is a Global Administrator defined in the server * to which the InitialLdapContext is connected. * @param ctx the InitialLdapContext. * @param connWrapper the InitialLdapContext. * @return <CODE>true</CODE> if we could find an administrator and * <CODE>false</CODE> otherwise. */ private boolean hasAdministrator(InitialLdapContext ctx) private boolean hasAdministrator(ConnectionWrapper connWrapper) { try { ADSContext adsContext = new ADSContext(ctx); ADSContext adsContext = new ADSContext(connWrapper); if (adsContext.hasAdminData()) { Set<?> administrators = adsContext.readAdministratorRegistry(); @@ -3743,18 +3816,18 @@ * Tells whether there is a Global Administrator corresponding to the provided * ReplicationUserData defined in the server to which the InitialLdapContext * is connected. * @param ctx the InitialLdapContext. * @param connWrapper the InitialLdapContext. * @param uData the user data * @return <CODE>true</CODE> if we could find an administrator and * <CODE>false</CODE> otherwise. */ private boolean hasAdministrator(InitialLdapContext ctx, private boolean hasAdministrator(ConnectionWrapper connWrapper, ReplicationUserData uData) { String adminUid = uData.getAdminUid(); try { ADSContext adsContext = new ADSContext(ctx); ADSContext adsContext = new ADSContext(connWrapper); Set<Map<AdministratorProperty, Object>> administrators = adsContext.readAdministratorRegistry(); for (Map<AdministratorProperty, Object> admin : administrators) @@ -3943,16 +4016,16 @@ */ private ReplicationCliReturnCode enableReplication(EnableReplicationUserData uData) { InitialLdapContext ctx1 = null; InitialLdapContext ctx2 = null; ConnectionWrapper ctx1 = null; ConnectionWrapper ctx2 = null; try { println(); print(formatter.getFormattedWithPoints(INFO_REPLICATION_CONNECTING.get())); LinkedList<LocalizableMessage> errorMessages = new LinkedList<>(); ctx1 = createAdministrativeContext(uData, true, errorMessages); ctx2 = createAdministrativeContext(uData, false, errorMessages); ctx1 = createAdministrativeConnection(uData, true, errorMessages); ctx2 = createAdministrativeConnection(uData, false, errorMessages); if (!errorMessages.isEmpty()) { @@ -3998,7 +4071,7 @@ try { updateConfiguration(ctx1, ctx2, uData); printSuccessfullyEnabled(ctx1, ctx2); printSuccessfullyEnabled(ctx1.getLdapContext(), ctx2.getLdapContext()); return SUCCESSFUL; } catch (ReplicationCliException rce) @@ -4015,26 +4088,27 @@ } } private void checkReplicationServerAlreadyConfigured(InitialLdapContext ctx, EnableReplicationServerData server) private void checkReplicationServerAlreadyConfigured( ConnectionWrapper connWrapper, EnableReplicationServerData server) { int repPort = getReplicationPort(ctx); int repPort = getReplicationPort(connWrapper); if (!server.configureReplicationServer() && repPort > 0) { println(INFO_REPLICATION_SERVER_CONFIGURED_WARNING.get(getHostPort(ctx), repPort)); println(INFO_REPLICATION_SERVER_CONFIGURED_WARNING.get(getHostPort(connWrapper.getLdapContext()), repPort)); println(); } } private void checksForNonInteractiveMode(EnableReplicationUserData uData, InitialLdapContext ctx1, InitialLdapContext ctx2, LinkedList<LocalizableMessage> errorMessages) ConnectionWrapper connWrapper1, ConnectionWrapper connWrapper2, LinkedList<LocalizableMessage> errorMessages) { EnableReplicationServerData server1 = uData.getServer1(); EnableReplicationServerData server2 = uData.getServer2(); String host1 = server1.getHostName(); String host2 = server2.getHostName(); int replPort1 = checkReplicationPort(ctx1, server1, errorMessages); int replPort2 = checkReplicationPort(ctx2, server2, errorMessages); int replPort1 = checkReplicationPort(connWrapper1, server1, errorMessages); int replPort2 = checkReplicationPort(connWrapper2, server2, errorMessages); if (replPort1 > 0 && replPort1 == replPort2 && host1.equalsIgnoreCase(host2)) { errorMessages.add(ERR_REPLICATION_SAME_REPLICATION_PORT.get(replPort1, host1)); @@ -4050,9 +4124,9 @@ } private int checkReplicationPort( InitialLdapContext ctx, EnableReplicationServerData server, LinkedList<LocalizableMessage> errorMessages) ConnectionWrapper connWrapper, EnableReplicationServerData server, LinkedList<LocalizableMessage> errorMessages) { int replPort = getReplicationPort(ctx); int replPort = getReplicationPort(connWrapper); boolean hasReplicationPort = replPort > 0; if (replPort < 0 && server.configureReplicationServer()) { @@ -4105,6 +4179,23 @@ } } private ConnectionWrapper createAdministrativeConnection(EnableReplicationUserData uData, boolean isFirstSetOfValues, LinkedList<LocalizableMessage> errorMessages) { EnableReplicationServerData server = isFirstSetOfValues ? uData.getServer1() : uData.getServer2(); try { return new ConnectionWrapper(createAdministrativeContext(uData, isFirstSetOfValues, errorMessages), getConnectTimeout(), getTrustManager(sourceServerCI)); } catch (NamingException e) { String hostPort = getServerRepresentation(server.getHostName(), server.getPort()); logger.error(LocalizableMessage.raw("Error when creating connection for:" + hostPort)); return null; } } private InitialLdapContext createAdministrativeContext(EnableReplicationUserData uData, boolean isFirstSetOfValues, LinkedList<LocalizableMessage> errorMessages) { @@ -4139,8 +4230,8 @@ ? getAdministratorDN(uData.getAdminUid()) : uData.getBindDn(); InitialLdapContext ctx = createAdministrativeContext(uData, bindDn); if (ctx == null) ConnectionWrapper connWrapper = createAdministrativeConnection(uData, bindDn); if (connWrapper == null) { return ERROR_CONNECTING; } @@ -4152,7 +4243,8 @@ println(); List<String> suffixes = uData.getBaseDNs(); checkSuffixesForDisableReplication(suffixes, ctx, false, !uData.disableReplicationServer()); checkSuffixesForDisableReplication( suffixes, connWrapper.getLdapContext(), false, !uData.disableReplicationServer()); if (suffixes.isEmpty() && !uData.disableReplicationServer() && !uData.disableAll()) { return REPLICATION_CANNOT_BE_DISABLED_ON_BASEDN; @@ -4161,7 +4253,7 @@ if (!isInteractive()) { boolean hasReplicationPort = hasReplicationPort(ctx); boolean hasReplicationPort = hasReplicationPort(connWrapper); if (uData.disableAll() && hasReplicationPort) { uData.setDisableReplicationServer(true); @@ -4169,7 +4261,8 @@ else if (uData.disableReplicationServer() && !hasReplicationPort && !uData.disableAll()) { uData.setDisableReplicationServer(false); println(INFO_REPLICATION_WARNING_NO_REPLICATION_SERVER_TO_DISABLE.get(getHostPort(ctx))); println( INFO_REPLICATION_WARNING_NO_REPLICATION_SERVER_TO_DISABLE.get(getHostPort(connWrapper.getLdapContext()))); println(); } } @@ -4179,17 +4272,19 @@ printNewCommandBuilder(DISABLE_REPLICATION_SUBCMD_NAME, uData); } if (!isInteractive() && !uData.disableReplicationServer() && !uData.disableAll() && disableAllBaseDns(ctx, uData) && hasReplicationPort(ctx)) if (!isInteractive() && !uData.disableReplicationServer() && !uData.disableAll() && disableAllBaseDns(connWrapper.getLdapContext(), uData) && hasReplicationPort(connWrapper)) { // Inform the user that the replication server will not be disabled. // Inform also of the user of the disableReplicationServerArg println(INFO_REPLICATION_DISABLE_ALL_SUFFIXES_KEEP_REPLICATION_SERVER.get(getHostPort(ctx), argParser.disableReplicationServerArg.getLongIdentifier(), argParser.disableAllArg.getLongIdentifier())); println(INFO_REPLICATION_DISABLE_ALL_SUFFIXES_KEEP_REPLICATION_SERVER.get( getHostPort(connWrapper.getLdapContext()), argParser.disableReplicationServerArg.getLongIdentifier(), argParser.disableAllArg.getLongIdentifier())); } try { updateConfiguration(ctx, uData); updateConfiguration(connWrapper, uData); return SUCCESSFUL; } catch (ReplicationCliException rce) @@ -4202,7 +4297,7 @@ } finally { close(ctx); close(connWrapper); } } @@ -4217,7 +4312,7 @@ private ReplicationCliReturnCode statusReplication( StatusReplicationUserData uData) { final InitialLdapContext ctx = createAdministrativeContext(uData); final ConnectionWrapper ctx = createAdministrativeConnection(uData); if (ctx == null) { return ERROR_CONNECTING; @@ -4521,7 +4616,7 @@ * replication domains must be configured or not. */ private void checkSuffixesForEnableReplication(Collection<String> suffixes, InitialLdapContext ctx1, InitialLdapContext ctx2, ConnectionWrapper ctx1, ConnectionWrapper ctx2, boolean interactive, EnableReplicationUserData uData) { EnableReplicationServerData server1 = uData.getServer1(); @@ -4531,9 +4626,9 @@ if (server1.configureReplicationDomain() && server2.configureReplicationDomain()) { availableSuffixes.addAll(getCommonSuffixes(ctx1, ctx2, availableSuffixes.addAll(getCommonSuffixes(ctx1.getLdapContext(), ctx2.getLdapContext(), SuffixRelationType.NOT_FULLY_REPLICATED)); alreadyReplicatedSuffixes.addAll(getCommonSuffixes(ctx1, ctx2, alreadyReplicatedSuffixes.addAll(getCommonSuffixes(ctx1.getLdapContext(), ctx2.getLdapContext(), SuffixRelationType.FULLY_REPLICATED)); } else if (server1.configureReplicationDomain()) @@ -5018,8 +5113,8 @@ * parameters to update the configuration. * @throws ReplicationCliException if there is an error. */ private void updateConfiguration(InitialLdapContext ctx1, InitialLdapContext ctx2, EnableReplicationUserData uData) private void updateConfiguration(ConnectionWrapper ctx1, ConnectionWrapper ctx2, EnableReplicationUserData uData) throws ReplicationCliException { final Set<String> twoReplServers = new LinkedHashSet<>(); @@ -5033,8 +5128,8 @@ filter.addBaseDNToSearch(ADSContext.getAdministrationSuffixDN()); filter.addBaseDNToSearch(Constants.SCHEMA_DN); addBaseDNs(filter, uData.getBaseDNs()); ServerDescriptor serverDesc1 = createStandalone(ctx1, filter); ServerDescriptor serverDesc2 = createStandalone(ctx2, filter); ServerDescriptor serverDesc1 = createStandalone(ctx1.getLdapContext(), filter); ServerDescriptor serverDesc2 = createStandalone(ctx2.getLdapContext(), filter); ADSContext adsCtx1 = new ADSContext(ctx1); ADSContext adsCtx2 = new ADSContext(ctx2); @@ -5047,8 +5142,8 @@ try { final Set<PreferredConnection> cnx = new LinkedHashSet<>(); cnx.addAll(getPreferredConnections(ctx1)); cnx.addAll(getPreferredConnections(ctx2)); cnx.addAll(getPreferredConnections(ctx1.getLdapContext())); cnx.addAll(getPreferredConnections(ctx2.getLdapContext())); TopologyCache cache1 = createTopologyCache(adsCtx1, cnx, uData); if (cache1 != null) { @@ -5121,8 +5216,8 @@ // These are used to identify which server we use to initialize // the contents of the other server (if any). InitialLdapContext ctxSource = null; InitialLdapContext ctxDestination = null; ConnectionWrapper ctxSource = null; ConnectionWrapper ctxDestination = null; ADSContext adsCtxSource = null; boolean adsAlreadyReplicated = false; @@ -5138,7 +5233,7 @@ Set<Map<ServerProperty, Object>> registry2 = adsCtx2.readServerRegistry(); if (registry2.size() <= 1) { if (!hasAdministrator(adsCtx1.getDirContext(), uData)) if (!hasAdministrator(adsCtx1.getConnection(), uData)) { adsCtx1.createAdministrator(getAdministratorProperties(uData)); } @@ -5156,7 +5251,7 @@ } else if (registry1.size() <= 1) { if (!hasAdministrator(adsCtx2.getDirContext(), uData)) if (!hasAdministrator(adsCtx2.getConnection(), uData)) { adsCtx2.createAdministrator(getAdministratorProperties(uData)); } @@ -5207,7 +5302,7 @@ { // The case where only the first ADS is replicated or none // is replicated. if (!hasAdministrator(adsCtx1.getDirContext(), uData)) if (!hasAdministrator(adsCtx1.getConnection(), uData)) { adsCtx1.createAdministrator(getAdministratorProperties(uData)); } @@ -5225,7 +5320,7 @@ } else if (isADS2Replicated) { if (!hasAdministrator(adsCtx2.getDirContext(), uData)) if (!hasAdministrator(adsCtx2.getConnection(), uData)) { adsCtx2.createAdministrator(getAdministratorProperties(uData)); } @@ -5246,7 +5341,7 @@ } else if (!adsCtx1.hasAdminData() && adsCtx2.hasAdminData()) { if (!hasAdministrator(adsCtx2.getDirContext(), uData)) if (!hasAdministrator(adsCtx2.getConnection(), uData)) { adsCtx2.createAdministrator(getAdministratorProperties(uData)); } @@ -5265,7 +5360,7 @@ } else if (adsCtx1.hasAdminData() && !adsCtx2.hasAdminData()) { if (!hasAdministrator(adsCtx1.getDirContext(), uData)) if (!hasAdministrator(adsCtx1.getConnection(), uData)) { adsCtx1.createAdministrator(getAdministratorProperties(uData)); } @@ -5311,14 +5406,13 @@ { try { ServerDescriptor.seedAdsTrustStore(ctxDestination, adsCtxSource.getTrustedCertificates()); ServerDescriptor.seedAdsTrustStore(ctxDestination.getLdapContext(), adsCtxSource.getTrustedCertificates()); } catch (Throwable t) { logger.error(LocalizableMessage.raw("Error seeding truststores: "+t, t)); throw new ReplicationCliException( ERR_REPLICATION_ENABLE_SEEDING_TRUSTSTORE.get(getHostPort(ctxDestination), ERR_REPLICATION_ENABLE_SEEDING_TRUSTSTORE.get(getHostPort(ctxDestination.getLdapContext()), getHostPort(adsCtxSource.getDirContext()), toString(t)), ERROR_SEEDING_TRUSTORE, t); } @@ -5348,8 +5442,8 @@ try { Set<PreferredConnection> cnx = new LinkedHashSet<>(); cnx.addAll(getPreferredConnections(ctx1)); cnx.addAll(getPreferredConnections(ctx2)); cnx.addAll(getPreferredConnections(ctx1.getLdapContext())); cnx.addAll(getPreferredConnections(ctx2.getLdapContext())); cache1 = createTopologyCache(adsCtx1, cnx, uData); if (cache1 != null) { @@ -5374,8 +5468,8 @@ ERROR_READING_TOPOLOGY_CACHE, tce); } addToSets(serverDesc1, uData.getServer1(), ctx1, twoReplServers, usedReplicationServerIds); addToSets(serverDesc2, uData.getServer2(), ctx2, twoReplServers, usedReplicationServerIds); addToSets(serverDesc1, uData.getServer1(), ctx1.getLdapContext(), twoReplServers, usedReplicationServerIds); addToSets(serverDesc2, uData.getServer2(), ctx2.getLdapContext(), twoReplServers, usedReplicationServerIds); for (String baseDN : uData.getBaseDNs()) { @@ -5436,11 +5530,11 @@ if (adsMergeDone) { PointAdder pointAdder = new PointAdder(this); print(INFO_ENABLE_REPLICATION_INITIALIZING_ADS_ALL.get(getHostPort(ctxSource))); print(INFO_ENABLE_REPLICATION_INITIALIZING_ADS_ALL.get(getHostPort(ctxSource.getLdapContext()))); pointAdder.start(); try { initializeAllSuffix(ADSContext.getAdministrationSuffixDN(), ctxSource, false); initializeAllSuffix(ADSContext.getAdministrationSuffixDN(), ctxSource.getLdapContext(), false); } finally { @@ -5454,9 +5548,10 @@ { print(formatter.getFormattedWithPoints( INFO_ENABLE_REPLICATION_INITIALIZING_ADS.get( getHostPort(ctxDestination), getHostPort(ctxSource)))); getHostPort(ctxDestination.getLdapContext()), getHostPort(ctxSource.getLdapContext())))); initializeSuffix(ADSContext.getAdministrationSuffixDN(), ctxSource, ctxDestination, false); initializeSuffix( ADSContext.getAdministrationSuffixDN(), ctxSource.getLdapContext(), ctxDestination.getLdapContext(), false); print(formatter.getFormattedDone()); println(); } @@ -5478,11 +5573,11 @@ { PointAdder pointAdder = new PointAdder(this); println(INFO_ENABLE_REPLICATION_INITIALIZING_SCHEMA.get( getHostPort(ctxDestination), getHostPort(ctxSource))); getHostPort(ctxDestination.getLdapContext()), getHostPort(ctxSource.getLdapContext()))); pointAdder.start(); try { initializeAllSuffix(Constants.SCHEMA_DN, ctxSource, false); initializeAllSuffix(Constants.SCHEMA_DN, ctxSource.getLdapContext(), false); } finally { @@ -5493,8 +5588,8 @@ else { print(formatter.getFormattedWithPoints(INFO_ENABLE_REPLICATION_INITIALIZING_SCHEMA.get( getHostPort(ctxDestination), getHostPort(ctxSource)))); initializeSuffix(Constants.SCHEMA_DN, ctxSource, ctxDestination, false); getHostPort(ctxDestination.getLdapContext()), getHostPort(ctxSource.getLdapContext())))); initializeSuffix(Constants.SCHEMA_DN, ctxSource.getLdapContext(), ctxDestination.getLdapContext(), false); } print(formatter.getFormattedDone()); println(); @@ -5515,7 +5610,7 @@ } } private void configureToReplicateBaseDN(EnableReplicationServerData server, InitialLdapContext ctx, private void configureToReplicateBaseDN(EnableReplicationServerData server, ConnectionWrapper ctx, ServerDescriptor serverDesc, TopologyCache cache, String baseDN, Set<Integer> usedIds, Set<String> alreadyConfiguredServers, Set<String> repServers, final Set<String> allRepServers, Set<String> alreadyConfiguredReplicationServers) throws ReplicationCliException @@ -5527,9 +5622,9 @@ { configureToReplicateBaseDN(ctx, baseDN, repServers, usedIds); } catch (OpenDsException ode) catch (Exception ode) { LocalizableMessage msg = getMessageForEnableException(getHostPort(ctx), baseDN); LocalizableMessage msg = getMessageForEnableException(getHostPort(ctx.getLdapContext()), baseDN); throw new ReplicationCliException(msg, ERROR_ENABLING_REPLICATION_ON_BASEDN, ode); } } @@ -5542,7 +5637,7 @@ } } private void configureServer(InitialLdapContext ctx, ServerDescriptor serverDesc, private void configureServer(ConnectionWrapper ctx, ServerDescriptor serverDesc, EnableReplicationServerData enableServer, IntegerArgument replicationPortArg, Set<Integer> usedReplicationServerIds, Set<String> allRepServers, Set<String> alreadyConfiguredReplicationServers, Arg2<Number, Number> replicationServerAlreadyConfiguredMsg) @@ -5555,9 +5650,9 @@ configureAsReplicationServer(ctx, enableServer.getReplicationPort(), enableServer.isSecureReplication(), allRepServers, usedReplicationServerIds); } catch (OpenDsException ode) catch (Exception ode) { throw errorConfiguringReplicationServer(ctx, ode); throw errorConfiguringReplicationServer(ctx.getLdapContext(), ode); } } else if (serverDesc.isReplicationServer()) @@ -5566,9 +5661,9 @@ { updateReplicationServer(ctx, allRepServers); } catch (OpenDsException ode) catch (Exception ode) { throw errorConfiguringReplicationServer(ctx, ode); throw errorConfiguringReplicationServer(ctx.getLdapContext(), ode); } if (replicationPortArg.isPresent() && enableServer.getReplicationPort() != serverDesc.getReplicationServerPort()) { @@ -5581,7 +5676,7 @@ alreadyConfiguredReplicationServers.add(serverDesc.getId()); } private ReplicationCliException errorConfiguringReplicationServer(InitialLdapContext ctx, OpenDsException ode) private ReplicationCliException errorConfiguringReplicationServer(InitialLdapContext ctx, Exception ode) { return new ReplicationCliException( ERR_REPLICATION_CONFIGURING_REPLICATIONSERVER.get(getHostPort(ctx)), @@ -5626,7 +5721,7 @@ * parameters to update the configuration. * @throws ReplicationCliException if there is an error. */ private void updateConfiguration(InitialLdapContext ctx, private void updateConfiguration(ConnectionWrapper ctx, DisableReplicationUserData uData) throws ReplicationCliException { TopologyCacheFilter filter = new TopologyCacheFilter(); @@ -5636,7 +5731,7 @@ filter.addBaseDNToSearch(ADSContext.getAdministrationSuffixDN()); addBaseDNs(filter, uData.getBaseDNs()); } ServerDescriptor server = createStandalone(ctx, filter); ServerDescriptor server = createStandalone(ctx.getLdapContext(), filter); ADSContext adsCtx = new ADSContext(ctx); @@ -5649,7 +5744,7 @@ if (adsCtx.hasAdminData() && tryToUpdateRemote) { cache = new TopologyCache(adsCtx, getTrustManager(sourceServerCI), getConnectTimeout()); cache.setPreferredConnections(getPreferredConnections(ctx)); cache.setPreferredConnections(getPreferredConnections(ctx.getLdapContext())); cache.getFilter().setSearchMonitoringInformation(false); if (!uData.disableAll()) { @@ -5820,9 +5915,9 @@ boolean forceDisableADS = false; boolean schemaReplicated = false; boolean adsReplicated = false; boolean disableAllBaseDns = disableAllBaseDns(ctx, uData); boolean disableAllBaseDns = disableAllBaseDns(ctx.getLdapContext(), uData); Collection<ReplicaDescriptor> replicas = getReplicas(ctx); Collection<ReplicaDescriptor> replicas = getReplicas(ctx.getLdapContext()); for (ReplicaDescriptor rep : replicas) { String dn = rep.getSuffix().getDN(); @@ -5920,7 +6015,7 @@ } catch (OpenDsException ode) { LocalizableMessage msg = getMessageForDisableException(getHostPort(ctx), baseDN); LocalizableMessage msg = getMessageForDisableException(getHostPort(ctx.getLdapContext()), baseDN); throw new ReplicationCliException(msg, ERROR_DISABLING_REPLICATION_ON_BASEDN, ode); } @@ -5957,13 +6052,13 @@ } } } String bindDn = getBindDN(ctx); String pwd = getBindPassword(ctx); String bindDn = getBindDN(ctx.getLdapContext()); String pwd = getBindPassword(ctx.getLdapContext()); for (ServerDescriptor s : serversToUpdate) { removeReferencesInServer(s, replicationServerHostPort, bindDn, pwd, baseDNsToUpdate, disableReplicationServer, getPreferredConnections(ctx)); getPreferredConnections(ctx.getLdapContext())); } if (disableReplicationServer) @@ -6041,7 +6136,7 @@ * parameters to update the configuration. * @throws ReplicationCliException if there is an error. */ private void displayStatus(InitialLdapContext ctx, private void displayStatus(ConnectionWrapper ctx, StatusReplicationUserData uData) throws ReplicationCliException { ADSContext adsCtx = new ADSContext(ctx); @@ -6051,7 +6146,7 @@ try { cache = new TopologyCache(adsCtx, getTrustManager(sourceServerCI), getConnectTimeout()); cache.setPreferredConnections(getPreferredConnections(ctx)); cache.setPreferredConnections(getPreferredConnections(ctx.getLdapContext())); addBaseDNs(cache.getFilter(), uData.getBaseDNs()); cache.reloadTopology(); } @@ -6132,7 +6227,7 @@ } if (!rServers.isEmpty()) { displayStatus(rServers, uData.isScriptFriendly(), getPreferredConnections(ctx)); displayStatus(rServers, uData.isScriptFriendly(), getPreferredConnections(ctx.getLdapContext())); somethingDisplayed = true; } } @@ -6162,7 +6257,7 @@ Set<ReplicaDescriptor> replicasWithNoReplicationServer = new HashSet<>(); Set<ServerDescriptor> serversWithNoReplica = new HashSet<>(); displayStatus(orderedReplicaLists, uData.isScriptFriendly(), getPreferredConnections(ctx), getPreferredConnections(ctx.getLdapContext()), cache.getServers(), replicasWithNoReplicationServer, serversWithNoReplica); somethingDisplayed = true; @@ -6721,17 +6816,15 @@ * that will be used by the newly configured replication server. * @throws OpenDsException if there is an error updating the configuration. */ private void configureAsReplicationServer(InitialLdapContext ctx, private void configureAsReplicationServer(ConnectionWrapper ctx, int replicationPort, boolean useSecureReplication, Set<String> replicationServers, Set<Integer> usedReplicationServerIds) throws OpenDsException Set<Integer> usedReplicationServerIds) throws Exception { print(formatter.getFormattedWithPoints( INFO_REPLICATION_ENABLE_CONFIGURING_REPLICATION_SERVER.get(getHostPort(ctx)))); INFO_REPLICATION_ENABLE_CONFIGURING_REPLICATION_SERVER.get(getHostPort(ctx.getLdapContext())))); ManagementContext mCtx = LDAPManagementContext.createFromContext( JNDIDirContextAdaptor.adapt(ctx)); RootCfgClient root = mCtx.getRootConfiguration(); RootCfgClient root = ctx.getRootConfiguration(); /* Configure Synchronization plugin. */ ReplicationSynchronizationProviderCfgClient sync = null; @@ -6742,7 +6835,8 @@ } catch (ManagedObjectNotFoundException monfe) { logger.info(LocalizableMessage.raw("Synchronization server does not exist in " + getHostPort(ctx))); logger.info(LocalizableMessage.raw( "Synchronization server does not exist in " + getHostPort(ctx.getLdapContext()))); } if (sync == null) { @@ -6820,15 +6914,13 @@ * replication server will communicate with. * @throws OpenDsException if there is an error updating the configuration. */ private void updateReplicationServer(InitialLdapContext ctx, Set<String> replicationServers) throws OpenDsException private void updateReplicationServer(ConnectionWrapper ctx, Set<String> replicationServers) throws Exception { print(formatter.getFormattedWithPoints( INFO_REPLICATION_ENABLE_UPDATING_REPLICATION_SERVER.get(getHostPort(ctx)))); INFO_REPLICATION_ENABLE_UPDATING_REPLICATION_SERVER.get(getHostPort(ctx.getLdapContext())))); ManagementContext mCtx = LDAPManagementContext.createFromContext( JNDIDirContextAdaptor.adapt(ctx)); RootCfgClient root = mCtx.getRootConfiguration(); RootCfgClient root = ctx.getRootConfiguration(); ReplicationSynchronizationProviderCfgClient sync = (ReplicationSynchronizationProviderCfgClient) @@ -6889,10 +6981,10 @@ * that will be used by the newly configured replication server. * @throws OpenDsException if there is an error updating the configuration. */ private void configureToReplicateBaseDN(InitialLdapContext ctx, private void configureToReplicateBaseDN(ConnectionWrapper ctx, String baseDN, Set<String> replicationServers, Set<Integer> usedReplicationDomainIds) throws OpenDsException Set<Integer> usedReplicationDomainIds) throws Exception { boolean userSpecifiedAdminBaseDN = false; List<String> l = argParser.getBaseDNs(); @@ -6904,16 +6996,14 @@ && areDnsEqual(baseDN, ADSContext.getAdministrationSuffixDN())) { print(formatter.getFormattedWithPoints( INFO_REPLICATION_ENABLE_CONFIGURING_ADS.get(getHostPort(ctx)))); INFO_REPLICATION_ENABLE_CONFIGURING_ADS.get(getHostPort(ctx.getLdapContext())))); } else { print(formatter.getFormattedWithPoints( INFO_REPLICATION_ENABLE_CONFIGURING_BASEDN.get(baseDN, getHostPort(ctx)))); INFO_REPLICATION_ENABLE_CONFIGURING_BASEDN.get(baseDN, getHostPort(ctx.getLdapContext())))); } ManagementContext mCtx = LDAPManagementContext.createFromContext( JNDIDirContextAdaptor.adapt(ctx)); RootCfgClient root = mCtx.getRootConfiguration(); RootCfgClient root = ctx.getRootConfiguration(); ReplicationSynchronizationProviderCfgClient sync = (ReplicationSynchronizationProviderCfgClient) @@ -7039,16 +7129,18 @@ { logger.info(LocalizableMessage.raw("Configuring server "+server.getHostPort(true))); InitialLdapContext ctx = null; ConnectionWrapper conn = null; try { ctx = getDirContextForServer(cache, s); conn = new ConnectionWrapper(ctx, getConnectTimeout(), getTrustManager(sourceServerCI)); if (serversToConfigureDomain.contains(s)) { configureToReplicateBaseDN(ctx, baseDN, repServers, usedIds); configureToReplicateBaseDN(conn, baseDN, repServers, usedIds); } if (replicationServersToConfigure.contains(s)) { updateReplicationServer(ctx, allRepServers); updateReplicationServer(conn, allRepServers); } } catch (NamingException ne) @@ -7057,7 +7149,7 @@ LocalizableMessage msg = getMessageForException(ne, hostPort); throw new ReplicationCliException(msg, ERROR_CONNECTING, ne); } catch (OpenDsException ode) catch (Exception ode) { String hostPort = getHostPort2(s, cache.getPreferredConnections()); LocalizableMessage msg = getMessageForEnableException(hostPort, baseDN); @@ -7067,6 +7159,7 @@ finally { close(ctx); close(conn); } alreadyConfiguredServers.add(s.getId()); alreadyConfiguredReplicationServers.add(s.getId()); @@ -7659,17 +7752,15 @@ filter.setSearchBaseDNInformation(false); ServerLoader loader = new ServerLoader(server.getAdsProperties(), bindDn, pwd, getTrustManager(sourceServerCI), getConnectTimeout(), cnx, filter); InitialLdapContext ctx = null; ConnectionWrapper ctx = null; String lastBaseDN = null; String hostPort = null; try { ctx = loader.createContext(); hostPort = getHostPort(ctx); ManagementContext mCtx = LDAPManagementContext.createFromContext( JNDIDirContextAdaptor.adapt(ctx)); RootCfgClient root = mCtx.getRootConfiguration(); ctx = loader.createConnectionWrapper(); hostPort = getHostPort(ctx.getLdapContext()); RootCfgClient root = ctx.getRootConfiguration(); ReplicationSynchronizationProviderCfgClient sync = null; try { @@ -7756,7 +7847,7 @@ LocalizableMessage msg = getMessageForException(ne, hostPort); throw new ReplicationCliException(msg, ERROR_CONNECTING, ne); } catch (OpenDsException ode) catch (Exception ode) { if (lastBaseDN != null) { @@ -7786,15 +7877,12 @@ * @throws ReplicationCliException if there is an error updating the * configuration of the server. */ private void deleteReplicationDomain(InitialLdapContext ctx, String baseDN) throws ReplicationCliException private void deleteReplicationDomain(ConnectionWrapper ctx, String baseDN) throws ReplicationCliException { String hostPort = getHostPort(ctx); String hostPort = getHostPort(ctx.getLdapContext()); try { ManagementContext mCtx = LDAPManagementContext.createFromContext( JNDIDirContextAdaptor.adapt(ctx)); RootCfgClient root = mCtx.getRootConfiguration(); RootCfgClient root = ctx.getRootConfiguration(); ReplicationSynchronizationProviderCfgClient sync = null; try { @@ -7830,7 +7918,7 @@ } } } catch (OpenDsException ode) catch (Exception ode) { LocalizableMessage msg = getMessageForDisableException(hostPort, baseDN); throw new ReplicationCliException(msg, @@ -7840,19 +7928,17 @@ /** * Disables the replication server for a given server. * @param ctx the connection to the server. * @param connWrapper the connection to the server. * @throws ReplicationCliException if there is an error updating the * configuration of the server. */ private void disableReplicationServer(InitialLdapContext ctx) private void disableReplicationServer(ConnectionWrapper connWrapper) throws ReplicationCliException { String hostPort = getHostPort(ctx); String hostPort = getHostPort(connWrapper.getLdapContext()); try { ManagementContext mCtx = LDAPManagementContext.createFromContext( JNDIDirContextAdaptor.adapt(ctx)); RootCfgClient root = mCtx.getRootConfiguration(); RootCfgClient root = connWrapper.getRootConfiguration(); ReplicationSynchronizationProviderCfgClient sync = null; ReplicationServerCfgClient replicationServer = null; try @@ -7883,7 +7969,7 @@ println(); } } catch (OpenDsException ode) catch (Exception ode) { throw new ReplicationCliException( ERR_REPLICATION_DISABLING_REPLICATIONSERVER.get(hostPort), @@ -9124,13 +9210,13 @@ } private void updateAvailableAndReplicatedSuffixesForOneDomain( InitialLdapContext ctxDomain, InitialLdapContext ctxOther, ConnectionWrapper ctxDomain, ConnectionWrapper ctxOther, Set<String> availableSuffixes, Set<String> alreadyReplicatedSuffixes) { Collection<ReplicaDescriptor> replicas = getReplicas(ctxDomain); Collection<ReplicaDescriptor> replicas = getReplicas(ctxDomain.getLdapContext()); int replicationPort = getReplicationPort(ctxOther); boolean isReplicationServerConfigured = replicationPort != -1; String replicationServer = getReplicationServer(getHostName(ctxOther), replicationPort); String replicationServer = getReplicationServer(getHostName(ctxOther.getLdapContext()), replicationPort); for (ReplicaDescriptor replica : replicas) { if (!isReplicationServerConfigured) @@ -9162,16 +9248,16 @@ } private void updateAvailableAndReplicatedSuffixesForNoDomain( InitialLdapContext ctx1, InitialLdapContext ctx2, ConnectionWrapper ctx1, ConnectionWrapper ctx2, Set<String> availableSuffixes, Set<String> alreadyReplicatedSuffixes) { int replicationPort1 = getReplicationPort(ctx1); boolean isReplicationServer1Configured = replicationPort1 != -1; String replicationServer1 = getReplicationServer(getHostName(ctx1), replicationPort1); String replicationServer1 = getReplicationServer(getHostName(ctx1.getLdapContext()), replicationPort1); int replicationPort2 = getReplicationPort(ctx2); boolean isReplicationServer2Configured = replicationPort2 != -1; String replicationServer2 = getReplicationServer(getHostName(ctx2), replicationPort2); String replicationServer2 = getReplicationServer(getHostName(ctx2.getLdapContext()), replicationPort2); TopologyCache cache1 = isReplicationServer1Configured ? createTopologyCache(ctx1) : null; TopologyCache cache2 = isReplicationServer2Configured ? createTopologyCache(ctx2) : null; @@ -9194,7 +9280,7 @@ } } private TopologyCache createTopologyCache(InitialLdapContext ctx) private TopologyCache createTopologyCache(ConnectionWrapper ctx) { try { @@ -9203,14 +9289,15 @@ { TopologyCache cache = new TopologyCache(adsContext, getTrustManager(sourceServerCI), getConnectTimeout()); cache.getFilter().setSearchMonitoringInformation(false); cache.setPreferredConnections(getPreferredConnections(ctx)); cache.setPreferredConnections(getPreferredConnections(ctx.getLdapContext())); cache.reloadTopology(); return cache; } } catch (Throwable t) { logger.warn(LocalizableMessage.raw("Error loading topology cache in " + getLdapUrl(ctx) + ": " + t, t)); logger.warn(LocalizableMessage.raw("Error loading topology cache in " + getLdapUrl(ctx.getLdapContext()) + ": " + t, t)); } return null; } @@ -9298,9 +9385,9 @@ createTopologyCache(adsCtx1, uData, suffixes); createTopologyCache(adsCtx2, uData, suffixes); int repPort1 = getReplicationPort(adsCtx1.getDirContext()); int repPort1 = getReplicationPort(adsCtx1.getConnection()); String repServer1 = getReplicationServer(server1.getHostName(), repPort1); int repPort2 = getReplicationPort(adsCtx2.getDirContext()); int repPort2 = getReplicationPort(adsCtx2.getConnection()); String repServer2 = getReplicationServer(server2.getHostName(), repPort2); for (String baseDN : uData.getBaseDNs()) { opendj-server-legacy/src/main/java/org/opends/server/tools/status/StatusCli.java
@@ -48,6 +48,7 @@ import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.LocalizableMessageBuilder; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.config.AdminException; import org.forgerock.opendj.config.LDAPProfile; import org.forgerock.opendj.config.client.ManagementContext; import org.forgerock.opendj.config.client.ldap.LDAPManagementContext; @@ -61,6 +62,7 @@ import org.forgerock.util.Options; import org.forgerock.util.time.Duration; import org.opends.admin.ads.util.ApplicationTrustManager; import org.opends.admin.ads.util.ConnectionWrapper; import org.opends.guitools.controlpanel.datamodel.BackendDescriptor; import org.opends.guitools.controlpanel.datamodel.BaseDNDescriptor; import org.opends.guitools.controlpanel.datamodel.BaseDNTableModel; @@ -76,7 +78,6 @@ import org.forgerock.opendj.ldap.DN; import org.opends.server.types.InitializationException; import org.opends.server.types.NullOutputStream; import org.opends.server.types.OpenDsException; import org.opends.server.util.BuildVersion; import org.opends.server.util.StaticUtils; import org.opends.server.util.cli.LDAPConnectionConsoleInteraction; @@ -330,7 +331,8 @@ InitialLdapContext ctx = null; try { ctx = Utilities.getAdminDirContext(controlInfo, bindDn, bindPwd); controlInfo.setDirContext(ctx); controlInfo.setConnection( new ConnectionWrapper(ctx, controlInfo.getConnectTimeout(), controlInfo.getTrustManager())); controlInfo.regenerateDescriptor(); writeStatus(controlInfo); @@ -782,9 +784,10 @@ */ private void writeErrorContents(ServerDescriptor desc) { for (OpenDsException ex : desc.getExceptions()) for (Exception ex : desc.getExceptions()) { LocalizableMessage errorMsg = ex.getMessageObject(); LocalizableMessage errorMsg = ex instanceof AdminException ? ((AdminException) ex).getMessageObject() : LocalizableMessage.raw(ex.getMessage()); if (errorMsg != null) { println();