You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2018/03/19 20:51:16 UTC

svn commit: r1827242 - in /jackrabbit/trunk: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/securit...

Author: stillalex
Date: Mon Mar 19 20:51:16 2018
New Revision: 1827242

URL: http://svn.apache.org/viewvc?rev=1827242&view=rev
Log:
JCR-4246 java.security.acl deprecated in Java 10, marked for removal in Java 11


Added:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/GroupPrincipals.java   (with props)
Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/DefaultSecurityManager.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/JackrabbitRepositoryStub.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/UserPerWorkspaceSecurityManager.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/Entry.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/EveryonePrincipal.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/PrincipalManagerImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/PrincipalProvider.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/simple/SimpleLoginModule.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/simple/SimpleSecurityManager.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/ImpersonationImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserAccessControlProvider.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/principal/PrincipalManagerTest.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NodeImplTest.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/ACLTemplateTest.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/principal/PrincipalManagerTest.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/DefaultPrincipalProviderTest.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/GroupImplTest.java
    jackrabbit/trunk/jackrabbit-jcr-rmi/pom.xml
    jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/client/LocalAdapterFactory.java
    jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/remote/principal/RemoteGroup.java
    jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/server/ServerAdapterFactory.java
    jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/server/principal/ServerGroup.java
    jackrabbit/trunk/jackrabbit-jcr-rmi/src/test/java/org/apache/jackrabbit/rmi/RepositoryStubImpl.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/DefaultSecurityManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/DefaultSecurityManager.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/DefaultSecurityManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/DefaultSecurityManager.java Mon Mar 19 20:51:16 2018
@@ -59,6 +59,7 @@ import org.apache.jackrabbit.core.securi
 import org.apache.jackrabbit.core.security.principal.AbstractPrincipalProvider;
 import org.apache.jackrabbit.core.security.principal.AdminPrincipal;
 import org.apache.jackrabbit.core.security.principal.DefaultPrincipalProvider;
+import org.apache.jackrabbit.core.security.principal.GroupPrincipals;
 import org.apache.jackrabbit.core.security.principal.PrincipalManagerImpl;
 import org.apache.jackrabbit.core.security.principal.PrincipalProvider;
 import org.apache.jackrabbit.core.security.principal.PrincipalProviderRegistry;
@@ -354,7 +355,7 @@ public class DefaultSecurityManager impl
             Set<Principal> s = subject.getPrincipals(cl);
             if (!s.isEmpty()) {
                 for (Principal p : s) {
-                    if (!(p instanceof java.security.acl.Group)) {
+                    if (!GroupPrincipals.isGroup(p)) {
                         return p.getName();
                     }
                 }

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/JackrabbitRepositoryStub.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/JackrabbitRepositoryStub.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/JackrabbitRepositoryStub.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/JackrabbitRepositoryStub.java Mon Mar 19 20:51:16 2018
@@ -22,7 +22,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
@@ -33,6 +32,7 @@ import javax.jcr.Session;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.core.config.RepositoryConfig;
+import org.apache.jackrabbit.core.security.principal.GroupPrincipals;
 import org.apache.jackrabbit.test.NotExecutableException;
 import org.apache.jackrabbit.test.RepositoryStub;
 import org.apache.jackrabbit.test.RepositoryStubException;
@@ -208,7 +208,7 @@ public class JackrabbitRepositoryStub ex
 
         if (session instanceof SessionImpl) {
             for (Principal p : ((SessionImpl)session).getSubject().getPrincipals()) {
-                if (! (p instanceof Group)) {
+                if (!GroupPrincipals.isGroup(p)) {
                     knownPrincipal = p;
                 }
             }

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/UserPerWorkspaceSecurityManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/UserPerWorkspaceSecurityManager.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/UserPerWorkspaceSecurityManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/UserPerWorkspaceSecurityManager.java Mon Mar 19 20:51:16 2018
@@ -25,6 +25,7 @@ import org.apache.jackrabbit.core.securi
 import org.apache.jackrabbit.core.security.authorization.WorkspaceAccessManager;
 import org.apache.jackrabbit.core.security.principal.AbstractPrincipalProvider;
 import org.apache.jackrabbit.core.security.principal.DefaultPrincipalProvider;
+import org.apache.jackrabbit.core.security.principal.GroupPrincipals;
 import org.apache.jackrabbit.core.security.principal.PrincipalManagerImpl;
 import org.apache.jackrabbit.core.security.principal.PrincipalProvider;
 import org.apache.jackrabbit.core.security.principal.PrincipalProviderRegistry;
@@ -40,7 +41,6 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.security.auth.Subject;
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -361,7 +361,7 @@ public class UserPerWorkspaceSecurityMan
             } else {
                 UserManager umgr = UserPerWorkspaceSecurityManager.this.getSystemUserManager(workspaceName);
                 for (Principal principal : principals) {
-                    if (!(principal instanceof Group)) {
+                    if (!GroupPrincipals.isGroup(principal)) {
                         // check if the workspace identified by the given workspace
                         // name contains a user with this principal
                         if (umgr.getAuthorizable(principal) != null) {

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/Entry.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/Entry.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/Entry.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/Entry.java Mon Mar 19 20:51:16 2018
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.core.security.authorization.acl;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.ArrayList;
 import java.util.List;
 import javax.jcr.NodeIterator;
@@ -33,6 +32,7 @@ import org.apache.jackrabbit.core.securi
 import org.apache.jackrabbit.core.security.authorization.GlobPattern;
 import org.apache.jackrabbit.core.security.authorization.PrivilegeBits;
 import org.apache.jackrabbit.core.security.authorization.PrivilegeManagerImpl;
+import org.apache.jackrabbit.core.security.principal.GroupPrincipals;
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.spi.Name;
 import org.slf4j.Logger;
@@ -87,7 +87,7 @@ class Entry implements AccessControlCons
                 boolean isGroupEntry = false;
                 Principal princ = principalMgr.getPrincipal(principalName);
                 if (princ != null) {
-                    isGroupEntry = (princ instanceof Group);
+                    isGroupEntry = GroupPrincipals.isGroup(princ);
                 }
 
                 InternalValue[] privValues = aceNode.getProperty(P_PRIVILEGES).internalGetValues();

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/EveryonePrincipal.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/EveryonePrincipal.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/EveryonePrincipal.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/EveryonePrincipal.java Mon Mar 19 20:51:16 2018
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.core.security.principal;
 
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.JackrabbitPrincipal;
 
 import java.security.Principal;
@@ -24,7 +25,7 @@ import java.util.Enumeration;
 /**
  * The EveryonePrincipal contains all principals (excluding itself).
  */
-public final class EveryonePrincipal implements java.security.acl.Group, JackrabbitPrincipal {
+public final class EveryonePrincipal implements java.security.acl.Group, GroupPrincipal, JackrabbitPrincipal {
 
     public static final String NAME = "everyone";
     private static final EveryonePrincipal INSTANCE = new EveryonePrincipal();

Added: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/GroupPrincipals.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/GroupPrincipals.java?rev=1827242&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/GroupPrincipals.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/GroupPrincipals.java Mon Mar 19 20:51:16 2018
@@ -0,0 +1,61 @@
+package org.apache.jackrabbit.core.security.principal;
+
+import java.security.Principal;
+import java.security.acl.Group;
+import java.util.Collections;
+import java.util.Enumeration;
+
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
+
+/**
+ * Helper class to deal with the migration between the 2 types of groups
+ *
+ */
+public final class GroupPrincipals {
+
+    private GroupPrincipals() {
+    }
+
+    /**
+     * Checks if the provided principal is a group.
+     *
+     * @param principal
+     *            to be checked.
+     *
+     * @return true if the principal is of type group.
+     */
+    public static boolean isGroup(Principal principal) {
+        return principal instanceof Group || principal instanceof GroupPrincipal;
+    }
+
+    /**
+     * Returns an enumeration of the members in the group.
+     * @param principal the principal whose membership is listed.
+     * @return an enumeration of the group members.
+     */
+    public static Enumeration<? extends Principal> members(Principal principal) {
+        if (principal instanceof Group) {
+            return ((Group) principal).members();
+        }
+        if (principal instanceof GroupPrincipal) {
+            return ((GroupPrincipal) principal).members();
+        }
+        return Collections.emptyEnumeration();
+    }
+
+    /**
+     * Returns true if the passed principal is a member of the group.
+     * @param principal the principal whose members are being checked.
+     * @param member the principal whose membership is to be checked.
+     * @return true if the principal is a member of this group, false otherwise.
+     */
+    public static boolean isMember(Principal principal, Principal member) {
+        if (principal instanceof Group) {
+            return ((Group) principal).isMember(member);
+        }
+        if (principal instanceof GroupPrincipal) {
+            return ((GroupPrincipal) principal).isMember(member);
+        }
+        return false;
+    }
+}

Propchange: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/GroupPrincipals.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/PrincipalManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/PrincipalManagerImpl.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/PrincipalManagerImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/PrincipalManagerImpl.java Mon Mar 19 20:51:16 2018
@@ -27,6 +27,7 @@ import java.util.List;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.ItemBasedPrincipal;
 import org.apache.jackrabbit.api.security.principal.JackrabbitPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalIterator;
@@ -190,17 +191,16 @@ public class PrincipalManagerImpl implem
      * everyone principal.
      */
     private Principal disguise(Principal principal, PrincipalProvider provider) {
-        if (!(principal instanceof Group) || principal instanceof EveryonePrincipal) {
+        if (!GroupPrincipals.isGroup(principal) || principal instanceof EveryonePrincipal) {
             // nothing to do.
             return principal;
         }
-        Group gr = (Group) principal;
         // make sure all groups except for the 'everyone' group expose only
         // principals visible to the session.
         if (principal instanceof ItemBasedPrincipal) {
-            return new ItemBasedCheckedGroup(gr, provider);
+            return new ItemBasedCheckedGroup(principal, provider);
         } else {
-            return new CheckedGroup(gr, provider);
+            return new CheckedGroup(principal, provider);
         }
     }
 
@@ -212,12 +212,12 @@ public class PrincipalManagerImpl implem
      * due to the fact, that the principal provider is not bound to a particular
      * Session object.
      */
-    private class CheckedGroup implements Group, JackrabbitPrincipal {
+    private class CheckedGroup implements Group, GroupPrincipal, JackrabbitPrincipal {
 
-        final Group delegatee;
+        final Principal delegatee;
         private final PrincipalProvider provider;
 
-        private CheckedGroup(Group delegatee, PrincipalProvider provider) {
+        private CheckedGroup(Principal delegatee, PrincipalProvider provider) {
             this.delegatee = delegatee;
             this.provider = provider;
         }
@@ -230,12 +230,13 @@ public class PrincipalManagerImpl implem
             throw new UnsupportedOperationException("Not implemented");
         }
 
+        @Override
         public boolean isMember(Principal member) {
-            return delegatee.isMember(member);
+            return GroupPrincipals.isMember(delegatee, member);
         }
 
         public Enumeration<? extends Principal> members() {
-            Iterator<? extends Principal> it = Collections.list(delegatee.members()).iterator();
+            Iterator<? extends Principal> it = Collections.list(GroupPrincipals.members(delegatee)).iterator();
             final PrincipalIterator members = new CheckedPrincipalIterator(it, provider);
             return new Enumeration<Principal>() {
                 public boolean hasMoreElements() {
@@ -268,7 +269,7 @@ public class PrincipalManagerImpl implem
      */
     private class ItemBasedCheckedGroup extends CheckedGroup implements ItemBasedPrincipal {
 
-        private ItemBasedCheckedGroup(Group delegatee, PrincipalProvider provider) {
+        private ItemBasedCheckedGroup(Principal delegatee, PrincipalProvider provider) {
             super(delegatee, provider);
             if (!(delegatee instanceof ItemBasedPrincipal)) {
                 throw new IllegalArgumentException();

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/PrincipalProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/PrincipalProvider.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/PrincipalProvider.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/PrincipalProvider.java Mon Mar 19 20:51:16 2018
@@ -81,7 +81,8 @@ public interface PrincipalProvider {
     /**
      * Returns an iterator over all group principals for which the given
      * principal is either direct or indirect member of. If a principal is
-     * a direct member of a group, then <code>{@link java.security.acl.Group#isMember(Principal)}</code>
+     * a direct member of a group, then
+     * <code>{@link org.apache.jackrabbit.api.security.principal.GroupPrincipal#isMember(Principal)}</code>
      * evaluates to <code>true</code>. A principal is an indirect member of a
      * group if any of its groups (to any degree of separation) is direct member
      * of the group.

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/simple/SimpleLoginModule.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/simple/SimpleLoginModule.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/simple/SimpleLoginModule.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/simple/SimpleLoginModule.java Mon Mar 19 20:51:16 2018
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.core.secur
 
 import org.apache.jackrabbit.core.security.authentication.AbstractLoginModule;
 import org.apache.jackrabbit.core.security.authentication.Authentication;
+import org.apache.jackrabbit.core.security.principal.GroupPrincipals;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -28,7 +29,6 @@ import javax.security.auth.Subject;
 import javax.security.auth.callback.CallbackHandler;
 import javax.security.auth.login.LoginException;
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.Map;
 
 /**
@@ -52,7 +52,7 @@ public class SimpleLoginModule extends A
      */
     @Override
     protected boolean impersonate(Principal principal, Credentials credentials) throws RepositoryException, LoginException {
-        if (principal instanceof Group) {
+        if (GroupPrincipals.isGroup(principal)) {
             return false;
         }
         Subject impersSubject = getImpersonatorSubject(credentials);
@@ -64,7 +64,7 @@ public class SimpleLoginModule extends A
      */
     @Override
     protected Authentication getAuthentication(Principal principal, Credentials creds) throws RepositoryException {
-        if (principal instanceof Group) {
+        if (GroupPrincipals.isGroup(principal)) {
             return null;
         }
         return new Authentication() {
@@ -93,7 +93,7 @@ public class SimpleLoginModule extends A
     protected Principal getPrincipal(Credentials credentials) {
         String userId = getUserID(credentials);
         Principal principal = principalProvider.getPrincipal(userId);
-        if (principal == null || principal instanceof Group) {
+        if (principal == null || GroupPrincipals.isGroup(principal)) {
             // no matching user principal
             return null;
         } else {

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/simple/SimpleSecurityManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/simple/SimpleSecurityManager.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/simple/SimpleSecurityManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/simple/SimpleSecurityManager.java Mon Mar 19 20:51:16 2018
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.core.security.simple;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -56,6 +55,7 @@ import org.apache.jackrabbit.core.securi
 import org.apache.jackrabbit.core.security.authorization.WorkspaceAccessManager;
 import org.apache.jackrabbit.core.security.principal.AdminPrincipal;
 import org.apache.jackrabbit.core.security.principal.EveryonePrincipal;
+import org.apache.jackrabbit.core.security.principal.GroupPrincipals;
 import org.apache.jackrabbit.core.security.principal.PrincipalIteratorAdapter;
 import org.apache.jackrabbit.core.security.principal.PrincipalManagerImpl;
 import org.apache.jackrabbit.core.security.principal.PrincipalProvider;
@@ -272,7 +272,7 @@ public class SimpleSecurityManager imple
             // are the same (not totally correct) and thus return the name
             // of the first non-group principal.
             for (Principal p : subject.getPrincipals()) {
-                if (!(p instanceof Group)) {
+                if (!GroupPrincipals.isGroup(p)) {
                     uid = p.getName();
                     break;
                 }
@@ -338,8 +338,8 @@ public class SimpleSecurityManager imple
             Principal p = getPrincipal(simpleFilter);
             if (p == null) {
                 return PrincipalIteratorAdapter.EMPTY;
-            } else if (p instanceof Group && searchType == PrincipalManager.SEARCH_TYPE_NOT_GROUP ||
-                       !(p instanceof Group) && searchType == PrincipalManager.SEARCH_TYPE_GROUP) {
+            } else if (GroupPrincipals.isGroup(p) && searchType == PrincipalManager.SEARCH_TYPE_NOT_GROUP ||
+                       !GroupPrincipals.isGroup(p) && searchType == PrincipalManager.SEARCH_TYPE_GROUP) {
                 return PrincipalIteratorAdapter.EMPTY;
             } else {
                 return new PrincipalIteratorAdapter(Collections.singletonList(p));

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java Mon Mar 19 20:51:16 2018
@@ -38,6 +38,7 @@ import javax.jcr.RepositoryException;
 import javax.jcr.UnsupportedRepositoryOperationException;
 import javax.jcr.Value;
 
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.UserManager;
@@ -290,7 +291,7 @@ class GroupImpl extends AuthorizableImpl
     /**
      * Principal Implementation
      */
-    private class NodeBasedGroup extends NodeBasedPrincipal implements java.security.acl.Group {
+    private class NodeBasedGroup extends NodeBasedPrincipal implements java.security.acl.Group, GroupPrincipal {
 
         private NodeBasedGroup(String name) {
             super(name);
@@ -308,10 +309,21 @@ class GroupImpl extends AuthorizableImpl
         }
 
         /**
+         * @return Always <code>false</code>. Group membership must be edited
+         *         using the enclosing <code>GroupImpl</code> object.
+         * @see java.security.acl.Group#isMember(Principal)
+         */
+        public boolean removeMember(Principal user) {
+            return false;
+        }
+
+        //----------------------------------------------------------< GroupPrincipal >---
+
+        /**
          * Returns true, if the given <code>Principal</code> is represented by
          * a Authorizable, that is a member of the underlying UserGroup.
          *
-         * @see java.security.acl.Group#isMember(Principal)
+         * @see org.apache.jackrabbit.api.security.principal.GroupPrincipal#isMember(Principal)
          */
         public boolean isMember(Principal member) {
             // shortcut for everyone group -> avoid collecting all members
@@ -329,19 +341,10 @@ class GroupImpl extends AuthorizableImpl
         }
 
         /**
-         * @return Always <code>false</code>. Group membership must be edited
-         *         using the enclosing <code>GroupImpl</code> object.
-         * @see java.security.acl.Group#isMember(Principal)
-         */
-        public boolean removeMember(Principal user) {
-            return false;
-        }
-
-        /**
          * Return all principals that refer to every member of the underlying
          * user group.
          *
-         * @see java.security.acl.Group#members()
+         * @see org.apache.jackrabbit.api.security.principal.GroupPrincipal#members()
          */
         public Enumeration<? extends Principal> members() {
             return Collections.enumeration(getMembers());

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/ImpersonationImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/ImpersonationImpl.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/ImpersonationImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/ImpersonationImpl.java Mon Mar 19 20:51:16 2018
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.core.security.user;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -31,6 +30,7 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.api.security.user.Impersonation;
 import org.apache.jackrabbit.core.NodeImpl;
 import org.apache.jackrabbit.core.PropertyImpl;
+import org.apache.jackrabbit.core.security.principal.GroupPrincipals;
 import org.apache.jackrabbit.core.security.principal.PrincipalImpl;
 import org.apache.jackrabbit.core.security.principal.PrincipalIteratorAdapter;
 import org.apache.jackrabbit.value.StringValue;
@@ -145,7 +145,7 @@ class ImpersonationImpl implements Imper
         if (!allows) {
             // check if subject belongs to administrator user
             for (Principal p : subject.getPrincipals()) {
-                if (p instanceof Group) {
+                if (GroupPrincipals.isGroup(p)) {
                     continue;
                 }
                 Authorizable a = userManager.getAuthorizable(p);

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserAccessControlProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserAccessControlProvider.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserAccessControlProvider.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserAccessControlProvider.java Mon Mar 19 20:51:16 2018
@@ -37,6 +37,7 @@ import org.apache.jackrabbit.core.securi
 import org.apache.jackrabbit.core.security.authorization.PrivilegeBits;
 import org.apache.jackrabbit.core.security.authorization.PrivilegeManagerImpl;
 import org.apache.jackrabbit.core.security.authorization.PrivilegeRegistry;
+import org.apache.jackrabbit.core.security.principal.GroupPrincipals;
 import org.apache.jackrabbit.core.security.principal.PrincipalImpl;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.Path;
@@ -54,7 +55,6 @@ import javax.jcr.security.AccessControlP
 import javax.jcr.security.Privilege;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
@@ -271,7 +271,7 @@ public class UserAccessControlProvider e
         try {
             UserManager uMgr = session.getUserManager();
             for (Principal p : principals) {
-                if (!(p instanceof Group) && p instanceof ItemBasedPrincipal
+                if (!(GroupPrincipals.isGroup(p)) && p instanceof ItemBasedPrincipal
                         && uMgr.getAuthorizable(p) != null) {
                     return (ItemBasedPrincipal) p;
                 }

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/principal/PrincipalManagerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/principal/PrincipalManagerTest.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/principal/PrincipalManagerTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/principal/PrincipalManagerTest.java Mon Mar 19 20:51:16 2018
@@ -24,7 +24,6 @@ import org.apache.jackrabbit.test.NotExe
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.Set;
@@ -35,7 +34,7 @@ import java.util.Set;
 public class PrincipalManagerTest extends AbstractJCRTest {
 
     private PrincipalManager principalMgr;
-    private Group everyone;
+    private GroupPrincipal everyone;
 
     @Override
     protected void setUp() throws Exception {
@@ -45,7 +44,7 @@ public class PrincipalManagerTest extend
             throw new NotExecutableException();
         }
         principalMgr = ((JackrabbitSession) superuser).getPrincipalManager();
-        everyone = (Group) principalMgr.getEveryone();
+        everyone = (GroupPrincipal) principalMgr.getEveryone();
     }
 
     private static Principal[] getPrincipals(Session session) {
@@ -55,7 +54,7 @@ public class PrincipalManagerTest extend
     }
 
     private static boolean isGroup(Principal p) {
-        return p instanceof java.security.acl.Group;
+        return p instanceof GroupPrincipal;
     }
 
     public void testGetEveryone() {
@@ -145,7 +144,7 @@ public class PrincipalManagerTest extend
         while (it.hasNext()) {
             Principal p = it.nextPrincipal();
             if (isGroup(p) && !p.equals(principalMgr.getEveryone())) {
-                Enumeration<? extends Principal> en = ((java.security.acl.Group) p).members();
+                Enumeration<? extends Principal> en = ((GroupPrincipal) p).members();
                 while (en.hasMoreElements()) {
                     Principal memb = en.nextElement();
                     assertTrue(principalMgr.hasPrincipal(memb.getName()));
@@ -198,7 +197,7 @@ public class PrincipalManagerTest extend
 
             assertTrue(isGroup(p));
 
-            Enumeration<? extends Principal> members = ((java.security.acl.Group) p).members();
+            Enumeration<? extends Principal> members = ((GroupPrincipal) p).members();
             while (members.hasMoreElements()) {
                 Principal memb = members.nextElement();
 

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java Mon Mar 19 20:51:16 2018
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.api.security.user;
 
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.test.NotExecutableException;
 
 import javax.jcr.RepositoryException;
@@ -417,8 +418,8 @@ public class GroupTest extends AbstractU
             newGroup2.addMember(auth);
             save(superuser);
 
-            java.security.acl.Group ngPrincipal = (java.security.acl.Group) newGroup.getPrincipal();
-            java.security.acl.Group ng2Principal = (java.security.acl.Group) newGroup2.getPrincipal();
+            GroupPrincipal ngPrincipal = (GroupPrincipal) newGroup.getPrincipal();
+            GroupPrincipal ng2Principal = (GroupPrincipal) newGroup2.getPrincipal();
 
             assertFalse(ng2Principal.isMember(ngPrincipal));
 

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NodeImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NodeImplTest.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NodeImplTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NodeImplTest.java Mon Mar 19 20:51:16 2018
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.core;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.Calendar;
 
 import javax.jcr.ItemExistsException;
@@ -35,6 +34,7 @@ import javax.jcr.security.Privilege;
 
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
 import org.apache.jackrabbit.commons.JcrUtils;
+import org.apache.jackrabbit.core.security.principal.GroupPrincipals;
 import org.apache.jackrabbit.test.AbstractJCRTest;
 import org.apache.jackrabbit.test.NotExecutableException;
 import org.apache.jackrabbit.test.RepositoryHelper;
@@ -89,7 +89,7 @@ public class NodeImplTest extends Abstra
         SessionImpl s = (SessionImpl) helper.getReadOnlySession();
         try {
             for (Principal p : s.getSubject().getPrincipals()) {
-                if (!(p instanceof Group)) {
+                if (!GroupPrincipals.isGroup(p)) {
                     return p;
                 }
             }

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/ACLTemplateTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/ACLTemplateTest.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/ACLTemplateTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/ACLTemplateTest.java Mon Mar 19 20:51:16 2018
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.core.secur
 import org.apache.jackrabbit.api.JackrabbitSession;
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalIterator;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.apache.jackrabbit.core.SessionImpl;
@@ -34,12 +35,9 @@ import javax.jcr.Value;
 import javax.jcr.security.AccessControlEntry;
 import javax.jcr.security.Privilege;
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.Map;
-import java.util.Set;
 
 /**
  * <code>ACLTemplateTest</code>...
@@ -145,7 +143,7 @@ public class ACLTemplateTest extends Abs
         Principal grPrincipal = null;
         PrincipalIterator it = pMgr.findPrincipals("", PrincipalManager.SEARCH_TYPE_GROUP);
         while (it.hasNext()) {
-            Group gr = (Group) it.nextPrincipal();
+            GroupPrincipal gr = (GroupPrincipal) it.nextPrincipal();
             if (!everyone.equals(gr)) {
                 grPrincipal = gr;
             }
@@ -168,7 +166,7 @@ public class ACLTemplateTest extends Abs
     public void testSetEntryForGroupPrincipal() throws RepositoryException, NotExecutableException {
         JackrabbitAccessControlList pt = createEmptyTemplate(getTestPath());
         Privilege[] privs = privilegesFromName(Privilege.JCR_READ);
-        Group grPrincipal = (Group) principalMgr.getEveryone();
+        GroupPrincipal grPrincipal = (GroupPrincipal) principalMgr.getEveryone();
 
         // adding allow-entry must succeed
         assertTrue(pt.addAccessControlEntry(grPrincipal, privs));

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/principal/PrincipalManagerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/principal/PrincipalManagerTest.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/principal/PrincipalManagerTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/principal/PrincipalManagerTest.java Mon Mar 19 20:51:16 2018
@@ -17,12 +17,12 @@
 package org.apache.jackrabbit.core.security.principal;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.Properties;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.JackrabbitPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalIterator;
 import org.apache.jackrabbit.test.AbstractJCRTest;
@@ -36,7 +36,7 @@ import org.mockito.Mockito;
 public class PrincipalManagerTest extends AbstractJCRTest {
 
     private static final String TESTGROUP_NAME = "org.apache.jackrabbit.core.security.principal.PrincipalManagerTest.testgroup";
-    private static final Group TESTGROUP = Mockito.mock(Group.class);
+    private static final GroupPrincipal TESTGROUP = Mockito.mock(GroupPrincipal.class);
 
     private static class CustomPrincipalProvider extends AbstractPrincipalProvider {
 

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/DefaultPrincipalProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/DefaultPrincipalProviderTest.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/DefaultPrincipalProviderTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/DefaultPrincipalProviderTest.java Mon Mar 19 20:51:16 2018
@@ -22,6 +22,7 @@ import java.util.Set;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalIterator;
 import org.apache.jackrabbit.api.security.user.AbstractUserTest;
 import org.apache.jackrabbit.api.security.user.Authorizable;
@@ -163,7 +164,7 @@ public class DefaultPrincipalProviderTes
         try {
             Principal p = principalProvider.getPrincipal(testName);
             assertNotNull(p);
-            assertTrue(p instanceof java.security.acl.Group);
+            assertTrue(p instanceof GroupPrincipal);
         } finally {
             a.remove();
             save(superuser);
@@ -175,7 +176,7 @@ public class DefaultPrincipalProviderTes
         try {
             Principal p = principalProvider.getPrincipal(testName);
             assertNotNull(p);
-            assertFalse(p instanceof java.security.acl.Group);
+            assertFalse(p instanceof GroupPrincipal);
         } finally {
             a.remove();
             save(superuser);
@@ -245,15 +246,15 @@ public class DefaultPrincipalProviderTes
             save(superuser);
 
             Principal groupPrincipal = principalProvider.getPrincipal(g.getPrincipal().getName());
-            assertTrue(groupPrincipal instanceof java.security.acl.Group);
-            assertTrue(((java.security.acl.Group) groupPrincipal).isMember(u.getPrincipal()));
+            assertTrue(groupPrincipal instanceof GroupPrincipal);
+            assertTrue(((GroupPrincipal) groupPrincipal).isMember(u.getPrincipal()));
 
             // remove the user from the group and assert the user is no longer a member of the group
             g.removeMember(u);
             save(superuser);
 
             groupPrincipal = principalProvider.getPrincipal(g.getPrincipal().getName());
-            assertFalse(((java.security.acl.Group) groupPrincipal).isMember(u.getPrincipal()));
+            assertFalse(((GroupPrincipal) groupPrincipal).isMember(u.getPrincipal()));
         } finally {
             if (null != g) { g.remove(); }
             if (null != u) { u.remove(); }

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/GroupImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/GroupImplTest.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/GroupImplTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/GroupImplTest.java Mon Mar 19 20:51:16 2018
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.core.security.user;
 
 import org.apache.jackrabbit.api.JackrabbitSession;
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.ItemBasedPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.apache.jackrabbit.api.security.user.AbstractUserTest;
@@ -109,7 +110,7 @@ public class GroupImplTest extends Abstr
             g = userMgr.createGroup(EveryonePrincipal.NAME);
             save(superuser);
 
-            java.security.acl.Group principal = (java.security.acl.Group) g.getPrincipal();
+            GroupPrincipal principal = (GroupPrincipal) g.getPrincipal();
             assertTrue(principal.isMember(new Principal() {
 
                 public String getName() {

Modified: jackrabbit/trunk/jackrabbit-jcr-rmi/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-rmi/pom.xml?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-rmi/pom.xml (original)
+++ jackrabbit/trunk/jackrabbit-jcr-rmi/pom.xml Mon Mar 19 20:51:16 2018
@@ -53,7 +53,7 @@
             <Bundle-Category>jcr,jackrabbit</Bundle-Category>
             <Bundle-DocURL>http://jackrabbit.apache.org/</Bundle-DocURL>
             <Export-Package>
-              org.apache.jackrabbit.rmi.*;version=3.0.0
+              org.apache.jackrabbit.rmi.*;version=3.1.0
             </Export-Package>
             <!-- optional resolution XA -->
             <Import-Package>

Modified: jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/client/LocalAdapterFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/client/LocalAdapterFactory.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/client/LocalAdapterFactory.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/client/LocalAdapterFactory.java Mon Mar 19 20:51:16 2018
@@ -403,7 +403,7 @@ public interface LocalAdapterFactory {
      * Factory method for creating a local adapter for a remote principal.
      * <p>
      * If <code>remote</code> is a {@link RemoteGroup} the
-     * principal returned implements the <code>java.security.acl.Group</code>
+     * principal returned implements the <code>org.apache.jackrabbit.api.security.principal.GroupPrincipal</code>
      * interface.
      *
      * @param remote principal
@@ -418,7 +418,7 @@ public interface LocalAdapterFactory {
      * Each entry in the <code>remote</code> iterator which is a
      * {@link RemoteGroup} will be
      * provided as a principal implementing the
-     * <code>java.security.acl.Group</code> interface.
+     * <code>org.apache.jackrabbit.api.security.principal.GroupPrincipal</code> interface.
      *
      * @param remote remote principal iterator
      * @return local principal iterator

Modified: jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/remote/principal/RemoteGroup.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/remote/principal/RemoteGroup.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/remote/principal/RemoteGroup.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/remote/principal/RemoteGroup.java Mon Mar 19 20:51:16 2018
@@ -22,7 +22,7 @@ import java.rmi.RemoteException;
 import org.apache.jackrabbit.rmi.remote.RemoteIterator;
 
 /**
- * Remote version of the JCR {@link java.security.acl.Group Group} interface.
+ * Remote version of the JCR {@link org.apache.jackrabbit.api.security.principal.GroupPrincipal GroupPrincipal} interface.
  * Used by the {@link org.apache.jackrabbit.rmi.server.principal.ServerGroup
  * ServerGroup} and
  * {@link org.apache.jackrabbit.rmi.client.principal.ClientGroup ClientGroup}
@@ -36,19 +36,19 @@ import org.apache.jackrabbit.rmi.remote.
  * returned as remote references to the corresponding remote interface. RMI
  * errors are signaled with RemoteExceptions.
  *
- * @see java.security.acl.Group
+ * @see org.apache.jackrabbit.api.security.principal.GroupPrincipal
  * @see org.apache.jackrabbit.rmi.client.principal.ClientGroup
  * @see org.apache.jackrabbit.rmi.server.principal.ServerGroup
  */
 public interface RemoteGroup extends RemotePrincipal {
 
     /**
-     * @see java.security.acl.Group#isMember(java.security.Principal)
+     * @see org.apache.jackrabbit.api.security.principal.GroupPrincipal#isMember(java.security.Principal)
      */
     boolean isMember(String member) throws RemoteException;
 
     /**
-     * @see java.security.acl.Group#members()
+     * @see org.apache.jackrabbit.api.security.principal.GroupPrincipal#members()
      */
     RemoteIterator members() throws RemoteException;
 

Modified: jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/server/ServerAdapterFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/server/ServerAdapterFactory.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/server/ServerAdapterFactory.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/server/ServerAdapterFactory.java Mon Mar 19 20:51:16 2018
@@ -18,7 +18,6 @@ package org.apache.jackrabbit.rmi.server
 
 import java.rmi.RemoteException;
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -514,8 +513,8 @@ public class ServerAdapterFactory implem
     }
 
     public RemotePrincipal getRemotePrincipal(final Principal principal) throws RemoteException {
-        if (principal instanceof Group) {
-            return new ServerGroup((Group) principal, this);
+        if (ServerGroup.isGroup(principal)) {
+            return new ServerGroup(principal, this);
         }
 
         return new ServerPrincipal(principal, this);

Modified: jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/server/principal/ServerGroup.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/server/principal/ServerGroup.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/server/principal/ServerGroup.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/server/principal/ServerGroup.java Mon Mar 19 20:51:16 2018
@@ -21,9 +21,11 @@ package org.apache.jackrabbit.rmi.server
 import java.rmi.RemoteException;
 import java.security.Principal;
 import java.security.acl.Group;
+import java.util.Collections;
 import java.util.Enumeration;
 import java.util.Iterator;
 
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.rmi.remote.RemoteIterator;
 import org.apache.jackrabbit.rmi.remote.principal.RemoteGroup;
 import org.apache.jackrabbit.rmi.server.RemoteAdapterFactory;
@@ -35,13 +37,18 @@ public class ServerGroup extends ServerP
         super(principal, factory);
     }
 
+    public ServerGroup(final Principal principal, final RemoteAdapterFactory factory)
+            throws RemoteException {
+        super(principal, factory);
+    }
+
     public boolean isMember(String member) {
-        return isMember(member, (Group) getPrincipal());
+        return isMember(member, getPrincipal());
     }
 
     public RemoteIterator members() throws RemoteException {
         Iterator<Principal> members = new Iterator<Principal>() {
-            final Enumeration<? extends Principal> base = ((Group) getPrincipal()).members();
+            final Enumeration<? extends Principal> base =  members(getPrincipal());
 
             public boolean hasNext() {
                 return base.hasMoreElements();
@@ -58,19 +65,32 @@ public class ServerGroup extends ServerP
         return getFactory().getRemotePrincipalIterator(members);
     }
 
-    private static boolean isMember(final String memberName, final Group group) {
-        Enumeration<? extends Principal> pe = group.members();
+    private static boolean isMember(final String memberName, final Principal group) {
+        Enumeration<? extends Principal> pe = members(group);
         while (pe.hasMoreElements()) {
             Principal p = pe.nextElement();
             if (memberName.equals(p.getName())) {
                 return true;
             }
 
-            if ((p instanceof Group) && isMember(memberName, (Group) p)) {
+            if (isGroup(p) && isMember(memberName, p)) {
                 return true;
             }
         }
-
         return false;
     }
+
+    public static boolean isGroup(Principal principal) {
+        return principal instanceof Group || principal instanceof GroupPrincipal;
+    }
+
+    private static Enumeration<? extends Principal> members(Principal principal) {
+        if (principal instanceof Group) {
+            return ((Group) principal).members();
+        }
+        if (principal instanceof GroupPrincipal) {
+            return ((GroupPrincipal) principal).members();
+        }
+        return Collections.emptyEnumeration();
+    }
 }
\ No newline at end of file

Modified: jackrabbit/trunk/jackrabbit-jcr-rmi/src/test/java/org/apache/jackrabbit/rmi/RepositoryStubImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-rmi/src/test/java/org/apache/jackrabbit/rmi/RepositoryStubImpl.java?rev=1827242&r1=1827241&r2=1827242&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-rmi/src/test/java/org/apache/jackrabbit/rmi/RepositoryStubImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-rmi/src/test/java/org/apache/jackrabbit/rmi/RepositoryStubImpl.java Mon Mar 19 20:51:16 2018
@@ -22,7 +22,6 @@ import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.rmi.server.RemoteObject;
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.Properties;
 
 import javax.jcr.Repository;
@@ -37,6 +36,7 @@ import org.apache.jackrabbit.rmi.client.
 import org.apache.jackrabbit.rmi.remote.RemoteRepository;
 import org.apache.jackrabbit.rmi.server.RemoteAdapterFactory;
 import org.apache.jackrabbit.rmi.server.ServerAdapterFactory;
+import org.apache.jackrabbit.rmi.server.principal.ServerGroup;
 import org.apache.jackrabbit.test.RepositoryStubException;
 
 public class RepositoryStubImpl extends JackrabbitRepositoryStub {
@@ -89,7 +89,7 @@ public class RepositoryStubImpl extends
                 new SimpleCredentials("admin", "admin".toCharArray()));
         try {
             for (Principal principal : session.getSubject().getPrincipals()) {
-                if (!(principal instanceof Group)) {
+                if (!ServerGroup.isGroup(principal)) {
                     return principal;
                 }
             }