Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 438 invoked from network); 12 Oct 2007 02:39:45 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 12 Oct 2007 02:39:45 -0000 Received: (qmail 36380 invoked by uid 500); 12 Oct 2007 02:39:33 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 36325 invoked by uid 500); 12 Oct 2007 02:39:33 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 36314 invoked by uid 99); 12 Oct 2007 02:39:33 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 11 Oct 2007 19:39:33 -0700 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 12 Oct 2007 02:39:43 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id D5C161A9832; Thu, 11 Oct 2007 19:39:22 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r584030 [1/2] - in /directory/apacheds/branches/bigbang: protocol-kerberos/src/test/java/org/apache/directory/server/kerberos/kdc/ protocol-ldap/ protocol-ldap/src/main/java/org/apache/directory/server/ldap/ protocol-ldap/src/main/java/org/... Date: Fri, 12 Oct 2007 02:39:16 -0000 To: commits@directory.apache.org From: akarasulu@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20071012023922.D5C161A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: akarasulu Date: Thu Oct 11 19:39:14 2007 New Revision: 584030 URL: http://svn.apache.org/viewvc?rev=584030&view=rev Log: breaks a bunch of stuff but commiting for trustin to test something for me Added: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapServer.java (contents, props changed) - copied, changed from r583968, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolProvider.java directory/apacheds/branches/bigbang/protocol-ldap/src/test/java/org/apache/directory/server/ldap/LdapServerTest.java (contents, props changed) - copied, changed from r583968, directory/apacheds/branches/bigbang/protocol-ldap/src/test/java/org/apache/directory/server/ldap/LdapProtocolProviderTest.java Removed: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapConfiguration.java directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolProvider.java directory/apacheds/branches/bigbang/protocol-ldap/src/test/java/org/apache/directory/server/ldap/LdapProtocolProviderTest.java Modified: directory/apacheds/branches/bigbang/protocol-kerberos/src/test/java/org/apache/directory/server/kerberos/kdc/SaslGssapiBindITest.java directory/apacheds/branches/bigbang/protocol-ldap/pom.xml directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/ExtendedOperationHandler.java directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/SessionRegistry.java directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AbstractLdapHandler.java directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultBindHandler.java directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultSearchHandler.java directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/bind/ConfigureChain.java directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/GracefulShutdownHandler.java directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/LaunchDiagnosticUiHandler.java directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/StoredProcedureExtendedOperationHandler.java directory/apacheds/branches/bigbang/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/diagnosticcmd/DiagnosticCommandExecutor.java directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/disconnectnotificationcmd/DisconnectNotificationCommandExecutor.java directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/exportcmd/ExportCommandExecutor.java directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/gracefulshutdowncmd/GracefulShutdownCommandExecutor.java directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/importcmd/ImportCommandExecutor.java directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/storedprocedurecmd/StoredProcedureCommandExecutor.java directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerFastTest.java directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerTest.java directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/KeyDerivationServiceITest.java directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/SaslBindITest.java directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/StoredProcedureExecutionITest.java directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/ssl/LdapsITest.java Modified: directory/apacheds/branches/bigbang/protocol-kerberos/src/test/java/org/apache/directory/server/kerberos/kdc/SaslGssapiBindITest.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-kerberos/src/test/java/org/apache/directory/server/kerberos/kdc/SaslGssapiBindITest.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/protocol-kerberos/src/test/java/org/apache/directory/server/kerberos/kdc/SaslGssapiBindITest.java (original) +++ directory/apacheds/branches/bigbang/protocol-kerberos/src/test/java/org/apache/directory/server/kerberos/kdc/SaslGssapiBindITest.java Thu Oct 11 19:39:14 2007 @@ -20,17 +20,6 @@ package org.apache.directory.server.kerberos.kdc; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.List; -import java.util.Set; - -import javax.naming.Context; -import javax.naming.directory.Attribute; -import javax.naming.directory.Attributes; -import javax.naming.directory.DirContext; -import javax.naming.directory.InitialDirContext; - import org.apache.directory.server.core.DirectoryService; import org.apache.directory.server.core.interceptor.Interceptor; import org.apache.directory.server.core.kerberos.KeyDerivationInterceptor; @@ -39,7 +28,7 @@ import org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmIndex; import org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmPartition; import org.apache.directory.server.kerberos.shared.store.KerberosAttribute; -import org.apache.directory.server.ldap.LdapConfiguration; +import org.apache.directory.server.ldap.LdapServer; import org.apache.directory.server.protocol.shared.SocketAcceptor; import org.apache.directory.server.unit.AbstractServerTest; import org.apache.directory.shared.ldap.message.AttributeImpl; @@ -47,6 +36,16 @@ import org.apache.directory.shared.ldap.message.ModificationItemImpl; import org.apache.mina.util.AvailablePortFinder; +import javax.naming.Context; +import javax.naming.directory.Attribute; +import javax.naming.directory.Attributes; +import javax.naming.directory.DirContext; +import javax.naming.directory.InitialDirContext; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.List; +import java.util.Set; + /** * An {@link AbstractServerTest} testing SASL GSSAPI authentication @@ -82,7 +81,7 @@ { apacheDS.setAllowAnonymousAccess( false ); - LdapConfiguration ldapConfig = apacheDS.getLdapConfiguration(); + LdapServer ldapConfig = apacheDS.getLdapServer(); ldapConfig.setSaslHost( "localhost" ); ldapConfig.setSaslPrincipal( "ldap/localhost@EXAMPLE.COM" ); Modified: directory/apacheds/branches/bigbang/protocol-ldap/pom.xml URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/pom.xml?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/protocol-ldap/pom.xml (original) +++ directory/apacheds/branches/bigbang/protocol-ldap/pom.xml Thu Oct 11 19:39:14 2007 @@ -57,6 +57,12 @@ org.apache.directory.server + apacheds-bootstrap-partition + ${pom.version} + + + + org.apache.directory.server apacheds-protocol-shared ${pom.version} Modified: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/ExtendedOperationHandler.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/ExtendedOperationHandler.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/ExtendedOperationHandler.java (original) +++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/ExtendedOperationHandler.java Thu Oct 11 19:39:14 2007 @@ -70,5 +70,5 @@ * * @param provider the ldap protocol provider */ - void setLdapProvider( LdapProtocolProvider provider ); + void setLdapProvider( LdapServer provider ); } Copied: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapServer.java (from r583968, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolProvider.java) URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapServer.java?p2=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapServer.java&p1=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolProvider.java&r1=583968&r2=584030&rev=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolProvider.java (original) +++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapServer.java Thu Oct 11 19:39:14 2007 @@ -21,18 +21,21 @@ import org.apache.directory.server.core.DirectoryService; +import org.apache.directory.server.core.partition.PartitionNexus; import org.apache.directory.server.ldap.support.*; +import org.apache.directory.server.ldap.support.ssl.LdapsInitializer; +import org.apache.directory.server.protocol.shared.ServiceConfiguration; +import org.apache.directory.server.protocol.shared.ServiceConfigurationException; import org.apache.directory.server.schema.registries.AttributeTypeRegistry; import org.apache.directory.shared.asn1.codec.Asn1CodecDecoder; import org.apache.directory.shared.asn1.codec.Asn1CodecEncoder; -import org.apache.directory.shared.ldap.exception.LdapNamingException; import org.apache.directory.shared.ldap.message.*; import org.apache.directory.shared.ldap.message.extended.NoticeOfDisconnect; import org.apache.directory.shared.ldap.message.spi.BinaryAttributeDetector; import org.apache.directory.shared.ldap.schema.AttributeType; -import org.apache.mina.common.IoFilterChain; -import org.apache.mina.common.IoHandler; -import org.apache.mina.common.IoSession; +import org.apache.directory.shared.ldap.exception.LdapNamingException; +import org.apache.directory.shared.ldap.exception.LdapConfigurationException; +import org.apache.mina.common.*; import org.apache.mina.filter.SSLFilter; import org.apache.mina.filter.codec.ProtocolCodecFactory; import org.apache.mina.filter.codec.ProtocolCodecFilter; @@ -40,11 +43,18 @@ import org.apache.mina.filter.codec.ProtocolEncoder; import org.apache.mina.handler.demux.DemuxingIoHandler; import org.apache.mina.util.SessionLog; +import org.apache.mina.transport.socket.nio.SocketAcceptor; +import org.apache.mina.transport.socket.nio.SocketAcceptorConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.naming.Context; import javax.naming.NamingException; import javax.naming.ldap.Control; import java.util.*; +import java.io.File; +import java.io.IOException; +import java.net.InetSocketAddress; /** @@ -54,19 +64,78 @@ * @author Apache Directory Project * @version $Rev$ */ -public class LdapProtocolProvider +public class LdapServer extends ServiceConfiguration { + @SuppressWarnings ( { "UnusedDeclaration" } ) + private static final long serialVersionUID = 3757127143811666817L; + + /** logger for this class */ + private static final Logger LOG = LoggerFactory.getLogger( LdapServer.class.getName() ); + + /** The default maximum size limit. */ + private static final int MAX_SIZE_LIMIT_DEFAULT = 100; + + /** The default maximum time limit. */ + private static final int MAX_TIME_LIMIT_DEFAULT = 10000; + + /** + * The default service pid. + */ + private static final String SERVICE_PID_DEFAULT = "org.apache.directory.server.ldap"; + + /** + * The default service name. + */ + private static final String SERVICE_NAME_DEFAULT = "ApacheDS LDAP Service"; + + /** The default IP port. */ + private static final int IP_PORT_DEFAULT = 389; + /** the constant service name of this ldap protocol provider **/ public static final String SERVICE_NAME = "ldap"; /** a set of supported controls */ private Set supportedControls; - /** configuration for the LDAP protocol provider **/ - private LdapConfiguration ldapConfiguration; - private DirectoryService directoryService; + /** The maximum size limit. */ + private int maxSizeLimit = MAX_SIZE_LIMIT_DEFAULT; // set to default value + + /** The maximum time limit. */ + private int maxTimeLimit = MAX_TIME_LIMIT_DEFAULT; // set to default value (milliseconds) + + /** Whether LDAPS is enabled. */ + private boolean enableLdaps; + + /** Whether to allow anonymous access. */ + private boolean allowAnonymousAccess = true; // allow by default + + /** The path to the certificate file. */ + private File ldapsCertificateFile = new File( "server-work" + File.separator + "certificates" + File.separator + + "server.cert" ); + + /** The certificate password. */ + private String ldapsCertificatePassword = "changeit"; + + /** The extended operation handlers. */ + private final Collection extendedOperationHandlers = new ArrayList(); + + /** The supported authentication mechanisms. */ + private Set supportedMechanisms; + + /** The name of this host, validated during SASL negotiation. */ + private String saslHost = "ldap.example.com"; + + /** The service principal, used by GSSAPI. */ + private String saslPrincipal = "ldap/ldap.example.com@EXAMPLE.COM"; + + /** The quality of protection (QoP), used by DIGEST-MD5 and GSSAPI. */ + private List saslQop; + + /** The list of realms serviced by this host. */ + private List saslRealms; + private AbandonHandler abandonHandler; private AddHandler addHandler; private BindHandler bindHandler; @@ -78,41 +147,47 @@ private SearchHandler searchHandler; private UnbindHandler unbindHandler; - private final SessionRegistry registry; + + private SessionRegistry registry; /** the underlying provider codec factory */ - private final ProtocolCodecFactory codecFactory; + private ProtocolCodecFactory codecFactory; /** the MINA protocol handler */ private final LdapProtocolHandler handler = new LdapProtocolHandler(); + private final SocketAcceptor socketAcceptor; - // ------------------------------------------------------------------------ - // C O N S T R U C T O R S - // ------------------------------------------------------------------------ - + /** tracks state of the server */ + private boolean started; /** - * Creates a MINA LDAP protocol provider. + * Creates an LDAP protocol provider. * - * underlying codec providers if any - * @param cfg the ldap configuration - * @param directoryService the directory service core - * - * @throws LdapNamingException if there are problems setting up the protocol provider + * @param socketAcceptor the mina socket acceptor wrapper */ - public LdapProtocolProvider( DirectoryService directoryService, LdapConfiguration cfg ) throws LdapNamingException + public LdapServer( SocketAcceptor socketAcceptor ) { - this.ldapConfiguration = cfg; - this.directoryService = directoryService; + this.socketAcceptor = socketAcceptor; + super.setIpPort( IP_PORT_DEFAULT ); + super.setEnabled( true ); + super.setServicePid( SERVICE_PID_DEFAULT ); + super.setServiceName( SERVICE_NAME_DEFAULT ); + + supportedMechanisms = new HashSet(); + supportedMechanisms.add( "SIMPLE" ); + supportedMechanisms.add( "CRAM-MD5" ); + supportedMechanisms.add( "DIGEST-MD5" ); + supportedMechanisms.add( "GSSAPI" ); + + saslQop = new ArrayList(); + saslQop.add( "auth" ); + saslQop.add( "auth-int" ); + saslQop.add( "auth-conf" ); - Hashtable copy = new Hashtable(); - copy.put( Context.PROVIDER_URL, "" ); - copy.put( Context.INITIAL_CONTEXT_FACTORY, "org.apache.directory.server.core.jndi.CoreContextFactory" ); - copy.put( DirectoryService.JNDI_KEY, directoryService ); - - this.registry = new SessionRegistry( cfg, copy ); + saslRealms = new ArrayList(); + saslRealms.add( "example.com" ); this.supportedControls = new HashSet(); this.supportedControls.add( PersistentSearchControl.CONTROL_OID ); @@ -131,14 +206,141 @@ setModifyDnHandler( new DefaultModifyDnHandler() ); setSearchHandler( new DefaultSearchHandler() ); setUnbindHandler( new DefaultUnbindHandler() ); + } - this.codecFactory = new ProtocolCodecFactoryImpl( directoryService ); + + /** + * @org.apache.xbean.InitMethod + * @throws IOException if we cannot bind to the specified port + * @throws NamingException if the LDAP server cannot be started + */ + public void start() throws NamingException, IOException + { + if ( ! isEnabled() ) + { + return; + } + + IoFilterChainBuilder chain; + if ( isEnableLdaps() ) + { + char[] certPasswordChars = getLdapsCertificatePassword().toCharArray(); + String storePath = getLdapsCertificateFile().getPath(); + chain = LdapsInitializer.init( certPasswordChars, storePath ); + } + else + { + chain = new DefaultIoFilterChainBuilder(); + startLDAP0( getIpPort(), chain ); + } + + startLDAP0( getIpPort(), chain ); + started = true; } - // ------------------------------------------------------------------------ - // ProtocolProvider Methods - // ------------------------------------------------------------------------ + /** + * @org.apache.xbean.DestroyMethod + */ + public void stop() + { + try + { + // we should unbind the service before we begin sending the notice + // of disconnect so new connections are not formed while we process + List writeFutures = new ArrayList(); + + // If the socket has already been unbound as with a successful + // GracefulShutdownRequest then this will complain that the service + // is not bound - this is ok because the GracefulShutdown has already + // sent notices to to the existing active sessions + List sessions; + + try + { + sessions = new ArrayList( + socketAcceptor.getManagedSessions( new InetSocketAddress( getIpPort() ) ) ); + } + catch ( IllegalArgumentException e ) + { + LOG.warn( "Seems like the LDAP service (" + getIpPort() + ") has already been unbound." ); + return; + } + + socketAcceptor.unbind( new InetSocketAddress( getIpPort() ) ); + + if ( LOG.isInfoEnabled() ) + { + LOG.info( "Unbind of an LDAP service (" + getIpPort() + ") is complete." ); + LOG.info( "Sending notice of disconnect to existing clients sessions." ); + } + + // Send Notification of Disconnection messages to all connected clients. + if ( sessions != null ) + { + for ( IoSession session:sessions ) + { + writeFutures.add( session.write( NoticeOfDisconnect.UNAVAILABLE ) ); + } + } + + // And close the connections when the NoDs are sent. + Iterator sessionIt = sessions.iterator(); + + for ( WriteFuture future:writeFutures ) + { + future.join( 1000 ); + sessionIt.next().close(); + } + } + catch ( Exception e ) + { + LOG.warn( "Failed to sent NoD.", e ); + } + } + + + private void startLDAP0( int port, IoFilterChainBuilder chainBuilder ) + throws LdapNamingException, LdapConfigurationException + { + for ( ExtendedOperationHandler h : getExtendedOperationHandlers() ) + { + addExtendedOperationHandler( h ); + LOG.info( "Added Extended Request Handler: " + h.getOid() ); + h.setLdapProvider( this ); + PartitionNexus nexus = directoryService.getPartitionNexus(); + nexus.registerSupportedExtensions( h.getExtensionOids() ); + } + + try + { + SocketAcceptorConfig acceptorCfg = new SocketAcceptorConfig(); + + // Disable the disconnection of the clients on unbind + acceptorCfg.setDisconnectOnUnbind( false ); + acceptorCfg.setReuseAddress( true ); + acceptorCfg.setFilterChainBuilder( chainBuilder ); + acceptorCfg.setThreadModel( ThreadModel.MANUAL ); + + acceptorCfg.getSessionConfig().setTcpNoDelay( true ); + + socketAcceptor.bind( new InetSocketAddress( port ), getHandler(), acceptorCfg ); + started = true; + + if ( LOG.isInfoEnabled() ) + { + LOG.info( "Successful bind of an LDAP Service (" + port + ") is complete." ); + } + } + catch ( IOException e ) + { + String msg = "Failed to bind an LDAP service (" + port + ") to the service registry."; + LdapConfigurationException lce = new LdapConfigurationException( msg ); + lce.setRootCause( e ); + LOG.error( msg, e ); + throw lce; + } + } public String getName() @@ -159,6 +361,11 @@ } + // ------------------------------------------------------------------------ + // Configuration Methods + // ------------------------------------------------------------------------ + + /** * Registeres the specified {@link ExtendedOperationHandler} to this * protocol provider to provide a specific LDAP extended operation. @@ -210,6 +417,293 @@ } + /** + * Returns true if LDAPS is enabled. + * + * @return True if LDAPS is enabled. + */ + public boolean isEnableLdaps() + { + return enableLdaps; + } + + + /** + * Sets if LDAPS is enabled or not. + * + * @param enableLdaps Whether LDAPS is enabled. + */ + public void setEnableLdaps( boolean enableLdaps ) + { + this.enableLdaps = enableLdaps; + } + + + /** + * Returns the path of the X509 (or JKS) certificate file for LDAPS. + * The default value is "<WORKDIR>/certificates/server.cert". + * + * @return The LDAPS certificate file. + */ + public File getLdapsCertificateFile() + { + return ldapsCertificateFile; + } + + + /** + * Sets the path of the SunX509 certificate file (either PKCS12 or JKS format) + * for LDAPS. + * + * @param ldapsCertificateFile The path to the SunX509 certificate. + */ + public void setLdapsCertificateFile( File ldapsCertificateFile ) + { + if ( ldapsCertificateFile == null ) + { + throw new ServiceConfigurationException( "LdapsCertificateFile cannot be null." ); + } + this.ldapsCertificateFile = ldapsCertificateFile; + } + + + /** + * Returns the password which is used to load the the SunX509 certificate file + * (either PKCS12 or JKS format). + * The default value is "changeit". This is the same value with what + * Apache Jakarta Tomcat uses by + * default. + * + * @return The LDAPS certificate password. + */ + public String getLdapsCertificatePassword() + { + return ldapsCertificatePassword; + } + + + /** + * Sets the password which is used to load the LDAPS certificate file. + * + * @param ldapsCertificatePassword The certificate password. + */ + public void setLdapsCertificatePassword( String ldapsCertificatePassword ) + { + if ( ldapsCertificatePassword == null ) + { + throw new ServiceConfigurationException( "LdapsCertificatePassword cannot be null." ); + } + this.ldapsCertificatePassword = ldapsCertificatePassword; + } + + + /** + * Returns true if anonymous access is allowed. + * + * @return True if anonymous access is allowed. + */ + public boolean isAllowAnonymousAccess() + { + return allowAnonymousAccess; + } + + + /** + * Sets whether to allow anonymous access or not. + * + * @param enableAnonymousAccess Set true to allow anonymous access. + */ + public void setAllowAnonymousAccess( boolean enableAnonymousAccess ) + { + this.allowAnonymousAccess = enableAnonymousAccess; + } + + + /** + * Sets the maximum size limit in number of entries to return for search. + * + * @param maxSizeLimit the maximum number of entries to return for search + */ + public void setMaxSizeLimit( int maxSizeLimit ) + { + this.maxSizeLimit = maxSizeLimit; + } + + + /** + * Returns the maximum size limit in number of entries to return for search. + * + * @return The maximum size limit. + */ + public int getMaxSizeLimit() + { + return maxSizeLimit; + } + + + /** + * Sets the maximum time limit in miliseconds to conduct a search. + * + * @param maxTimeLimit the maximum length of time in milliseconds for search + */ + public void setMaxTimeLimit( int maxTimeLimit ) + { + this.maxTimeLimit = maxTimeLimit; + } + + + /** + * Returns the maximum time limit in milliseonds to conduct a search. + * + * @return The maximum time limit in milliseconds for search + */ + public int getMaxTimeLimit() + { + return maxTimeLimit; + } + + + /** + * Gets the {@link ExtendedOperationHandler}s. + * + * @return A collection of {@link ExtendedOperationHandler}s. + */ + public Collection getExtendedOperationHandlers() + { + return new ArrayList( extendedOperationHandlers ); + } + + + /** + * Sets the {@link ExtendedOperationHandler}s. + * + * @org.apache.xbean.Property nestedType="org.apache.directory.server.ldap.ExtendedOperationHandler" + * + * @param handlers A collection of {@link ExtendedOperationHandler}s. + */ + public void setExtendedOperationHandlers( Collection handlers ) + { + this.extendedOperationHandlers.clear(); + this.extendedOperationHandlers.addAll( handlers ); + } + + + /** + * Returns the FQDN of this SASL host, validated during SASL negotiation. + * + * @return The FQDN of this SASL host, validated during SASL negotiation. + */ + public String getSaslHost() + { + return saslHost; + } + + + /** + * Sets the FQDN of this SASL host, validated during SASL negotiation. + * + * @param saslHost The FQDN of this SASL host, validated during SASL negotiation. + */ + public void setSaslHost( String saslHost ) + { + this.saslHost = saslHost; + } + + + /** + * Returns the Kerberos principal name for this LDAP service, used by GSSAPI. + * + * @return The Kerberos principal name for this LDAP service, used by GSSAPI. + */ + public String getSaslPrincipal() + { + return saslPrincipal; + } + + + /** + * Sets the Kerberos principal name for this LDAP service, used by GSSAPI. + * + * @param saslPrincipal The Kerberos principal name for this LDAP service, used by GSSAPI. + */ + public void setSaslPrincipal( String saslPrincipal ) + { + this.saslPrincipal = saslPrincipal; + } + + + /** + * Returns the desired quality-of-protection, used by DIGEST-MD5 and GSSAPI. + * + * @return The desired quality-of-protection, used by DIGEST-MD5 and GSSAPI. + */ + public List getSaslQop() + { + return saslQop; + } + + + /** + * Sets the desired quality-of-protection, used by DIGEST-MD5 and GSSAPI. + * + * @org.apache.xbean.Property nestedType="java.lang.String" + * + * @param saslQop The desired quality-of-protection, used by DIGEST-MD5 and GSSAPI. + */ + public void setSaslQop( List saslQop ) + { + this.saslQop = saslQop; + } + + + /** + * Returns the realms serviced by this SASL host, used by DIGEST-MD5 and GSSAPI. + * + * @return The realms serviced by this SASL host, used by DIGEST-MD5 and GSSAPI. + */ + public List getSaslRealms() + { + return saslRealms; + } + + + /** + * Sets the realms serviced by this SASL host, used by DIGEST-MD5 and GSSAPI. + * + * @org.apache.xbean.Property nestedType="java.lang.String" + * + * @param saslRealms The realms serviced by this SASL host, used by DIGEST-MD5 and GSSAPI. + */ + public void setSaslRealms( List saslRealms ) + { + this.saslRealms = saslRealms; + } + + + /** + * Returns the list of supported authentication mechanisms. + * + * @return The list of supported authentication mechanisms. + */ + public Set getSupportedMechanisms() + { + return supportedMechanisms; + } + + + /** + * Sets the list of supported authentication mechanisms. + * + * @org.apache.xbean.Property propertyEditor="ListEditor" nestedType="java.lang.String" + * + * @param supportedMechanisms The list of supported authentication mechanisms. + */ + public void setSupportedMechanisms( Set supportedMechanisms ) + { + this.supportedMechanisms = supportedMechanisms; + } + + public DirectoryService getDirectoryService() { return directoryService; @@ -224,6 +718,13 @@ { this.bindHandler.setDirectoryService( directoryService ); } + this.codecFactory = new ProtocolCodecFactoryImpl( directoryService ); + Hashtable copy = new Hashtable(); + copy.put( Context.PROVIDER_URL, "" ); + copy.put( Context.INITIAL_CONTEXT_FACTORY, "org.apache.directory.server.core.jndi.CoreContextFactory" ); + copy.put( DirectoryService.JNDI_KEY, directoryService ); + this.registry = new SessionRegistry( this, copy ); + } @@ -409,6 +910,18 @@ } + public boolean isStarted() + { + return started; + } + + + public void setStarted( boolean started ) + { + this.started = started; + } + + /** * A snickers based BER Decoder factory. */ @@ -454,7 +967,7 @@ { public void sessionCreated( IoSession session ) throws Exception { - session.setAttribute( LdapConfiguration.class.toString(), ldapConfiguration ); + session.setAttribute( LdapServer.class.toString(), this ); IoFilterChain filters = session.getFilterChain(); filters.addLast( "codec", new ProtocolCodecFilter( codecFactory ) ); } Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapServer.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapServer.java ------------------------------------------------------------------------------ --- svn:keywords (added) +++ svn:keywords Thu Oct 11 19:39:14 2007 @@ -0,0 +1,4 @@ +Rev +Revision +Date +Id Modified: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/SessionRegistry.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/SessionRegistry.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/SessionRegistry.java (original) +++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/SessionRegistry.java Thu Oct 11 19:39:14 2007 @@ -57,17 +57,19 @@ private Hashtable env; /** the configuration associated with this SessionRegistry */ - private LdapConfiguration cfg; + private LdapServer ldapServer; /** * Creates a singleton session state object for the system. * * @param env the properties associated with this SessionRegistry - * @param cfg the ldap configuration + * @param ldapServer the ldap configuration */ - public SessionRegistry( LdapConfiguration cfg, Hashtable env ) + public SessionRegistry( LdapServer ldapServer, Hashtable env ) { + this.ldapServer = ldapServer; + if ( env == null ) { this.env = new Hashtable(); @@ -79,15 +81,6 @@ this.env = env; this.env.put( Context.PROVIDER_URL, "" ); } - - if ( cfg == null ) - { - this.cfg = new LdapConfiguration(); - } - else - { - this.cfg = cfg; - } } @@ -262,7 +255,7 @@ if ( ctx == null && allowAnonymous ) { // if configuration says disable anonymous binds we throw exception - if ( !cfg.isAllowAnonymousAccess() ) + if ( !ldapServer.isAllowAnonymousAccess() ) { throw new LdapNoPermissionException( "Anonymous binds have been disabled!" ); } @@ -306,7 +299,7 @@ // if the user principal is anonymous and the configuration does not allow anonymous binds we // prevent the operation by blowing a NoPermissionsException - if ( isAnonymousUser && !cfg.isAllowAnonymousAccess() ) + if ( isAnonymousUser && !ldapServer.isAllowAnonymousAccess() ) { throw new LdapNoPermissionException( "Anonymous binds have been disabled!" ); } Modified: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AbstractLdapHandler.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AbstractLdapHandler.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AbstractLdapHandler.java (original) +++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AbstractLdapHandler.java Thu Oct 11 19:39:14 2007 @@ -20,7 +20,7 @@ package org.apache.directory.server.ldap.support; -import org.apache.directory.server.ldap.LdapProtocolProvider; +import org.apache.directory.server.ldap.LdapServer; import org.apache.directory.server.ldap.SessionRegistry; import org.apache.directory.shared.ldap.message.Message; import org.apache.directory.shared.ldap.message.MutableControl; @@ -38,24 +38,24 @@ */ public abstract class AbstractLdapHandler implements MessageHandler { - private LdapProtocolProvider protocolProvider; + private LdapServer ldapServer; - public final LdapProtocolProvider getProtocolProvider() + public final LdapServer getProtocolProvider() { - return protocolProvider; + return ldapServer; } - public final void setProtocolProvider( LdapProtocolProvider provider ) + public final void setProtocolProvider( LdapServer provider ) { - this.protocolProvider = provider; + this.ldapServer = provider; } public final SessionRegistry getSessionRegistry() { - return this.protocolProvider.getRegistry(); + return this.ldapServer.getRegistry(); } Modified: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultBindHandler.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultBindHandler.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultBindHandler.java (original) +++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultBindHandler.java Thu Oct 11 19:39:14 2007 @@ -22,7 +22,7 @@ import org.apache.directory.server.core.DirectoryService; import org.apache.directory.server.core.jndi.ServerLdapContext; -import org.apache.directory.server.ldap.LdapConfiguration; +import org.apache.directory.server.ldap.LdapServer; import org.apache.directory.server.ldap.support.bind.BindHandlerChain; import org.apache.directory.shared.ldap.exception.LdapException; import org.apache.directory.shared.ldap.message.*; @@ -217,10 +217,11 @@ */ private void handleSimpleAuth( IoSession session, BindRequest bindRequest ) throws NamingException { - LdapConfiguration config = ( LdapConfiguration ) session.getAttribute( LdapConfiguration.class.toString() ); + LdapServer ldapServer = ( LdapServer ) + session.getAttribute( LdapServer.class.toString() ); @SuppressWarnings( "unchecked" ) - Set supportedMechanisms = config.getSupportedMechanisms(); + Set supportedMechanisms = ldapServer.getSupportedMechanisms(); LdapResult bindResult = bindRequest.getResultResponse().getLdapResult(); // First, deal with Simple Authentication Modified: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultSearchHandler.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultSearchHandler.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultSearchHandler.java (original) +++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultSearchHandler.java Thu Oct 11 19:39:14 2007 @@ -20,21 +20,9 @@ package org.apache.directory.server.ldap.support; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; - -import javax.naming.Context; -import javax.naming.NamingEnumeration; -import javax.naming.NamingException; -import javax.naming.ReferralException; -import javax.naming.directory.SearchControls; -import javax.naming.ldap.LdapContext; - import org.apache.directory.server.core.jndi.ServerLdapContext; import org.apache.directory.server.core.partition.PartitionNexus; -import org.apache.directory.server.ldap.LdapConfiguration; +import org.apache.directory.server.ldap.LdapServer; import org.apache.directory.shared.ldap.constants.JndiPropertyConstants; import org.apache.directory.shared.ldap.constants.SchemaConstants; import org.apache.directory.shared.ldap.exception.LdapException; @@ -48,6 +36,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.naming.Context; +import javax.naming.NamingEnumeration; +import javax.naming.NamingException; +import javax.naming.ReferralException; +import javax.naming.directory.SearchControls; +import javax.naming.ldap.LdapContext; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; + /** * A handler for processing search requests. @@ -135,7 +134,8 @@ */ public void searchMessageReceived( IoSession session, SearchRequest req ) throws Exception { - LdapConfiguration cfg = ( LdapConfiguration ) session.getAttribute( LdapConfiguration.class.toString() ); + LdapServer ldapServer = ( LdapServer ) + session.getAttribute( LdapServer.class.toString() ); if ( IS_DEBUG ) { @@ -217,7 +217,7 @@ // Handle annonymous binds // =============================================================== - boolean allowAnonymousBinds = cfg.isAllowAnonymousAccess(); + boolean allowAnonymousBinds = ldapServer.isAllowAnonymousAccess(); boolean isAnonymousUser = ctx.getPrincipal().getName().trim().equals( "" ); if ( isAnonymousUser && !allowAnonymousBinds && !isRootDSESearch ) @@ -235,8 +235,8 @@ // Set search limits differently based on user's identity // =============================================================== - int maxSize = cfg.getMaxSizeLimit(); - int maxTime = cfg.getMaxTimeLimit(); + int maxSize = ldapServer.getMaxSizeLimit(); + int maxTime = ldapServer.getMaxTimeLimit(); SearchControls controls; if ( isAnonymousUser ) Modified: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/bind/ConfigureChain.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/bind/ConfigureChain.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/bind/ConfigureChain.java (original) +++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/bind/ConfigureChain.java Thu Oct 11 19:39:14 2007 @@ -20,29 +20,11 @@ package org.apache.directory.server.ldap.support.bind; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.naming.Context; -import javax.naming.NamingException; -import javax.naming.directory.DirContext; -import javax.naming.ldap.InitialLdapContext; -import javax.security.auth.Subject; -import javax.security.auth.kerberos.KerberosKey; -import javax.security.auth.kerberos.KerberosPrincipal; -import javax.security.sasl.Sasl; - import org.apache.directory.server.kerberos.shared.crypto.encryption.EncryptionType; import org.apache.directory.server.kerberos.shared.messages.value.EncryptionKey; import org.apache.directory.server.kerberos.shared.store.PrincipalStoreEntry; import org.apache.directory.server.kerberos.shared.store.operations.GetPrincipal; -import org.apache.directory.server.ldap.LdapConfiguration; +import org.apache.directory.server.ldap.LdapServer; import org.apache.directory.server.ldap.constants.SupportedSASLMechanisms; import org.apache.directory.server.protocol.shared.ServiceConfigurationException; import org.apache.directory.server.protocol.shared.store.ContextOperation; @@ -51,6 +33,16 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.naming.Context; +import javax.naming.NamingException; +import javax.naming.directory.DirContext; +import javax.naming.ldap.InitialLdapContext; +import javax.security.auth.Subject; +import javax.security.auth.kerberos.KerberosKey; +import javax.security.auth.kerberos.KerberosPrincipal; +import javax.security.sasl.Sasl; +import java.util.*; + /** * @author Apache Directory Project @@ -58,36 +50,37 @@ */ public class ConfigureChain implements IoHandlerCommand { - private static final Logger log = LoggerFactory.getLogger( ConfigureChain.class ); + private static final Logger LOG = LoggerFactory.getLogger( ConfigureChain.class ); private DirContext ctx; public void execute( NextCommand next, IoSession session, Object message ) throws Exception { - LdapConfiguration config = ( LdapConfiguration ) session.getAttribute( LdapConfiguration.class.toString() ); + LdapServer ldapServer = ( LdapServer ) + session.getAttribute( LdapServer.class.toString() ); Map saslProps = new HashMap(); - saslProps.put( Sasl.QOP, getActiveQop( config ) ); - saslProps.put( "com.sun.security.sasl.digest.realm", getActiveRealms( config ) ); + saslProps.put( Sasl.QOP, getActiveQop( ldapServer ) ); + saslProps.put( "com.sun.security.sasl.digest.realm", getActiveRealms( ldapServer ) ); session.setAttribute( "saslProps", saslProps ); - session.setAttribute( "saslHost", config.getSaslHost() ); - session.setAttribute( "baseDn", config.getSearchBaseDn() ); + session.setAttribute( "saslHost", ldapServer.getSaslHost() ); + session.setAttribute( "baseDn", ldapServer.getSearchBaseDn() ); - Set activeMechanisms = getActiveMechanisms( config ); + Set activeMechanisms = getActiveMechanisms( ldapServer ); if ( activeMechanisms.contains( "GSSAPI" ) ) { try { - Subject saslSubject = getSubject( config ); + Subject saslSubject = getSubject( ldapServer ); session.setAttribute( "saslSubject", saslSubject ); } catch ( ServiceConfigurationException sce ) { activeMechanisms.remove( "GSSAPI" ); - log.warn( sce.getMessage() ); + LOG.warn( sce.getMessage() ); } } @@ -97,7 +90,7 @@ } - private Set getActiveMechanisms( LdapConfiguration config ) + private Set getActiveMechanisms( LdapServer ldapServer ) { List supportedMechanisms = new ArrayList(); supportedMechanisms.add( SupportedSASLMechanisms.SIMPLE ); @@ -107,10 +100,8 @@ Set activeMechanisms = new HashSet(); - Iterator it = config.getSupportedMechanisms().iterator(); - while ( it.hasNext() ) + for ( String desiredMechanism : ldapServer.getSupportedMechanisms() ) { - String desiredMechanism = ( String ) it.next(); if ( supportedMechanisms.contains( desiredMechanism ) ) { activeMechanisms.add( desiredMechanism ); @@ -121,7 +112,7 @@ } - private String getActiveQop( LdapConfiguration config ) + private String getActiveQop( LdapServer ldapServer ) { List supportedQop = new ArrayList(); supportedQop.add( "auth" ); @@ -130,7 +121,7 @@ StringBuilder saslQop = new StringBuilder(); - Iterator it = config.getSaslQop().iterator(); + Iterator it = ldapServer.getSaslQop().iterator(); while ( it.hasNext() ) { String desiredQopLevel = ( String ) it.next(); @@ -150,11 +141,11 @@ } - private String getActiveRealms( LdapConfiguration config ) + private String getActiveRealms( LdapServer ldapServer ) { StringBuilder realms = new StringBuilder(); - Iterator it = config.getSaslRealms().iterator(); + Iterator it = ldapServer.getSaslRealms().iterator(); while ( it.hasNext() ) { String realm = ( String ) it.next(); @@ -171,9 +162,9 @@ } - private Subject getSubject( LdapConfiguration config ) throws ServiceConfigurationException + private Subject getSubject( LdapServer ldapServer ) throws ServiceConfigurationException { - String servicePrincipalName = config.getSaslPrincipal(); + String servicePrincipalName = ldapServer.getSaslPrincipal(); KerberosPrincipal servicePrincipal = new KerberosPrincipal( servicePrincipalName ); GetPrincipal getPrincipal = new GetPrincipal( servicePrincipal ); @@ -182,19 +173,19 @@ try { - entry = ( PrincipalStoreEntry ) execute( config, getPrincipal ); + entry = ( PrincipalStoreEntry ) execute( ldapServer, getPrincipal ); } catch ( Exception e ) { String message = "Service principal " + servicePrincipalName + " not found at search base DN " - + config.getSearchBaseDn() + "."; + + ldapServer.getSearchBaseDn() + "."; throw new ServiceConfigurationException( message, e ); } if ( entry == null ) { String message = "Service principal " + servicePrincipalName + " not found at search base DN " - + config.getSearchBaseDn() + "."; + + ldapServer.getSearchBaseDn() + "."; throw new ServiceConfigurationException( message ); } @@ -211,9 +202,9 @@ } - private Object execute( LdapConfiguration config, ContextOperation operation ) throws Exception + private Object execute( LdapServer ldapServer, ContextOperation operation ) throws Exception { - Hashtable env = getEnvironment( config ); + Hashtable env = getEnvironment( ldapServer ); if ( ctx == null ) { @@ -223,7 +214,7 @@ } catch ( NamingException ne ) { - String message = "Failed to get initial context " + ( String ) env.get( Context.PROVIDER_URL ); + String message = "Failed to get initial context " + env.get( Context.PROVIDER_URL ); throw new ServiceConfigurationException( message, ne ); } } @@ -232,14 +223,14 @@ } - private Hashtable getEnvironment( LdapConfiguration config ) + private Hashtable getEnvironment( LdapServer ldapServer ) { Hashtable env = new Hashtable(); - env.put( Context.INITIAL_CONTEXT_FACTORY, config.getInitialContextFactory() ); - env.put( Context.PROVIDER_URL, config.getSearchBaseDn() ); - env.put( Context.SECURITY_AUTHENTICATION, config.getSecurityAuthentication() ); - env.put( Context.SECURITY_CREDENTIALS, config.getSecurityCredentials() ); - env.put( Context.SECURITY_PRINCIPAL, config.getSecurityPrincipal() ); + env.put( Context.INITIAL_CONTEXT_FACTORY, ldapServer.getInitialContextFactory() ); + env.put( Context.PROVIDER_URL, ldapServer.getSearchBaseDn() ); + env.put( Context.SECURITY_AUTHENTICATION, ldapServer.getSecurityAuthentication() ); + env.put( Context.SECURITY_CREDENTIALS, ldapServer.getSecurityCredentials() ); + env.put( Context.SECURITY_PRINCIPAL, ldapServer.getSecurityPrincipal() ); return env; } Modified: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/GracefulShutdownHandler.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/GracefulShutdownHandler.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/GracefulShutdownHandler.java (original) +++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/GracefulShutdownHandler.java Thu Oct 11 19:39:14 2007 @@ -24,7 +24,7 @@ import org.apache.directory.server.core.jndi.ServerLdapContext; import org.apache.directory.server.core.partition.PartitionNexus; import org.apache.directory.server.ldap.ExtendedOperationHandler; -import org.apache.directory.server.ldap.LdapProtocolProvider; +import org.apache.directory.server.ldap.LdapServer; import org.apache.directory.server.ldap.SessionRegistry; import org.apache.directory.shared.ldap.message.ExtendedRequest; import org.apache.directory.shared.ldap.message.ResultCodeEnum; @@ -335,7 +335,7 @@ } - public void setLdapProvider( LdapProtocolProvider provider ) + public void setLdapProvider( LdapServer provider ) { } } Modified: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/LaunchDiagnosticUiHandler.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/LaunchDiagnosticUiHandler.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/LaunchDiagnosticUiHandler.java (original) +++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/LaunchDiagnosticUiHandler.java Thu Oct 11 19:39:14 2007 @@ -40,7 +40,7 @@ import org.apache.directory.server.core.partition.impl.btree.BTreePartition; import org.apache.directory.server.core.partition.impl.btree.gui.PartitionFrame; import org.apache.directory.server.ldap.ExtendedOperationHandler; -import org.apache.directory.server.ldap.LdapProtocolProvider; +import org.apache.directory.server.ldap.LdapServer; import org.apache.directory.server.ldap.SessionRegistry; import org.apache.directory.server.ldap.gui.SessionsFrame; import org.apache.directory.shared.ldap.message.ExtendedRequest; @@ -66,7 +66,7 @@ EXTENSION_OIDS = Collections.unmodifiableSet( set ); } - private LdapProtocolProvider ldapProvider; + private LdapServer ldapProvider; public String getOid() @@ -158,7 +158,7 @@ } - public void setLdapProvider( LdapProtocolProvider provider ) + public void setLdapProvider( LdapServer provider ) { this.ldapProvider = provider; } Modified: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/StoredProcedureExtendedOperationHandler.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/StoredProcedureExtendedOperationHandler.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/StoredProcedureExtendedOperationHandler.java (original) +++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/StoredProcedureExtendedOperationHandler.java Thu Oct 11 19:39:14 2007 @@ -42,7 +42,7 @@ import org.apache.directory.server.core.sp.StoredProcExecutionManager; import org.apache.directory.server.core.sp.java.JavaStoredProcEngineConfig; import org.apache.directory.server.ldap.ExtendedOperationHandler; -import org.apache.directory.server.ldap.LdapProtocolProvider; +import org.apache.directory.server.ldap.LdapServer; import org.apache.directory.server.ldap.SessionRegistry; import org.apache.directory.shared.asn1.ber.Asn1Decoder; import org.apache.directory.shared.asn1.ber.IAsn1Container; @@ -169,7 +169,7 @@ } - public void setLdapProvider(LdapProtocolProvider provider) + public void setLdapProvider( LdapServer provider) { } } Copied: directory/apacheds/branches/bigbang/protocol-ldap/src/test/java/org/apache/directory/server/ldap/LdapServerTest.java (from r583968, directory/apacheds/branches/bigbang/protocol-ldap/src/test/java/org/apache/directory/server/ldap/LdapProtocolProviderTest.java) URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/test/java/org/apache/directory/server/ldap/LdapServerTest.java?p2=directory/apacheds/branches/bigbang/protocol-ldap/src/test/java/org/apache/directory/server/ldap/LdapServerTest.java&p1=directory/apacheds/branches/bigbang/protocol-ldap/src/test/java/org/apache/directory/server/ldap/LdapProtocolProviderTest.java&r1=583968&r2=584030&rev=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/protocol-ldap/src/test/java/org/apache/directory/server/ldap/LdapProtocolProviderTest.java (original) +++ directory/apacheds/branches/bigbang/protocol-ldap/src/test/java/org/apache/directory/server/ldap/LdapServerTest.java Thu Oct 11 19:39:14 2007 @@ -27,7 +27,18 @@ import org.apache.directory.shared.ldap.NotImplementedException; import org.apache.directory.shared.ldap.exception.LdapNamingException; import org.apache.directory.shared.ldap.message.*; +import org.apache.mina.common.ByteBuffer; import org.apache.mina.common.IoSession; +import org.apache.mina.common.SimpleByteBufferAllocator; +import org.apache.mina.filter.executor.ExecutorFilter; +import org.apache.mina.transport.socket.nio.SocketAcceptor; +import org.apache.mina.util.AvailablePortFinder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; /** @@ -37,8 +48,83 @@ * @author Apache Directory Project * @version $Rev$ */ -public class LdapProtocolProviderTest extends TestCase +public class LdapServerTest extends TestCase { + private static final Logger LOG = LoggerFactory.getLogger( LdapServerTest.class.getName() ); + LdapServer ldapServer; + DirectoryService directoryService; + ExecutorService ioExecutor; + ExecutorService logicExecutor; + SocketAcceptor tcpAcceptor; + + + public void setUp() throws Exception + { + directoryService = new DefaultDirectoryService(); + directoryService.startup(); + + if ( getName().equals( "testAlternativeConfiguration" ) ) + { + ldapServer.setAbandonHandler( new BogusAbandonHandler() ); + ldapServer.setAddHandler( new BogusAddHandler() ); + ldapServer.setBindHandler( new BogusBindHandler() ); + ldapServer.setCompareHandler( new BogusCompareHandler() ); + ldapServer.setDeleteHandler( new BogusDeleteHandler() ); + ldapServer.setModifyDnHandler( new BogusModifyDnHandler() ); + ldapServer.setModifyHandler( new BogusModifyHandler() ); + ldapServer.setSearchHandler( new BogusSearchHandler() ); + ldapServer.setUnbindHandler( new BogusUnbindHandler() ); + } + + ByteBuffer.setAllocator( new SimpleByteBufferAllocator() ); + ByteBuffer.setUseDirectBuffers( false ); + ioExecutor = Executors.newCachedThreadPool(); + logicExecutor = Executors.newFixedThreadPool( 8 ); + tcpAcceptor = new SocketAcceptor( Runtime.getRuntime().availableProcessors(), ioExecutor ); + tcpAcceptor.getFilterChain().addLast( "executor", new ExecutorFilter( logicExecutor ) ); + + ldapServer = new LdapServer( tcpAcceptor ); + ldapServer.setIpPort( AvailablePortFinder.getNextAvailable( 1024 ) ); + ldapServer.setDirectoryService( directoryService ); + System.err.println( "********** => " + ldapServer.getIpPort() ); + ldapServer.start(); + } + + + public void tearDown() throws Exception + { + ldapServer.stop(); + logicExecutor.shutdown(); + for (;;) { + try { + if ( logicExecutor.awaitTermination( Integer.MAX_VALUE, TimeUnit.SECONDS ) ) + { + break; + } + } + catch ( InterruptedException e ) + { + LOG.error( "Failed to terminate logic executor", e ); + } + } + + ioExecutor.shutdown(); + for (;;) { + try { + if ( ioExecutor.awaitTermination( Integer.MAX_VALUE, TimeUnit.SECONDS ) ) + { + break; + } + } + catch ( InterruptedException e ) + { + LOG.error( "Failed to terminate io executor", e ); + } + } + directoryService.shutdown(); + } + + /** * Tests to make sure all the default handlers are kicking in properly with * the right request type. @@ -48,10 +134,17 @@ */ public void testDefaultOperation() throws LdapNamingException { - DirectoryService directoryService = new DefaultDirectoryService(); - LdapProtocolProvider provider = new LdapProtocolProvider( directoryService, new LdapConfiguration() ); - assertNotNull( provider.getCodecFactory() ); - assertEquals( provider.getName(), LdapProtocolProvider.SERVICE_NAME ); + assertEquals( ldapServer.getAbandonHandler().getClass(), BogusAbandonHandler.class ); + assertEquals( ldapServer.getAddHandler().getClass(), BogusAddHandler.class ); + assertEquals( ldapServer.getBindHandler().getClass(), BogusBindHandler.class ); + assertEquals( ldapServer.getCompareHandler().getClass(), BogusCompareHandler.class ); + assertEquals( ldapServer.getDeleteHandler().getClass(), BogusDeleteHandler.class ); + assertEquals( ldapServer.getModifyDnHandler().getClass(), BogusModifyDnHandler.class ); + assertEquals( ldapServer.getModifyHandler().getClass(), BogusModifyHandler.class ); + assertEquals( ldapServer.getSearchHandler().getClass(), BogusSearchHandler.class ); + assertEquals( ldapServer.getUnbindHandler().getClass(), BogusUnbindHandler.class ); + assertNotNull( ldapServer.getCodecFactory() ); + assertEquals( ldapServer.getName(), LdapServer.SERVICE_NAME ); } @@ -64,20 +157,8 @@ */ public void testAlternativeConfiguration() throws LdapNamingException { - DirectoryService directoryService = new DefaultDirectoryService(); - LdapProtocolProvider provider = new LdapProtocolProvider( directoryService, new LdapConfiguration() ); - provider.setAbandonHandler( new BogusAbandonHandler() ); - provider.setAddHandler( new BogusAddHandler() ); - provider.setBindHandler( new BogusBindHandler() ); - provider.setCompareHandler( new BogusCompareHandler() ); - provider.setDeleteHandler( new BogusDeleteHandler() ); - provider.setModifyDnHandler( new BogusModifyDnHandler() ); - provider.setModifyHandler( new BogusModifyHandler() ); - provider.setSearchHandler( new BogusSearchHandler() ); - provider.setUnbindHandler( new BogusUnbindHandler() ); - - assertNotNull( provider.getCodecFactory() ); - assertEquals( provider.getName(), LdapProtocolProvider.SERVICE_NAME ); + assertNotNull( ldapServer.getCodecFactory() ); + assertEquals( ldapServer.getName(), LdapServer.SERVICE_NAME ); } public static class BogusAbandonHandler extends AbandonHandler Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/test/java/org/apache/directory/server/ldap/LdapServerTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/test/java/org/apache/directory/server/ldap/LdapServerTest.java ------------------------------------------------------------------------------ --- svn:keywords (added) +++ svn:keywords Thu Oct 11 19:39:14 2007 @@ -0,0 +1,4 @@ +Rev +Revision +Date +Id Modified: directory/apacheds/branches/bigbang/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java (original) +++ directory/apacheds/branches/bigbang/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java Thu Oct 11 19:39:14 2007 @@ -23,10 +23,8 @@ import java.io.File; import java.io.FileFilter; import java.io.IOException; -import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.Hashtable; -import java.util.Iterator; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -42,33 +40,18 @@ import org.apache.directory.server.constants.ApacheSchemaConstants; import org.apache.directory.server.core.DefaultDirectoryService; import org.apache.directory.server.core.DirectoryService; -import org.apache.directory.server.core.partition.PartitionNexus; import org.apache.directory.server.jndi.ServerContextFactory; -import org.apache.directory.server.ldap.ExtendedOperationHandler; -import org.apache.directory.server.ldap.LdapConfiguration; -import org.apache.directory.server.ldap.LdapProtocolProvider; -import org.apache.directory.server.ldap.support.ssl.LdapsInitializer; +import org.apache.directory.server.ldap.LdapServer; import org.apache.directory.server.protocol.shared.store.LdifFileLoader; import org.apache.directory.server.protocol.shared.store.LdifLoadFilter; -import org.apache.directory.shared.ldap.constants.JndiPropertyConstants; import org.apache.directory.shared.ldap.constants.SchemaConstants; -import org.apache.directory.shared.ldap.exception.LdapConfigurationException; -import org.apache.directory.shared.ldap.exception.LdapNamingException; import org.apache.directory.shared.ldap.message.AttributesImpl; -import org.apache.directory.shared.ldap.message.extended.NoticeOfDisconnect; import org.apache.directory.shared.ldap.util.StringTools; import org.apache.mina.common.ByteBuffer; -import org.apache.mina.common.DefaultIoFilterChainBuilder; import org.apache.mina.common.IoAcceptor; -import org.apache.mina.common.IoFilterChainBuilder; -import org.apache.mina.common.IoSession; import org.apache.mina.common.SimpleByteBufferAllocator; -import org.apache.mina.common.ThreadModel; -import org.apache.mina.common.WriteFuture; import org.apache.mina.filter.executor.ExecutorFilter; -import org.apache.mina.transport.socket.nio.DatagramAcceptor; import org.apache.mina.transport.socket.nio.SocketAcceptor; -import org.apache.mina.transport.socket.nio.SocketAcceptorConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -99,37 +82,29 @@ private File ldifDirectory; private final List ldifFilters = new ArrayList(); - private LdapConfiguration ldapConfiguration = new LdapConfiguration(); - private LdapConfiguration ldapsConfiguration = new LdapConfiguration(); + private LdapServer ldapServer; + private LdapServer ldapsServer; private DirectoryService directoryService = new DefaultDirectoryService(); - private IoAcceptor tcpAcceptor; - protected IoAcceptor udpAcceptor; + private SocketAcceptor tcpAcceptor; protected ExecutorService ioExecutor; protected ExecutorService logicExecutor; - private boolean ldapsStarted; - private boolean ldapStarted; + public ApacheDS() { - environment.put( JNDI_KEY, this ); - environment.put( Context.INITIAL_CONTEXT_FACTORY, ServerContextFactory.class.toString() ); - environment.put( Context.SECURITY_AUTHENTICATION, "simple" ); - ldapConfiguration.setEnabled( true ); + ldapServer.setEnabled( true ); ByteBuffer.setAllocator( new SimpleByteBufferAllocator() ); ByteBuffer.setUseDirectBuffers( false ); - ioExecutor = Executors.newCachedThreadPool(); logicExecutor = Executors.newFixedThreadPool( maxThreads ); - udpAcceptor = new DatagramAcceptor(); - udpAcceptor.getFilterChain().addLast( "executor", new ExecutorFilter( logicExecutor ) ); tcpAcceptor = new SocketAcceptor( Runtime.getRuntime().availableProcessors(), ioExecutor ); tcpAcceptor.getFilterChain().addLast( "executor", new ExecutorFilter( logicExecutor ) ); } - public void startup() throws NamingException + public void startup() throws NamingException, IOException { loadLdifs(); @@ -137,35 +112,45 @@ { directoryService.startup(); } - environment.put( JndiPropertyConstants.JNDI_LDAP_ATTRIBUTES_BINARY, - directoryService.getEnvironment().get( JndiPropertyConstants.JNDI_LDAP_ATTRIBUTES_BINARY ) ); - - if ( enableNetworking ) + + if ( ldapServer == null ) + { + ldapServer = new LdapServer( tcpAcceptor ); + } + + if ( ldapsServer == null ) { - startLDAP(); - startLDAPS(); + ldapsServer = new LdapServer( tcpAcceptor ); + } + + if ( ! ldapServer.isStarted() ) + { + ldapServer.start(); + } + + if ( ldapsServer != null && ! ldapsServer.isStarted() ) + { + ldapsServer.start(); } } public boolean isStarted() { - return ldapStarted || ldapsStarted; + return ldapServer.isStarted() || ldapsServer.isStarted(); } public void shutdown() throws NamingException { - if ( ldapStarted ) + if ( ldapServer.isStarted() ) { - stopLDAP0( ldapConfiguration.getIpPort() ); - ldapStarted = false; + ldapServer.stop(); } - if ( ldapsStarted ) + if ( ldapsServer.isStarted() ) { - stopLDAP0( ldapsConfiguration.getIpPort() ); - ldapsStarted = false; + ldapsServer.stop(); } logicExecutor.shutdown(); @@ -200,27 +185,27 @@ } - public LdapConfiguration getLdapConfiguration() + public LdapServer getLdapServer() { - return ldapConfiguration; + return ldapServer; } - public void setLdapConfiguration( LdapConfiguration ldapConfiguration ) + public void setLdapServer( LdapServer ldapServer ) { - this.ldapConfiguration = ldapConfiguration; + this.ldapServer = ldapServer; } - public LdapConfiguration getLdapsConfiguration() + public LdapServer getLdapsServer() { - return ldapsConfiguration; + return ldapsServer; } - public void setLdapsConfiguration( LdapConfiguration ldapsConfiguration ) + public void setLdapsServer( LdapServer ldapsServer ) { - this.ldapsConfiguration = ldapsConfiguration; + this.ldapsServer = ldapsServer; } public DirectoryService getDirectoryService() @@ -295,8 +280,8 @@ public void setAllowAnonymousAccess( boolean allowAnonymousAccess ) { this.directoryService.setAllowAnonymousAccess( allowAnonymousAccess ); - this.ldapConfiguration.setAllowAnonymousAccess( allowAnonymousAccess ); - this.ldapsConfiguration.setAllowAnonymousAccess( allowAnonymousAccess ); + this.ldapServer.setAllowAnonymousAccess( allowAnonymousAccess ); + this.ldapsServer.setAllowAnonymousAccess( allowAnonymousAccess ); } @@ -323,11 +308,6 @@ return tcpAcceptor; } - public IoAcceptor getUdpAcceptor() - { - return udpAcceptor; - } - // ---------------------------------------------------------------------- // From ServerContextFactory: presently in intermediate step but these // methods will be moved to the appropriate protocol service eventually. @@ -506,149 +486,6 @@ int count = loader.execute(); LOG.info( "Loaded " + count + " entries from LDIF file '" + getCanonical( ldifFile ) + "'" ); addFileEntry( root, ldifFile ); - } - } - - - /** - * Starts up the LDAP protocol provider to service LDAP requests - * - * @throws NamingException if there are problems starting the LDAP provider - */ - private void startLDAP() throws NamingException - { - // Skip if disabled - if ( ! ldapConfiguration.isEnabled() ) - { - return; - } - - DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder(); - startLDAP0( ldapConfiguration, ldapConfiguration.getIpPort(), chain ); - } - - - /** - * Starts up the LDAPS protocol provider to service LDAPS requests - * - * @throws NamingException if there are problems starting the LDAPS provider - */ - private void startLDAPS() throws NamingException - { - // Skip if disabled - if ( !( ldapsConfiguration.isEnabled() && ldapsConfiguration.isEnableLdaps() ) ) - { - return; - } - - char[] certPasswordChars = ldapsConfiguration.getLdapsCertificatePassword().toCharArray(); - String storePath = ldapsConfiguration.getLdapsCertificateFile().getPath(); - - IoFilterChainBuilder chain = LdapsInitializer.init( certPasswordChars, storePath ); - ldapsStarted = true; - - startLDAP0( ldapsConfiguration, ldapsConfiguration.getIpPort(), chain ); - } - - - private void startLDAP0( LdapConfiguration ldapConfig, int port, IoFilterChainBuilder chainBuilder ) - throws LdapNamingException, LdapConfigurationException - { - // Register all extended operation handlers. - LdapProtocolProvider protocolProvider = new LdapProtocolProvider( directoryService, ldapConfig ); - - for ( ExtendedOperationHandler h : ldapConfig.getExtendedOperationHandlers() ) - { - protocolProvider.addExtendedOperationHandler( h ); - LOG.info( "Added Extended Request Handler: " + h.getOid() ); - h.setLdapProvider( protocolProvider ); - PartitionNexus nexus = directoryService.getPartitionNexus(); - nexus.registerSupportedExtensions( h.getExtensionOids() ); - } - - try - { - SocketAcceptorConfig acceptorCfg = new SocketAcceptorConfig(); - - // Disable the disconnection of the clients on unbind - acceptorCfg.setDisconnectOnUnbind( false ); - acceptorCfg.setReuseAddress( true ); - acceptorCfg.setFilterChainBuilder( chainBuilder ); - acceptorCfg.setThreadModel( ThreadModel.MANUAL ); - - acceptorCfg.getSessionConfig().setTcpNoDelay( true ); - - tcpAcceptor.bind( new InetSocketAddress( port ), protocolProvider.getHandler(), acceptorCfg ); - ldapStarted = true; - - if ( LOG.isInfoEnabled() ) - { - LOG.info( "Successful bind of an LDAP Service (" + port + ") is complete." ); - } - } - catch ( IOException e ) - { - String msg = "Failed to bind an LDAP service (" + port + ") to the service registry."; - LdapConfigurationException lce = new LdapConfigurationException( msg ); - lce.setRootCause( e ); - LOG.error( msg, e ); - throw lce; - } - } - - private void stopLDAP0( int port ) - { - try - { - // we should unbind the service before we begin sending the notice - // of disconnect so new connections are not formed while we process - List writeFutures = new ArrayList(); - - // If the socket has already been unbound as with a successful - // GracefulShutdownRequest then this will complain that the service - // is not bound - this is ok because the GracefulShutdown has already - // sent notices to to the existing active sessions - List sessions; - - try - { - sessions = new ArrayList( tcpAcceptor.getManagedSessions( new InetSocketAddress( port ) ) ); - } - catch ( IllegalArgumentException e ) - { - LOG.warn( "Seems like the LDAP service (" + port + ") has already been unbound." ); - return; - } - - tcpAcceptor.unbind( new InetSocketAddress( port ) ); - - if ( LOG.isInfoEnabled() ) - { - LOG.info( "Unbind of an LDAP service (" + port + ") is complete." ); - LOG.info( "Sending notice of disconnect to existing clients sessions." ); - } - - // Send Notification of Disconnection messages to all connected clients. - if ( sessions != null ) - { - for ( IoSession session:sessions ) - { - writeFutures.add( session.write( NoticeOfDisconnect.UNAVAILABLE ) ); - } - } - - // And close the connections when the NoDs are sent. - Iterator sessionIt = sessions.iterator(); - - for ( WriteFuture future:writeFutures ) - { - future.join( 1000 ); - sessionIt.next().close(); - } - } - catch ( Exception e ) - { - LOG.warn( "Failed to sent NoD.", e ); } } Modified: directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/diagnosticcmd/DiagnosticCommandExecutor.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/diagnosticcmd/DiagnosticCommandExecutor.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/diagnosticcmd/DiagnosticCommandExecutor.java (original) +++ directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/diagnosticcmd/DiagnosticCommandExecutor.java Thu Oct 11 19:39:14 2007 @@ -197,7 +197,7 @@ } else if ( getApacheDS() != null ) { - port = getApacheDS().getLdapConfiguration().getIpPort(); + port = getApacheDS().getLdapServer().getIpPort(); if ( isDebugEnabled() ) { Modified: directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/disconnectnotificationcmd/DisconnectNotificationCommandExecutor.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/disconnectnotificationcmd/DisconnectNotificationCommandExecutor.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/disconnectnotificationcmd/DisconnectNotificationCommandExecutor.java (original) +++ directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/disconnectnotificationcmd/DisconnectNotificationCommandExecutor.java Thu Oct 11 19:39:14 2007 @@ -210,7 +210,7 @@ } else if ( getApacheDS() != null ) { - port = getApacheDS().getLdapConfiguration().getIpPort(); + port = getApacheDS().getLdapServer().getIpPort(); if ( isDebugEnabled() ) { Modified: directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/exportcmd/ExportCommandExecutor.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/exportcmd/ExportCommandExecutor.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/exportcmd/ExportCommandExecutor.java (original) +++ directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/exportcmd/ExportCommandExecutor.java Thu Oct 11 19:39:14 2007 @@ -420,7 +420,7 @@ } else if ( getApacheDS() != null ) { - port = getApacheDS().getLdapConfiguration().getIpPort(); + port = getApacheDS().getLdapServer().getIpPort(); if ( isDebugEnabled() ) { Modified: directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/gracefulshutdowncmd/GracefulShutdownCommandExecutor.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/gracefulshutdowncmd/GracefulShutdownCommandExecutor.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/gracefulshutdowncmd/GracefulShutdownCommandExecutor.java (original) +++ directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/gracefulshutdowncmd/GracefulShutdownCommandExecutor.java Thu Oct 11 19:39:14 2007 @@ -254,7 +254,7 @@ } else if ( getApacheDS() != null ) { - port = getApacheDS().getLdapConfiguration().getIpPort(); + port = getApacheDS().getLdapServer().getIpPort(); if ( isDebugEnabled() ) { Modified: directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/importcmd/ImportCommandExecutor.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/importcmd/ImportCommandExecutor.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/importcmd/ImportCommandExecutor.java (original) +++ directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/importcmd/ImportCommandExecutor.java Thu Oct 11 19:39:14 2007 @@ -706,7 +706,7 @@ } else if ( getApacheDS() != null ) { - port = getApacheDS().getLdapConfiguration().getIpPort(); + port = getApacheDS().getLdapServer().getIpPort(); if ( isDebugEnabled() ) { Modified: directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/storedprocedurecmd/StoredProcedureCommandExecutor.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/storedprocedurecmd/StoredProcedureCommandExecutor.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/storedprocedurecmd/StoredProcedureCommandExecutor.java (original) +++ directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/commands/storedprocedurecmd/StoredProcedureCommandExecutor.java Thu Oct 11 19:39:14 2007 @@ -206,7 +206,7 @@ } else if ( getApacheDS() != null ) { - port = getApacheDS().getLdapConfiguration().getIpPort(); + port = getApacheDS().getLdapServer().getIpPort(); if ( isDebugEnabled() ) { Modified: directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerFastTest.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerFastTest.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerFastTest.java (original) +++ directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerFastTest.java Thu Oct 11 19:39:14 2007 @@ -202,7 +202,7 @@ { doDelete( apacheDS.getDirectoryService().getWorkingDirectory() ); port = AvailablePortFinder.getNextAvailable( 1024 ); - apacheDS.getLdapConfiguration().setIpPort( port ); + apacheDS.getLdapServer().setIpPort( port ); apacheDS.getDirectoryService().setShutdownHookEnabled( false ); apacheDS.startup(); Modified: directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerTest.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerTest.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerTest.java (original) +++ directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerTest.java Thu Oct 11 19:39:14 2007 @@ -218,7 +218,7 @@ doDelete( apacheDS.getDirectoryService().getWorkingDirectory() ); port = AvailablePortFinder.getNextAvailable( 1024 ); - apacheDS.getLdapConfiguration().setIpPort( port ); + apacheDS.getLdapServer().setIpPort( port ); apacheDS.getDirectoryService().setShutdownHookEnabled( false ); apacheDS.startup(); Modified: directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/KeyDerivationServiceITest.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/KeyDerivationServiceITest.java?rev=584030&r1=584029&r2=584030&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/KeyDerivationServiceITest.java (original) +++ directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/KeyDerivationServiceITest.java Thu Oct 11 19:39:14 2007 @@ -107,7 +107,7 @@ doDelete( apacheDS.getDirectoryService().getWorkingDirectory() ); port = AvailablePortFinder.getNextAvailable( 1024 ); - apacheDS.getLdapConfiguration().setIpPort( port ); + apacheDS.getLdapServer().setIpPort( port ); apacheDS.getDirectoryService().setShutdownHookEnabled( false ); super.setUp();