You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by si...@apache.org on 2019/06/27 21:06:22 UTC

[sling-org-apache-sling-feature-cpconverter] branch master updated: SLING-8540 - ACL permissions from jcr_root are not correctly serialised

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

simonetripodi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-cpconverter.git


The following commit(s) were added to refs/heads/master by this push:
     new 43ee3c0  SLING-8540 - ACL permissions from jcr_root are not correctly serialised
43ee3c0 is described below

commit 43ee3c0833c9c22786c708239e82a670b2472e6c
Author: Simo Tripodi <st...@adobe.com>
AuthorDate: Thu Jun 27 23:06:15 2019 +0200

    SLING-8540 - ACL permissions from jcr_root are not correctly serialised
---
 .../apache/sling/feature/cpconverter/acl/Acl.java    | 20 +++++++++++++++++---
 .../feature/cpconverter/acl/DefaultAclManager.java   | 20 +++++++++++---------
 .../cpconverter/handlers/RepPolicyEntryHandler.java  |  2 +-
 3 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/cpconverter/acl/Acl.java b/src/main/java/org/apache/sling/feature/cpconverter/acl/Acl.java
index 0e21ead..9c22118 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/acl/Acl.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/acl/Acl.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sling.feature.cpconverter.acl;
 
+import java.nio.file.Path;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -28,11 +29,11 @@ public final class Acl {
 
     private final String privileges;
 
-    private final String path;
+    private final Path path;
 
     private final List<String> restrictions = new LinkedList<>();
 
-    protected Acl(String operation, String privileges, String path) {
+    protected Acl(String operation, String privileges, Path path) {
         this.operation = operation;
         this.privileges = privileges;
         this.path = path;
@@ -52,7 +53,7 @@ public final class Acl {
         return privileges;
     }
 
-    public String getPath() {
+    public Path getPath() {
         return path;
     }
 
@@ -60,4 +61,17 @@ public final class Acl {
         return restrictions;
     }
 
+    @Override
+    public String toString() {
+        return "Acl [operation="
+               + operation
+               + ", privileges="
+               + privileges
+               + ", path="
+               + path
+               + ", restrictions="
+               + restrictions
+               + "]";
+    }
+
 }
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java b/src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java
index 9eeeab0..16c79ff 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java
@@ -18,6 +18,8 @@ package org.apache.sling.feature.cpconverter.acl;
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.Formatter;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -43,7 +45,7 @@ public final class DefaultAclManager implements AclManager {
 
     private final Set<String> preProvidedSystemUsers = new LinkedHashSet<>();
 
-    private final Set<String> preProvidedPaths = new HashSet<String>();
+    private final Set<Path> preProvidedPaths = new HashSet<>();
 
     private final Set<String> systemUsers = new LinkedHashSet<>();
 
@@ -61,19 +63,19 @@ public final class DefaultAclManager implements AclManager {
     }
 
     public Acl addAcl(String systemUser, String operation, String privileges, String path) {
-        Acl acl = new Acl(operation, privileges, path);
+        Acl acl = new Acl(operation, privileges, Paths.get(path));
         acls.computeIfAbsent(systemUser, k -> new LinkedList<>()).add(acl);
         return acl;
     }
 
-    private void addPath(String path, Set<String> paths) {
+    private void addPath(Path path, Set<Path> paths) {
         if (preProvidedPaths.add(path)) {
             paths.add(path);
         }
 
-        int endIndex = path.lastIndexOf('/');
-        if (endIndex > 0) {
-            addPath(path.substring(0, endIndex), paths);
+        Path parent = path.getParent();
+        if (parent != null && parent.getNameCount() > 0) {
+            addPath(parent, paths);
         }
     }
 
@@ -177,13 +179,13 @@ public final class DefaultAclManager implements AclManager {
             return;
         }
 
-        Set<String> paths = new TreeSet<String>();
+        Set<Path> paths = new TreeSet<>();
         for (Acl authorization : authorizations) {
             addPath(authorization.getPath(), paths);
         }
 
-        for (String path : paths) {
-            File currentDir = packageAssembler.getEntry(path);
+        for (Path path : paths) {
+            File currentDir = packageAssembler.getEntry(path.toString());
             String type = DEFAULT_TYPE;
 
             if (currentDir.exists()) {
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java
index 70ba317..f4ba35c 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java
@@ -36,7 +36,7 @@ import org.xml.sax.SAXException;
 public final class RepPolicyEntryHandler extends AbstractRegexEntryHandler {
 
     public RepPolicyEntryHandler() {
-        super("/jcr_root(.*)/_rep_policy.xml");
+        super("/jcr_root(.*/)_rep_policy.xml");
     }
 
     @Override