This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.jcr.repoinit-1.0.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-repoinit.git
commit 1d0ac30e74fe848df9a823b70084bcb82011dda5 Author: Bertrand Delacretaz <[email protected]> AuthorDate: Tue Dec 29 12:31:06 2015 +0000 SLING-5355 - it's ok for service user to already exist git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/acldef/oak-jcr@1722119 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/sling/acldef/jcr/AclOperationVisitor.java | 8 ++++++-- .../java/org/apache/sling/acldef/jcr/ServiceUserUtil.java | 13 +++++++++++++ .../org/apache/sling/acldef/jcr/CreateServiceUsersTest.java | 11 +++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/sling/acldef/jcr/AclOperationVisitor.java b/src/main/java/org/apache/sling/acldef/jcr/AclOperationVisitor.java index bd6310c..19d43f8 100644 --- a/src/main/java/org/apache/sling/acldef/jcr/AclOperationVisitor.java +++ b/src/main/java/org/apache/sling/acldef/jcr/AclOperationVisitor.java @@ -58,9 +58,13 @@ public class AclOperationVisitor implements OperationVisitor { @Override public void visitCreateServiceUser(CreateServiceUser s) { final String id = s.getUsername(); - log.info("Creating service user {}", id); try { - ServiceUserUtil.createServiceUser(session, id); + if(!ServiceUserUtil.serviceUserExists(session, id)) { + log.info("Creating service user {}", id); + ServiceUserUtil.createServiceUser(session, id); + } else { + log.info("Service user {} already exists, no changes made", id); + } } catch(Exception e) { report(e, "Unable to create service user [" + id + "]:" + e); } diff --git a/src/main/java/org/apache/sling/acldef/jcr/ServiceUserUtil.java b/src/main/java/org/apache/sling/acldef/jcr/ServiceUserUtil.java index 09b6426..2d131ce 100644 --- a/src/main/java/org/apache/sling/acldef/jcr/ServiceUserUtil.java +++ b/src/main/java/org/apache/sling/acldef/jcr/ServiceUserUtil.java @@ -21,6 +21,7 @@ import javax.jcr.Session; import org.apache.jackrabbit.api.JackrabbitSession; import org.apache.jackrabbit.api.security.user.Authorizable; +import org.apache.jackrabbit.api.security.user.User; import org.apache.jackrabbit.api.security.user.UserManager; /** Utilities for Service Users management */ @@ -37,10 +38,22 @@ public class ServiceUserUtil { return getUserManager(session).getAuthorizable(username); } + /** Create a service user - fails if it already exists */ public static void createServiceUser(Session s, String username) throws RepositoryException { getUserManager(s).createSystemUser(username, null); } + /** True if specified service user exists */ + public static boolean serviceUserExists(Session session, String username) throws RepositoryException { + boolean result = false; + final Authorizable a = getAuthorizable(session, username); + if(a != null) { + final User u = (User)a; + result = u.isSystemUser(); + } + return result; + } + public static void deleteServiceUser(Session s, String username) throws RepositoryException { final Authorizable a = getUserManager(s).getAuthorizable(username); if(a == null) { diff --git a/src/test/java/org/apache/sling/acldef/jcr/CreateServiceUsersTest.java b/src/test/java/org/apache/sling/acldef/jcr/CreateServiceUsersTest.java index 0f09972..23e4174 100644 --- a/src/test/java/org/apache/sling/acldef/jcr/CreateServiceUsersTest.java +++ b/src/test/java/org/apache/sling/acldef/jcr/CreateServiceUsersTest.java @@ -57,6 +57,17 @@ public class CreateServiceUsersTest { } @Test + public void createUserMultipleTimes() throws Exception { + final String username = namePrefix + "_multiple"; + U.assertServiceUser("before test", username, false); + final String input = "create service user " + username; + for(int i=0; i < 50; i++) { + U.parseAndExecute(input); + } + U.assertServiceUser("after creating it multiple times", username, true); + } + + @Test public void createDeleteMultipleTest() throws Exception { final int n = 50; -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
