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);
+ }
}
}
}