svn commit: r1827257 - in /jackrabbit/oak/trunk/oak-lucene/src: main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java test/java/org/apache/jackrabbit/oak/plugins/ind
Author: catholicon Date: Tue Mar 20 02:42:15 2018 New Revision: 1827257 URL: http://svn.apache.org/viewvc?rev=1827257=rev Log: OAK-7357: NPE on activation of LuceneIndexProviderService with disabled CoR and CoR Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderServiceTest.java Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java?rev=1827257=1827256=1827257=diff == --- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java (original) +++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java Tue Mar 20 02:42:15 2018 @@ -755,10 +755,11 @@ public class LuceneIndexProviderService PROP_DELETED_BLOB_COLLECTION_DEFAULT_ENABLED); if (activeDeletionEnabled && blobStore!= null) { File blobCollectorWorkingDir = new File(indexDir, "deleted-blobs"); -activeDeletedBlobCollector = ActiveDeletedBlobCollectorFactory.newInstance(blobCollectorWorkingDir, executorService); +activeDeletedBlobCollector = ActiveDeletedBlobCollectorFactory.newInstance(blobCollectorWorkingDir, +getExecutorService()); ActiveDeletedBlobCollectorMBean bean = new ActiveDeletedBlobCollectorMBeanImpl(activeDeletedBlobCollector, whiteboard, nodeStore, -indexPathService, asyncIndexInfoService, blobStore, executorService); +indexPathService, asyncIndexInfoService, blobStore, getExecutorService()); oakRegs.add(registerMBean(whiteboard, ActiveDeletedBlobCollectorMBean.class, bean, ActiveDeletedBlobCollectorMBean.TYPE, "Active lucene files collection")); Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderServiceTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderServiceTest.java?rev=1827257=1827256=1827257=diff == --- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderServiceTest.java (original) +++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderServiceTest.java Tue Mar 20 02:42:15 2018 @@ -182,6 +182,31 @@ public class LuceneIndexProviderServiceT MockOsgi.deactivate(service, context.bundleContext()); } +// OAK-7357 +@Test +public void disableCoRCoW() throws Exception { +// inject ds as OAK-7357 revealed ABD bean had a bug - which comes into play only with blob stores +CachingFileDataStore ds = DataStoreUtils +.createCachingFDS(folder.newFolder().getAbsolutePath(), +folder.newFolder().getAbsolutePath()); + +context.registerService(GarbageCollectableBlobStore.class, new DataStoreBlobStore(ds)); + +// re-init service and inject references +service = new LuceneIndexProviderService(); +MockOsgi.injectServices(service, context.bundleContext()); + +Mapconfig = getDefaultConfig(); +config.put("enableCopyOnReadSupport", false); +config.put("enableCopyOnWriteSupport", false); + +// activation should work +MockOsgi.activate(service, context.bundleContext(), config); + +// de-activation should work +MockOsgi.deactivate(service, context.bundleContext()); +} + @Test public void enablePrefetchIndexFiles() throws Exception{ Map config = getDefaultConfig();
svn commit: r1827239 [2/2] - in /jackrabbit/oak/trunk: oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ oak-auth-external/src/test/java/or
Added: jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipals.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipals.java?rev=1827239=auto == --- jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipals.java (added) +++ jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipals.java Mon Mar 19 20:08:56 2018 @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.oak.spi.security.principal; + +import java.security.Principal; +import java.security.acl.Group; +import java.util.Collections; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.Set; + +import javax.annotation.Nonnull; + +import org.apache.jackrabbit.api.security.principal.GroupPrincipal; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; + +/** + * Helper class to deal with the migration between the 2 types of groups + * + */ +public final class GroupPrincipals { + +private static final GroupTransformer TRANSFORMER = new GroupTransformer(); + +private GroupPrincipals() { +} + +/** + * Checks if the provided principal is a group. + * + * @param principal + *to be checked. + * + * @return true if the principal is of type group. + */ +public static boolean isGroup(@Nonnull Principal principal) { +return principal instanceof Group || principal instanceof GroupPrincipal; +} + +/** + * Returns an enumeration of the members in the group. + * @param principal the principal whose membership is listed. + * @return an enumeration of the group members. + */ +public static Enumeration members(@Nonnull Principal principal) { +if (principal instanceof Group) { +return ((Group) principal).members(); +} +if (principal instanceof GroupPrincipal) { +return ((GroupPrincipal) principal).members(); +} +return Collections.emptyEnumeration(); +} + +/** + * Returns true if the passed principal is a member of the group. + * @param principal the principal whose members are being checked. + * @param member the principal whose membership is to be checked. + * @return true if the principal is a member of this group, false otherwise. + */ +public static boolean isMember(@Nonnull Principal principal, @Nonnull Principal member) { +if (principal instanceof Group) { +return ((Group) principal).isMember(member); +} +if (principal instanceof GroupPrincipal) { +return ((GroupPrincipal) principal).isMember(member); +} +return false; +} + +public static Set transform(Set groups) { +ImmutableSet.Builder g2 = ImmutableSet.builder(); +for (Group g : groups) { +g2.add(new GroupPrincipalWrapper(g)); +} +return g2.build(); +} + +public static Enumeration transform(Enumeration members) { +Iterator m2 = Iterators.transform(Iterators.forEnumeration(members), TRANSFORMER); +return Iterators.asEnumeration(m2); +} + +private static class GroupTransformer implements Function{ + +@Override +public Principal apply(Principal input) { +if (input instanceof Group) { +return new GroupPrincipalWrapper((Group) input); +} else { +return input; +} +} +} +} Propchange: jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipals.java -- svn:eol-style = native Modified:
svn commit: r1827239 [1/2] - in /jackrabbit/oak/trunk: oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ oak-auth-external/src/test/java/or
Author: stillalex Date: Mon Mar 19 20:08:56 2018 New Revision: 1827239 URL: http://svn.apache.org/viewvc?rev=1827239=rev Log: OAK-7024 java.security.acl deprecated in Java 10, marked for removal in Java 11 Added: jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipalWrapper.java (with props) jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipals.java (with props) jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipalsTest.java (with props) Modified: jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalPrincipalConfiguration.java jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AbstractPrincipalTest.java jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProviderTest.java jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalTest.java jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/PrincipalProviderAutoMembershipTest.java jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/PrincipalProviderDeepNestingTest.java jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImpl.java jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipal.java jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/ImpersonationImpl.java jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProvider.java jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACLTest.java jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImplTest.java jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipalTest.java jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/ImpersonationImplEmptyTest.java jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderWithCacheTest.java jackrabbit/oak/trunk/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java jackrabbit/oak/trunk/oak-exercise/src/test/java/org/apache/jackrabbit/oak/exercise/security/authorization/permission/L3_PrecedenceRulesTest.java jackrabbit/oak/trunk/oak-exercise/src/test/java/org/apache/jackrabbit/oak/exercise/security/principal/L3_EveryoneTest.java jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/principal/PrincipalManagerTest.java jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/EveryoneGroupTest.java jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java jackrabbit/oak/trunk/oak-security-spi/pom.xml jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModule.java jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProvider.java jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProvider.java jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipal.java jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalManagerImpl.java jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalProvider.java
svn commit: r1827181 - /jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalIdentityImporterTest.java
Author: stillalex Date: Mon Mar 19 09:40:58 2018 New Revision: 1827181 URL: http://svn.apache.org/viewvc?rev=1827181=rev Log: OAK-7354 Test failure ExternalIdentityImporterTest.importExternalUserWithPrincipalNames Modified: jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalIdentityImporterTest.java Modified: jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalIdentityImporterTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalIdentityImporterTest.java?rev=1827181=1827180=1827181=diff == --- jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalIdentityImporterTest.java (original) +++ jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalIdentityImporterTest.java Mon Mar 19 09:40:58 2018 @@ -29,7 +29,6 @@ import javax.jcr.SimpleCredentials; import javax.security.auth.Subject; import org.apache.jackrabbit.api.JackrabbitRepository; -import org.apache.jackrabbit.api.JackrabbitSession; import org.apache.jackrabbit.oak.jcr.Jcr; import org.apache.jackrabbit.oak.query.QueryEngineSettings; import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters; @@ -73,12 +72,10 @@ public class ExternalIdentityImporterTes ""; private Repository repo; -private SecurityProvider securityProvider; -private JackrabbitSession session; @Before public void before() throws Exception { -securityProvider = TestSecurityProvider.newTestSecurityProvider(getConfigurationParameters(), +SecurityProvider securityProvider = TestSecurityProvider.newTestSecurityProvider(getConfigurationParameters(), new ExternalPrincipalConfiguration()); QueryEngineSettings queryEngineSettings = new QueryEngineSettings(); queryEngineSettings.setFailTraversal(true); @@ -91,14 +88,8 @@ public class ExternalIdentityImporterTes @After public void after() throws Exception { -try { -if (session != null) { -session.logout(); -} -} finally { -if (repo instanceof JackrabbitRepository) { -((JackrabbitRepository) repo).shutdown(); -} +if (repo instanceof JackrabbitRepository) { +((JackrabbitRepository) repo).shutdown(); } } @@ -107,18 +98,17 @@ public class ExternalIdentityImporterTes return ConfigurationParameters.EMPTY; } -JackrabbitSession createSession(boolean isSystem) throws Exception { +Session createSession(boolean isSystem) throws Exception { if (isSystem) { -session = (JackrabbitSession) Subject.doAs(SystemSubject.INSTANCE, new PrivilegedExceptionAction() { +return Subject.doAs(SystemSubject.INSTANCE, new PrivilegedExceptionAction() { @Override public Session run() throws RepositoryException { return repo.login(null, null); } }); } else { -session = (JackrabbitSession) repo.login(new SimpleCredentials(UserConstants.DEFAULT_ADMIN_ID, UserConstants.DEFAULT_ADMIN_ID.toCharArray())); +return repo.login(new SimpleCredentials(UserConstants.DEFAULT_ADMIN_ID, UserConstants.DEFAULT_ADMIN_ID.toCharArray())); } -return session; } Node doImport(Session importSession, String parentPath, String xml) throws Exception { @@ -150,28 +140,66 @@ public class ExternalIdentityImporterTes @Test public void importExternalUser() throws Exception { -Node parent = doImport(createSession(false), UserConstants.DEFAULT_USER_PATH, XML_EXTERNAL_USER); -assertHasProperties(parent.getNode("t"), ExternalIdentityConstants.REP_EXTERNAL_ID, ExternalIdentityConstants.REP_LAST_SYNCED); -assertNotHasProperties(parent.getNode("t"), ExternalIdentityConstants.REP_EXTERNAL_PRINCIPAL_NAMES); +Session s = null; +try { +s = createSession(false); +Node parent = doImport(s, UserConstants.DEFAULT_USER_PATH, XML_EXTERNAL_USER); +assertHasProperties(parent.getNode("t"), ExternalIdentityConstants.REP_EXTERNAL_ID, +ExternalIdentityConstants.REP_LAST_SYNCED); +assertNotHasProperties(parent.getNode("t"), ExternalIdentityConstants.REP_EXTERNAL_PRINCIPAL_NAMES); +} finally { +if (s != null) { +s.logout(); +} +} }