You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by al...@apache.org on 2013/05/07 10:46:56 UTC

svn commit: r1479812 - in /jackrabbit/branches/2.6: ./ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/DefaultPrincipalProviderTest.java

Author: alexparvulescu
Date: Tue May  7 08:46:55 2013
New Revision: 1479812

URL: http://svn.apache.org/r1479812
Log:
JCR-3552 Principal associated with Group does not update members (backport to 2.6)

Modified:
    jackrabbit/branches/2.6/   (props changed)
    jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java
    jackrabbit/branches/2.6/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/DefaultPrincipalProviderTest.java

Propchange: jackrabbit/branches/2.6/
------------------------------------------------------------------------------
  Merged /jackrabbit/trunk:r1462205

Modified: jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java?rev=1479812&r1=1479811&r2=1479812&view=diff
==============================================================================
--- jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java (original)
+++ jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java Tue May  7 08:46:55 2013
@@ -16,6 +16,27 @@
  */
 package org.apache.jackrabbit.core.security.user;
 
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import javax.jcr.ItemNotFoundException;
+import javax.jcr.Node;
+import javax.jcr.Property;
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.UserManager;
@@ -35,28 +56,6 @@ import org.apache.jackrabbit.util.Text;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
 /**
  * GroupImpl...
  */
@@ -282,8 +281,6 @@ class GroupImpl extends AuthorizableImpl
      */
     private class NodeBasedGroup extends NodeBasedPrincipal implements java.security.acl.Group {
 
-        private Set<Principal> members;
-
         private NodeBasedGroup(String name) {
             super(name);
         }
@@ -359,16 +356,14 @@ class GroupImpl extends AuthorizableImpl
          * @return the members of this group principal.
          */
         private Collection<Principal> getMembers() {
-            if (members == null) {
-                members = new HashSet<Principal>();
-                try {
-                    for (Iterator<Authorizable> it = GroupImpl.this.getMembers(); it.hasNext(); ) {
-                        members.add(it.next().getPrincipal());
-                    }
-                } catch (RepositoryException e) {
-                    // should not occur.
-                    log.error("Unable to retrieve Group members.");
+            Set<Principal> members = new HashSet<Principal>();
+            try {
+                for (Iterator<Authorizable> it = GroupImpl.this.getMembers(); it.hasNext(); ) {
+                    members.add(it.next().getPrincipal());
                 }
+            } catch (RepositoryException e) {
+                // should not occur.
+                log.error("Unable to retrieve Group members.");
             }
             return members;
         }

Modified: jackrabbit/branches/2.6/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/DefaultPrincipalProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.6/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/DefaultPrincipalProviderTest.java?rev=1479812&r1=1479811&r2=1479812&view=diff
==============================================================================
--- jackrabbit/branches/2.6/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/DefaultPrincipalProviderTest.java (original)
+++ jackrabbit/branches/2.6/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/DefaultPrincipalProviderTest.java Tue May  7 08:46:55 2013
@@ -16,6 +16,12 @@
  */
 package org.apache.jackrabbit.core.security.user;
 
+import java.security.Principal;
+import java.util.Properties;
+import java.util.Set;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
 import org.apache.jackrabbit.api.security.principal.PrincipalIterator;
 import org.apache.jackrabbit.api.security.user.AbstractUserTest;
 import org.apache.jackrabbit.api.security.user.Authorizable;
@@ -27,12 +33,6 @@ import org.apache.jackrabbit.core.securi
 import org.apache.jackrabbit.core.security.principal.PrincipalProvider;
 import org.apache.jackrabbit.test.NotExecutableException;
 
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import java.security.Principal;
-import java.util.Properties;
-import java.util.Set;
-
 /**
  * <code>DefaultPrincipalProviderTest</code>...
  */
@@ -227,4 +227,37 @@ public class DefaultPrincipalProviderTes
             }
         }
     }
+
+    /**
+     * Test for: Principal assiocated with Group does not update members
+     * @see <a href=https://issues.apache.org/jira/browse/JCR-3552>JCR-3552</a>
+     */
+    public void testGroupMembership() throws Exception {
+        Group g = null;
+        User u = null;
+        Principal up = getTestPrincipal();
+        try {
+            // create a group and user, add the user to the group and assert membership
+            g = userMgr.createGroup(getTestPrincipal());
+            u = userMgr.createUser(up.getName(), buildPassword(up));
+            save(superuser);
+            g.addMember(u);
+            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()));
+
+            // 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()));
+        } finally {
+            if (null != g) { g.remove(); }
+            if (null != u) { u.remove(); }
+            save(superuser);
+        }
+    }
 }
\ No newline at end of file