SLING-8535: make register privilege work when privilege already exists.
diff --git a/src/main/java/org/apache/sling/jcr/repoinit/impl/PrivilegeVisitor.java b/src/main/java/org/apache/sling/jcr/repoinit/impl/PrivilegeVisitor.java
index ecbb0d6..a86fc7a 100644
--- a/src/main/java/org/apache/sling/jcr/repoinit/impl/PrivilegeVisitor.java
+++ b/src/main/java/org/apache/sling/jcr/repoinit/impl/PrivilegeVisitor.java
@@ -21,6 +21,8 @@
 import org.apache.sling.repoinit.parser.operations.RegisterPrivilege;
 
 import javax.jcr.Session;
+import javax.jcr.security.AccessControlException;
+import javax.jcr.security.Privilege;
 
 public class PrivilegeVisitor extends DoNothingVisitor {
     public PrivilegeVisitor(Session session) {
@@ -30,10 +32,19 @@
     @Override
     public void visitRegisterPrivilege(RegisterPrivilege rp) {
         try {
-            ((JackrabbitWorkspace) session.getWorkspace()).getPrivilegeManager()
-                    .registerPrivilege(rp.getPrivilegeName(), rp.isAbstract(), rp.getDeclaredAggregateNames().toArray(new String[0]));
+            Privilege priv = ((JackrabbitWorkspace) session.getWorkspace()).getPrivilegeManager().getPrivilege(rp.getPrivilegeName());
+            log.info("Privilege {} already exists: {}, no changes made.", rp.getPrivilegeName(), priv);
         } catch (Exception e) {
-            report(e, "Unable to register privilege from: " + rp);
+            if (e instanceof AccessControlException) {
+                try {
+                    ((JackrabbitWorkspace) session.getWorkspace()).getPrivilegeManager()
+                        .registerPrivilege(rp.getPrivilegeName(), rp.isAbstract(), rp.getDeclaredAggregateNames().toArray(new String[0]));
+                } catch (Exception ex) {
+                    report(ex, "Unable to register privilege from: " + rp);
+                }
+            } else {
+                report(e, "Unable to register privilege from: " + rp);
+            }
         }
     }
 }