Author: angela
Date: Tue Nov 24 09:04:29 2015
New Revision: 1716079

URL: http://svn.apache.org/viewvc?rev=1716079&view=rev
Log:
OAK-3671 : Incomplete cleanup of entries in ACL

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACL.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACLTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACL.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACL.java?rev=1716079&r1=1716078&r2=1716079&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACL.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACL.java
 Tue Nov 24 09:04:29 2015
@@ -194,6 +194,7 @@ abstract class ACL extends AbstractAcces
             }
         }));
 
+        boolean addEntry = true;
         for (ACE existing : subList) {
             PrivilegeBits existingBits = 
PrivilegeBits.getInstance(existing.getPrivilegeBits());
             PrivilegeBits entryBits = entry.getPrivilegeBits();
@@ -208,7 +209,7 @@ abstract class ACL extends AbstractAcces
                         int index = entries.indexOf(existing);
                         entries.remove(existing);
                         entries.add(index, createACE(existing, existingBits));
-                        return true;
+                        addEntry = false;
                     }
                 } else {
                     // existing is complementary entry -> clean up redundant
@@ -227,7 +228,9 @@ abstract class ACL extends AbstractAcces
             }
         }
         // finally add the new entry at the end of the list
-        entries.add(entry);
+        if (addEntry) {
+            entries.add(entry);
+        }
         return true;
     }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACLTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACLTest.java?rev=1716079&r1=1716078&r2=1716079&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACLTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACLTest.java
 Tue Nov 24 09:04:29 2015
@@ -452,6 +452,19 @@ public class ACLTest extends AbstractAcc
     }
 
     @Test
+    public void testComplementaryEntry3() throws Exception {
+        Privilege[] readPriv = privilegesFromNames(JCR_READ);
+
+        acl.addAccessControlEntry(testPrincipal, 
privilegesFromNames(JCR_WRITE));
+        acl.addEntry(testPrincipal, readPriv, false);
+
+        acl.addAccessControlEntry(testPrincipal, readPriv);
+
+        List<? extends JackrabbitAccessControlEntry> entries = 
acl.getEntries();
+        assertEquals(1, entries.size());
+    }
+
+    @Test
     public void testMultiplePrincipals() throws Exception {
         Principal everyone = principalManager.getEveryone();
         Privilege[] privs = privilegesFromNames(JCR_READ);


Reply via email to