You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2019/04/17 15:44:24 UTC

[directory-server] 07/08: merge with Stefan's changes

This is an automated email from the ASF dual-hosted git repository.

elecharny pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/directory-server.git

commit 5abfc740bbca48ba512395af49f9152bd620df06
Merge: c6f064d 0f043fb
Author: emmanuel lecharny <el...@apache.org>
AuthorDate: Wed Apr 17 17:10:54 2019 +0200

    merge with Stefan's changes

 .../server/core/factory/DSAnnotationProcessor.java |   3 -
 .../factory/DefaultDirectoryServiceFactory.java    |   6 -
 core-api/pom.xml                                   |  18 +-
 .../directory/server/core/api/CacheService.java    | 219 -----------------
 .../server/core/api/DirectoryService.java          |  14 --
 .../core/api/partition/AbstractPartition.java      |  14 --
 .../server/core/api/partition/Partition.java       |   8 -
 .../server/core/api/schema/SchemaPartition.java    |   9 -
 .../src/main/resources/directory-cacheservice.xml  | 268 ---------------------
 .../server/core/api/MockDirectoryService.java      |  15 --
 core-shared/pom.xml                                |   7 +-
 .../server/core/shared/DefaultDnFactory.java       |  14 +-
 .../shared/partition/DefaultPartitionNexus.java    |   1 -
 .../server/core/DefaultDirectoryService.java       |  38 +--
 interceptors/authz/pom.xml                         |   5 -
 .../directory/server/core/authz/GroupCache.java    |  55 ++---
 interceptors/subtree/pom.xml                       |   7 +-
 .../server/core/subtree/SubtreeEvaluatorTest.java  |  13 +-
 jdbm-partition/pom.xml                             |   2 +-
 .../partition/impl/btree/jdbm/JdbmPartition.java   |  26 +-
 .../partition/impl/btree/jdbm/JdbmStoreTest.java   |   9 +-
 .../core/partition/tree/PartitionTreeTest.java     |   6 +-
 kerberos-codec/pom.xml                             |   6 +-
 .../kerberos/shared/replay/ReplayCacheImpl.java    |  38 +--
 .../shared/replay/ReplayCacheImplTest.java         | 100 ++++----
 .../core/partition/ldif/LdifPartitionTest.java     |   8 +-
 ...SingleFileLdifPartitionSingeValueAttribute.java |   9 +-
 .../ldif/SingleFileLdifPartitionTest.java          |   9 +-
 mavibot-partition/pom.xml                          |   2 +-
 .../impl/btree/mavibot/MavibotPartition.java       |  19 +-
 .../impl/btree/mavibot/MavibotStoreTest.java       |   9 +-
 .../osgi/integ/ServerCoreAnnotationsOsgiTest.java  |   1 +
 .../server/osgi/integ/ServerCoreApiOsgiTest.java   |   2 -
 .../osgi/integ/ServerCoreSharedOsgiTest.java       |   9 +-
 .../osgi/integ/ServerJdbmPartitionOsgiTest.java    |   2 +-
 .../osgi/integ/ServerMavibotPartitionOsgiTest.java |   2 +-
 pom.xml                                            |  18 ++
 .../server/changepw/ChangePasswordServer.java      |   2 -
 protocol-kerberos/pom.xml                          |   6 +-
 .../kerberos/changepwd/ChangePasswordServer.java   |   5 +-
 .../directory/server/kerberos/kdc/KdcServer.java   |   5 +-
 .../server/config/ConfigPartitionInitializer.java  |   7 +-
 .../config/ChangePasswordConfigReaderTest.java     |   8 +-
 .../server/config/ConfigPartitionReaderTest.java   |   8 +-
 .../directory/server/config/ConfigWriterTest.java  |   8 +-
 .../server/config/HttpServerConfigReaderTest.java  |   8 +-
 .../config/KerberosServerConfigReaderTest.java     |   8 +-
 .../server/config/LdapServerConfigReaderTest.java  |   8 +-
 .../server/replication/ClientInitialRefreshIT.java |   2 +-
 .../apache/directory/server/ApacheDsService.java   |  36 +--
 xdbm-partition/pom.xml                             |   3 +-
 .../impl/btree/AbstractBTreePartition.java         |  49 ++--
 .../org/apache/directory/server/xdbm/Store.java    |   4 +-
 .../search/evaluator/SubtreeScopeEvaluator.java    |   2 +-
 .../xdbm/search/impl/DefaultSearchEngine.java      |   2 +-
 .../directory/server/xdbm/PartitionTest.java       |   6 -
 .../server/xdbm/impl/avl/AvlPartitionTest.java     |   8 +-
 .../server/xdbm/search/impl/AndCursorTest.java     |   6 -
 .../server/xdbm/search/impl/EqualityTest.java      |   8 +-
 .../xdbm/search/impl/GreaterEqNotIndexedTest.java  |   8 +-
 .../server/xdbm/search/impl/GreaterEqTest.java     |   9 +-
 .../server/xdbm/search/impl/LessEqTest.java        |   9 +-
 .../server/xdbm/search/impl/NestedFilterTest.java  |   5 -
 .../server/xdbm/search/impl/NotCursorTest.java     |   5 -
 .../server/xdbm/search/impl/OrCursorTest.java      |   5 -
 .../server/xdbm/search/impl/PresenceTest.java      |  12 +-
 .../server/xdbm/search/impl/SubstringTest.java     |   9 +-
 67 files changed, 223 insertions(+), 1029 deletions(-)

diff --cc pom.xml
index 48c5405,8d26e5d..8232698
--- a/pom.xml
+++ b/pom.xml
@@@ -24,7 -24,7 +24,8 @@@
    <parent>
      <groupId>org.apache.directory.project</groupId>
      <artifactId>project</artifactId>
 +    <version>42</version>
+     <version>44</version>
      <relativePath />
    </parent>
  
@@@ -57,15 -57,14 +58,19 @@@
      <ant.version>1.10.1</ant.version>
      <bcprov.version>1.60</bcprov.version>
      <commons.cli.version>1.4</commons.cli.version>
 +    <commons.codec.version>1.11</commons.codec.version>
 +    <commons.collections.version>4.2</commons.collections.version>
+     <commons.codec.version>1.12</commons.codec.version>
+     <commons.collections.version>4.3</commons.collections.version>
      <commons.daemon.version>1.0.15</commons.daemon.version>
      <commons.lang.version>3.8.1</commons.lang.version>
      <commons.net.version>3.6</commons.net.version>
 +    <commons.pool.version>2.6.0</commons.pool.version>
+     <commons.pool.version>2.6.1</commons.pool.version>
      <dnsjava.version>2.1.8</dnsjava.version>
 +    <!-- OSGi related issue in ehcache 3.6.x: https://github.com/ehcache/ehcache3/issues/2554 -->
 +    <ehcache.version>3.5.3</ehcache.version>
+     <caffeine.version>2.7.0</caffeine.version>
      <findbugs.annotations.version>1.0.0</findbugs.annotations.version>
      <jetty.version>9.4.14.v20181114</jetty.version>
      <!-- The Jetty bundle exports are using version 9.4.5, not 9.4.5.v20170502... -->
@@@ -1243,9 -1227,19 +1248,22 @@@
        </dependency>
        
        <dependency>
 +        <groupId>org.ehcache</groupId>
 +        <artifactId>ehcache</artifactId>
 +        <version>${ehcache.version}</version>
+         <groupId>com.github.ben-manes.caffeine</groupId>
+         <artifactId>caffeine</artifactId>
+         <version>${caffeine.version}</version>
+         <exclusions>
+           <exclusion>
+             <groupId>com.google.errorprone</groupId>
+             <artifactId>error_prone_annotations</artifactId>
+           </exclusion>
+           <exclusion>
+             <groupId>org.checkerframework</groupId>
+             <artifactId>checker-qual</artifactId>
+            </exclusion>
+          </exclusions>
        </dependency>
      </dependencies>
    </dependencyManagement>
diff --cc service/src/main/java/org/apache/directory/server/ApacheDsService.java
index 1f85d22,000fad3..06813ae
--- a/service/src/main/java/org/apache/directory/server/ApacheDsService.java
+++ b/service/src/main/java/org/apache/directory/server/ApacheDsService.java
@@@ -81,8 -74,8 +81,9 @@@ import org.apache.directory.server.core
  import org.apache.directory.server.core.api.interceptor.context.ModifyOperationContext;
  import org.apache.directory.server.core.api.partition.Partition;
  import org.apache.directory.server.core.api.schema.SchemaPartition;
+ import org.apache.directory.server.core.partition.impl.btree.AbstractBTreePartition;
  import org.apache.directory.server.core.partition.ldif.LdifPartition;
 +import org.apache.directory.server.core.security.CertificateUtil;
  import org.apache.directory.server.core.shared.DefaultDnFactory;
  import org.apache.directory.server.i18n.I18n;
  import org.apache.directory.server.integration.http.HttpServer;
@@@ -201,59 -187,23 +198,70 @@@ public class ApacheDsServic
  
          DirectoryServiceBean directoryServiceBean = configBean.getDirectoryServiceBean();
  
+         /*
+          * Calculate the DN cache size: from all defined partitions get the max cache size setting.
+          * Note: currently only JDBM partition beans have such a setting.
+          */
+         int dnCacheSize = directoryServiceBean.getPartitions().stream()
+             .filter( JdbmPartitionBean.class::isInstance )
+             .map( JdbmPartitionBean.class::cast )
+             .map( JdbmPartitionBean::getPartitionCacheSize )
+             .mapToInt( Integer::intValue )
+             .max().orElse( AbstractBTreePartition.DEFAULT_CACHE_SIZE );
+         DnFactory dnFactory = new DefaultDnFactory( schemaManager, dnCacheSize );
+ 
          // Initialize the DirectoryService now
-         DirectoryService directoryService = initDirectoryService( instanceLayout, directoryServiceBean, cacheService,
-             dnFactory );
+         DirectoryService directoryService = initDirectoryService( instanceLayout, directoryServiceBean, dnFactory );
  
          // start the LDAP server
 -        startLdap( directoryServiceBean.getLdapServerBean(), directoryService, startServers );
 +        LdapServerBean ldapServerBean = directoryServiceBean.getLdapServerBean();
 +        
 +        if ( ldapServerBean.getLdapServerKeystoreFile() == null )
 +        {
 +            File ldapServerKeystoreFile = instanceLayout.getKeyStoreFile();
 +            
 +            if ( !ldapServerKeystoreFile.exists() )
 +            {
 +                // We need to create a KeyStore
 +                ldapServerKeystoreFile.createNewFile();
 +                ldapServerKeystoreFile.deleteOnExit();
 +                ldapServerBean.setLdapServerCertificatePassword( "secret" );
 +
 +                
 +                KeyStore keyStore = KeyStore.getInstance( KeyStore.getDefaultType() );
 +                char[] keyStorePassword = "secret".toCharArray();
 +                
 +                try ( InputStream keyStoreData = new FileInputStream( ldapServerKeystoreFile ) )
 +                {
 +                    keyStore.load( null, keyStorePassword );
 +                }
 +
 +                // Generate the asymmetric keys, using EC algorithm
 +                KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance( "EC" );
 +                KeyPair keyPair = keyPairGenerator.generateKeyPair();
 +                
 +                // Generate the subject's name
 +                @SuppressWarnings("restriction")
 +                X500Name owner = new X500Name( "apacheds", "directory", "apache", "US" );
 +
 +                // Create the self-signed certificate
 +                X509Certificate certificate = CertificateUtil.generateSelfSignedCertificate( owner, keyPair, 365, "SHA256WithECDSA" );
 +                
 +                keyStore.setKeyEntry( "apachedsKey", keyPair.getPrivate(), keyStorePassword, new X509Certificate[] { certificate } );
 +                
 +                FileOutputStream out = new FileOutputStream( ldapServerKeystoreFile );
 +                keyStore.store( out, keyStorePassword );
 +            }
 +            
 +            ldapServerBean.setLdapServerKeystoreFile( ldapServerKeystoreFile.getAbsolutePath() );
 +        }
 +        
 +        if ( ldapServerBean.getLdapServerCertificatePassword() == null )
 +        {
 +            ldapServerBean.setLdapServerCertificatePassword( "secret" );
 +        }
 +        
 +        startLdap( ldapServerBean, directoryService, startServers );
  
          // start the NTP server
          startNtp( directoryServiceBean.getNtpServerBean(), directoryService, startServers );
@@@ -391,9 -341,9 +399,9 @@@
  
  
      private DirectoryService initDirectoryService( InstanceLayout instanceLayout,
-         DirectoryServiceBean directoryServiceBean, CacheService cacheService, DnFactory dnFactory ) throws Exception
+         DirectoryServiceBean directoryServiceBean, DnFactory dnFactory ) throws Exception
      {
 -        LOG.info( "Initializing the DirectoryService..." );
 +         LOG.info( "Initializing the DirectoryService..." );
  
          long startTime = System.currentTimeMillis();