SLING-8578 - Nodes which contain : are not correctly processed
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 23cd723..4e2f199 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,7 +16,10 @@
  */
 package org.apache.sling.feature.cpconverter.acl;
 
+import org.apache.jackrabbit.vault.util.PlatformNameFormat;
+
 import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -31,12 +34,15 @@
 
     private final Path path;
 
+    private final Path repositoryPath;
+
     private final List<String> restrictions = new LinkedList<>();
 
     public Acl(String operation, String privileges, Path path) {
         this.operation = operation;
         this.privileges = privileges;
         this.path = path;
+        this.repositoryPath = Paths.get(PlatformNameFormat.getRepositoryPath(path.toString()));
     }
 
     public void addRestriction(String restriction) {
@@ -57,6 +63,10 @@
         return path;
     }
 
+    public Path getRepositoryPath() {
+        return repositoryPath;
+    }
+
     public List<String> getRestrictions() {
         return 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 cebc5c2..da92a6b 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
@@ -32,6 +32,7 @@
 import java.util.TreeSet;
 import java.util.stream.Collectors;
 
+import org.apache.jackrabbit.vault.util.PlatformNameFormat;
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionType;
 import org.apache.sling.feature.Feature;
@@ -204,7 +205,7 @@
 
         Set<Path> paths = new TreeSet<>();
         for (Acl authorization : authorizations) {
-            addPath(authorization.getPath(), paths);
+            addPath(authorization.getRepositoryPath(), paths);
         }
 
         for (Path path : paths) {
@@ -247,7 +248,7 @@
             formatter.format("%s %s on %s",
                              authorization.getOperation(),
                              authorization.getPrivileges(),
-                             authorization.getPath());
+                             authorization.getRepositoryPath());
 
             if (!authorization.getRestrictions().isEmpty()) {
                 formatter.format(" restriction(%s)",
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/acl/AclManagerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/acl/AclManagerTest.java
index 37afda1..02444df 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/acl/AclManagerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/acl/AclManagerTest.java
@@ -34,6 +34,7 @@
 import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.cpconverter.vltpkg.VaultPackageAssembler;
 import org.apache.sling.repoinit.parser.RepoInitParser;
+import org.apache.sling.repoinit.parser.RepoInitParsingException;
 import org.apache.sling.repoinit.parser.impl.RepoInitParserService;
 import org.apache.sling.repoinit.parser.operations.Operation;
 import org.junit.After;
@@ -97,4 +98,35 @@
         assertFalse(operations.isEmpty());
     }
 
+    @Test
+    public void pathWithSpecialCharactersTest() throws RepoInitParsingException {
+        aclManager.addSystemUser(new SystemUser("sys-usr", Paths.get("/home/users/system")));
+        aclManager.addAcl("sys-usr", new Acl("allow", "jcr:read", Paths.get("/content/_cq_tags")));
+        aclManager.addAcl("sys-usr", new Acl("allow", "jcr:write", Paths.get("/content/cq:tags")));
+        VaultPackageAssembler assembler = mock(VaultPackageAssembler.class);
+        when(assembler.getEntry(anyString())).thenReturn(new File(System.getProperty("java.io.tmpdir")));
+        Feature feature = new Feature(new ArtifactId("org.apache.sling", "org.apache.sling.cp2fm", "0.0.1", null, null));
+
+        aclManager.addRepoinitExtension(Arrays.asList(assembler), feature);
+
+        Extension repoinitExtension = feature.getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT);
+        assertNotNull(repoinitExtension);
+        System.out.println(repoinitExtension.getText());
+
+        String expected = "create service user sys-usr with path /home/users/system\n" +
+                "create path (sling:Folder) /content\n" +
+                "create path (sling:Folder) /content/cq:tags\n" +
+                "set ACL for sys-usr\n" +
+                "allow jcr:read on /content/cq:tags\n" +
+                "allow jcr:write on /content/cq:tags\n" +
+                "end\n";
+
+        String actual = repoinitExtension.getText();
+        assertEquals(expected, actual);
+
+        RepoInitParser repoInitParser = new RepoInitParserService();
+        List<Operation> operations = repoInitParser.parse(new StringReader(actual));
+        assertFalse(operations.isEmpty());
+    }
+
 }