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

angela pushed a commit to branch SLING-9953-groups
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-cpconverter.git

commit 5992ea406404164afc1159d6291ddfdfb2300691
Author: angela <[email protected]>
AuthorDate: Tue Jan 19 10:52:22 2021 +0100

    SLING-9953 : ACEs on/below user nodes are ignored upon conversion (treat 
groups the same as regular users and abort converter if ace points to them)
---
 .../accesscontrol/DefaultAclManager.java           | 29 ++++++++--------------
 .../cpconverter/accesscontrol/AclManagerTest.java  | 14 +----------
 .../handlers/RepPolicyEntryHandlerTest.java        | 18 ++------------
 3 files changed, 14 insertions(+), 47 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java
 
b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java
index f79c6d5..aff08fc 100644
--- 
a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java
+++ 
b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java
@@ -31,18 +31,18 @@ import org.jetbrains.annotations.Nullable;
 import javax.jcr.NamespaceException;
 import java.io.File;
 import java.io.FileInputStream;
-import java.util.Optional;
+import java.util.Collection;
 import java.util.Formatter;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.Set;
-import java.util.Collection;
-import java.util.Objects;
 import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -134,20 +134,13 @@ public class DefaultAclManager implements AclManager {
             }
         }
 
-        for (Group group : groups) {
-            if (aclStartsWith(group.getPath())) {
-                formatter.format("create group %s with path %s%n", 
group.getId(), group.getIntermediatePath());
-            }
-            if (aclIsBelow(group.getPath())) {
-                throw new IllegalStateException("Detected policy on subpath of 
group: " + group);
-            }
-        }
-
-        for (User user : users) {
-            if (aclStartsWith(user.getPath())) {
-                throw new IllegalStateException("Detected policy on user: " + 
user);
+        // abort the conversion if an access control entry takes effect at or 
below a user/group which is not
+        // created by repo-init statements generated here.
+        Stream.concat(groups.stream(), users.stream()).forEach(abstractUser -> 
{
+            if (aclStartsWith(abstractUser.getPath())) {
+                throw new IllegalStateException("Detected policy on user: " + 
abstractUser);
             }
-        }
+        });
     }
 
     @NotNull
diff --git 
a/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/AclManagerTest.java
 
b/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/AclManagerTest.java
index 8e74167..bddc611 100644
--- 
a/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/AclManagerTest.java
+++ 
b/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/AclManagerTest.java
@@ -200,7 +200,7 @@ public class AclManagerTest {
         assertFalse(operations.isEmpty());
     }
 
-    @Test
+    @Test(expected = IllegalStateException.class)
     public void testGroupHandlingWithGroupUsed() {
         aclManager.addSystemUser(new SystemUser("sys-usr", new 
RepoPath("/home/users/system/foo"), new RepoPath("/home/users/system")));
 
@@ -216,18 +216,6 @@ public class AclManagerTest {
         aclManager.addRepoinitExtension(Collections.singletonList(assembler), 
fm);
 
         Extension repoinitExtension = 
feature.getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT);
-        assertNotNull(repoinitExtension);
-
-        String expected =
-                "create service user sys-usr with path /home/users/system" + 
System.lineSeparator() +
-                        "create group test with path /home/groups/test" + 
System.lineSeparator() +
-                        "set ACL for sys-usr" + System.lineSeparator() +
-                        "allow jcr:read on home(test)" + 
System.lineSeparator() +
-                        "end" + System.lineSeparator();
-
-        String actual = repoinitExtension.getText();
-        assertEquals(expected, actual);
-
     }
 
     @Test
diff --git 
a/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java
 
b/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java
index c70d39d..421f627 100644
--- 
a/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java
+++ 
b/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java
@@ -221,7 +221,7 @@ public final class RepPolicyEntryHandlerTest {
         assertTrue(result.getExcludedAcls().isEmpty());
     }
 
-    @Test
+    @Test(expected = IllegalStateException.class)
     public void policyAtGroupNode() throws Exception {
         SystemUser s1 = new SystemUser("service1", new 
RepoPath("/home/users/system/services/random1"), new 
RepoPath("/home/users/system/services"));
         Group gr = new Group("testgroup", new 
RepoPath("/home/groups/g/HjDnfdMCjekaF4jhhUvO"), new 
RepoPath("/home/groups/g"));
@@ -230,21 +230,7 @@ public final class RepPolicyEntryHandlerTest {
         aclManager.addSystemUser(s1);
         aclManager.addGroup(gr);
 
-        ParseResult result = 
parseAndSetRepoInit("/jcr_root/home/groups/g/HjDnfdMCjekaF4jhhUvO/_rep_policy.xml",
 aclManager);
-        Extension repoinitExtension = result.getRepoinitExtension();
-
-        String expected =
-                "create service user service1 with path 
/home/users/system/services" + System.lineSeparator() +
-                "create group testgroup with path /home/groups/g" + 
System.lineSeparator() +
-                "set ACL for service1" + System.lineSeparator() +
-                "allow jcr:read on home(testgroup)" + System.lineSeparator() +
-                "end" + System.lineSeparator();
-        assertEquals(expected, repoinitExtension.getText());
-
-        String expectedExclusions = "<?xml version=\"1.0\" 
encoding=\"UTF-8\"?><jcr:root xmlns:jcr=\"http://www.jcp.org/jcr/1.0\"; 
xmlns:rep=\"internal\" jcr:primaryType=\"rep:ACL\">\n" +
-                "    <allow1 jcr:primaryType=\"rep:GrantACE\" 
rep:principalName=\"testgroup\" rep:privileges=\"{Name}[jcr:read]\"/>\n" +
-                "</jcr:root>\n";
-        assertEquals(expectedExclusions, result.getExcludedAcls());
+        
parseAndSetRepoInit("/jcr_root/home/groups/g/HjDnfdMCjekaF4jhhUvO/_rep_policy.xml",
 aclManager);
     }
 
     @Test(expected = IllegalStateException.class)

Reply via email to