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

2018-03-19 Thread catholicon
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());
+
+Map config = 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

2018-03-19 Thread stillalex
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

2018-03-19 Thread stillalex
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

2018-03-19 Thread stillalex
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();
+}
+}
 }