Author: mreutegg
Date: Wed Jun 24 15:25:01 2015
New Revision: 1687306

URL: http://svn.apache.org/r1687306
Log:
OAK-3021: UserValidator and AccessControlValidator must not process hidden nodes

Merged revision 1687301 from trunk

Modified:
    jackrabbit/oak/branches/1.2/   (props changed)
    
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidator.java
    
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserValidator.java
    
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorTest.java
    
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserValidatorTest.java

Propchange: jackrabbit/oak/branches/1.2/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Jun 24 15:25:01 2015
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672642,1672644,1672834-1672835,1673351,1673410,1673414-1673415,1673436,1673644,1673662-1673664,1673669,1673695,1673738,1673787,1673791,1674046,1674065,1674075,1674107,1674228,1674780,1674880,1675054-1675055,1675319,1675332,1675354,1675357,1675382,1675555,1675566,1675593,1676198,1676237,1676407,1676458,1676539,1676670,1676693,1676703,1676725,1677579,1677581,1677609,1677611,1677774,1677788,1677797,1677804,1677806,1677939,1677991,1678173,1678323,1678758,1678938,1678954,1679144,1679165,1679191,1679232,1679235,1679958,1679961,1680182,1680222,1680232,1680236,1680461,1680633,1680643,1680805-1680806,1680903,1681282,1681767,1681918,1682218,1682235,1682437,1682494,1682555,1682855,1682904,1683089,1683213,1683249,1683259,1683278,1683323,1683687,1684174-1684175,1684186,1684376,1684442,1684561,1684570,1684601,1684618,1684868,1685023,1685370,1685552,1685589,1685840,1685999,1686097,1686229,1686234,1686253,1686414,1686780,1686854,1686857,1686971
 ,1687053-1687055,1687198,1687220,1687239-1687240
+/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672642,1672644,1672834-1672835,1673351,1673410,1673414-1673415,1673436,1673644,1673662-1673664,1673669,1673695,1673738,1673787,1673791,1674046,1674065,1674075,1674107,1674228,1674780,1674880,1675054-1675055,1675319,1675332,1675354,1675357,1675382,1675555,1675566,1675593,1676198,1676237,1676407,1676458,1676539,1676670,1676693,1676703,1676725,1677579,1677581,1677609,1677611,1677774,1677788,1677797,1677804,1677806,1677939,1677991,1678173,1678323,1678758,1678938,1678954,1679144,1679165,1679191,1679232,1679235,1679958,1679961,1680182,1680222,1680232,1680236,1680461,1680633,1680643,1680805-1680806,1680903,1681282,1681767,1681918,1682218,1682235,1682437,1682494,1682555,1682855,1682904,1683089,1683213,1683249,1683259,1683278,1683323,1683687,1684174-1684175,1684186,1684376,1684442,1684561,1684570,1684601,1684618,1684868,1685023,1685370,1685552,1685589,1685840,1685999,1686097,1686229,1686234,1686253,1686414,1686780,1686854,1686857,1686971
 ,1687053-1687055,1687198,1687220,1687239-1687240,1687301
 /jackrabbit/trunk:1345480

Modified: 
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidator.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidator.java?rev=1687306&r1=1687305&r2=1687306&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidator.java
 (original)
+++ 
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidator.java
 Wed Jun 24 15:25:01 2015
@@ -42,6 +42,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.tree.impl.TreeConstants;
 import org.apache.jackrabbit.oak.spi.commit.DefaultValidator;
 import org.apache.jackrabbit.oak.spi.commit.Validator;
+import org.apache.jackrabbit.oak.spi.commit.VisibleValidator;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.restriction.Restriction;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
@@ -122,7 +123,7 @@ class AccessControlValidator extends Def
         Tree treeAfter = checkNotNull(parentAfter.getChild(name));
 
         checkValidTree(parentAfter, treeAfter, after);
-        return new AccessControlValidator(this, treeAfter);
+        return newValidator(this, treeAfter);
     }
 
     @Override
@@ -130,7 +131,7 @@ class AccessControlValidator extends Def
         Tree treeAfter = checkNotNull(parentAfter.getChild(name));
 
         checkValidTree(parentAfter, treeAfter, after);
-        return new AccessControlValidator(this, treeAfter);
+        return newValidator(this, treeAfter);
     }
 
     @Override
@@ -141,6 +142,14 @@ class AccessControlValidator extends Def
 
     //------------------------------------------------------------< private 
>---
 
+    private static Validator newValidator(AccessControlValidator parent,
+                                          Tree parentAfter) {
+        return new VisibleValidator(
+                new AccessControlValidator(parent, parentAfter),
+                true,
+                true);
+    }
+
     private void checkValidTree(Tree parentAfter, Tree treeAfter, NodeState 
nodeAfter) throws CommitFailedException {
         if (isPolicy(treeAfter)) {
             checkValidPolicy(parentAfter, treeAfter, nodeAfter);

Modified: 
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserValidator.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserValidator.java?rev=1687306&r1=1687305&r2=1687306&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserValidator.java
 (original)
+++ 
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserValidator.java
 Wed Jun 24 15:25:01 2015
@@ -139,12 +139,13 @@ class UserValidator extends DefaultValid
         Tree tree = checkNotNull(parentAfter.getChild(name));
 
         validateAuthorizable(tree, UserUtil.getType(tree));
-        return new VisibleValidator(new UserValidator(null, tree, provider), 
true, true);
+        return newValidator(null, tree, provider);
     }
 
     @Override
     public Validator childNodeChanged(String name, NodeState before, NodeState 
after) throws CommitFailedException {
-        return new UserValidator(parentBefore.getChild(name), 
parentAfter.getChild(name), provider);
+        return newValidator(parentBefore.getChild(name),
+                parentAfter.getChild(name), provider);
     }
 
     @Override
@@ -158,12 +159,21 @@ class UserValidator extends DefaultValid
             }
             return null;
         } else {
-            return new VisibleValidator(new UserValidator(tree, null, 
provider), true, true);
+            return newValidator(tree, null, provider);
         }
     }
 
     //------------------------------------------------------------< private 
>---
 
+    private static Validator newValidator(Tree parentBefore,
+                                          Tree parentAfter,
+                                          UserValidatorProvider provider) {
+        return new VisibleValidator(
+                new UserValidator(parentBefore, parentAfter, provider),
+                true,
+                true);
+    }
+
     private boolean isAdminUser(@Nonnull Tree userTree) {
         if (userTree.exists() && isUser(userTree)) {
             String id = UserUtil.getAuthorizableId(userTree);

Modified: 
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorTest.java?rev=1687306&r1=1687305&r2=1687306&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorTest.java
 (original)
+++ 
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorTest.java
 Wed Jun 24 15:25:01 2015
@@ -25,15 +25,22 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.api.security.authorization.PrivilegeManager;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.commit.Validator;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AbstractAccessControlTest;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.util.NodeUtil;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -351,4 +358,67 @@ public class AccessControlValidatorTest
             assertTrue(e.isAccessControlViolation());
         }
     }
+
+    @Test
+    public void hiddenNodeAdded() throws CommitFailedException {
+        AccessControlValidatorProvider provider = new 
AccessControlValidatorProvider(getSecurityProvider());
+        MemoryNodeStore store = new MemoryNodeStore();
+        NodeState root = store.getRoot();
+        NodeBuilder builder = root.builder();
+        NodeBuilder test = builder.child("test");
+        NodeBuilder hidden = test.child(":hidden");
+
+        Validator validator = provider.getRootValidator(
+                root, builder.getNodeState(), CommitInfo.EMPTY);
+        Validator childValidator = validator.childNodeAdded(
+                "test", test.getNodeState());
+        assertNotNull(childValidator);
+
+        Validator hiddenValidator = childValidator.childNodeAdded(":hidden", 
hidden.getNodeState());
+        assertNull(hiddenValidator);
+    }
+
+    @Test
+    public void hiddenNodeChanged() throws CommitFailedException {
+        AccessControlValidatorProvider provider = new 
AccessControlValidatorProvider(getSecurityProvider());
+        MemoryNodeStore store = new MemoryNodeStore();
+        NodeBuilder builder = store.getRoot().builder();
+        builder.child("test").child(":hidden");
+        NodeState root = builder.getNodeState();
+
+        NodeBuilder test = root.builder().child("test");
+        NodeBuilder hidden = test.child(":hidden");
+        hidden.child("added");
+
+        Validator validator = provider.getRootValidator(
+                root, builder.getNodeState(), CommitInfo.EMPTY);
+        Validator childValidator = validator.childNodeChanged(
+                "test", root.getChildNode("test"), test.getNodeState());
+        assertNotNull(childValidator);
+
+        Validator hiddenValidator = childValidator.childNodeChanged(":hidden", 
root.getChildNode("test").getChildNode(":hidden"), hidden.getNodeState());
+        assertNull(hiddenValidator);
+    }
+
+    @Test
+    public void hiddenNodeDeleted() throws CommitFailedException {
+        AccessControlValidatorProvider provider = new 
AccessControlValidatorProvider(getSecurityProvider());
+        MemoryNodeStore store = new MemoryNodeStore();
+        NodeBuilder builder = store.getRoot().builder();
+        builder.child("test").child(":hidden");
+        NodeState root = builder.getNodeState();
+
+        builder = root.builder();
+        NodeBuilder test = builder.child("test");
+        test.child(":hidden").remove();
+
+        Validator validator = provider.getRootValidator(
+                root, builder.getNodeState(), CommitInfo.EMPTY);
+        Validator childValidator = validator.childNodeChanged("test", 
root.getChildNode("test"), test.getNodeState());
+        assertNotNull(childValidator);
+
+        Validator hiddenValidator = childValidator.childNodeDeleted(
+                ":hidden", root.getChildNode("test").getChildNode(":hidden"));
+        assertNull(hiddenValidator);
+    }
 }
\ No newline at end of file

Modified: 
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserValidatorTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserValidatorTest.java?rev=1687306&r1=1687305&r2=1687306&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserValidatorTest.java
 (original)
+++ 
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserValidatorTest.java
 Wed Jun 24 15:25:01 2015
@@ -34,9 +34,14 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager;
+import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.commit.Validator;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
 import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.util.NodeUtil;
 import org.apache.jackrabbit.util.Text;
 import org.junit.Before;
@@ -44,6 +49,8 @@ import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.fail;
 
 /**
@@ -375,6 +382,72 @@ public class UserValidatorTest extends A
         }
     }
 
+    @Test
+    public void hiddenNodeAdded() throws CommitFailedException {
+        UserValidatorProvider provider = new 
UserValidatorProvider(getConfig());
+        MemoryNodeStore store = new MemoryNodeStore();
+        NodeState root = store.getRoot();
+        NodeBuilder builder = root.builder();
+        NodeBuilder test = builder.child("test");
+        NodeBuilder hidden = test.child(":hidden");
+
+        Validator validator = provider.getRootValidator(
+                root, builder.getNodeState(), CommitInfo.EMPTY);
+        Validator childValidator = validator.childNodeAdded(
+                "test", test.getNodeState());
+        assertNotNull(childValidator);
+
+        Validator hiddenValidator = childValidator.childNodeAdded(
+                ":hidden", hidden.getNodeState());
+        assertNull(hiddenValidator);
+    }
+
+    @Test
+    public void hiddenNodeChanged() throws CommitFailedException {
+        UserValidatorProvider provider = new 
UserValidatorProvider(getConfig());
+        MemoryNodeStore store = new MemoryNodeStore();
+        NodeBuilder builder = store.getRoot().builder();
+        builder.child("test").child(":hidden");
+        NodeState root = builder.getNodeState();
+
+        NodeBuilder test = root.builder().child("test");
+        NodeBuilder hidden = test.child(":hidden");
+        hidden.child("added");
+
+        Validator validator = provider.getRootValidator(
+                root, builder.getNodeState(), CommitInfo.EMPTY);
+        Validator childValidator = validator.childNodeChanged(
+                "test", root.getChildNode("test"), test.getNodeState());
+        assertNotNull(childValidator);
+
+        Validator hiddenValidator = childValidator.childNodeChanged(
+                ":hidden", root.getChildNode("test").getChildNode(":hidden"), 
hidden.getNodeState());
+        assertNull(hiddenValidator);
+    }
+
+    @Test
+    public void hiddenNodeDeleted() throws CommitFailedException {
+        UserValidatorProvider provider = new 
UserValidatorProvider(getConfig());
+        MemoryNodeStore store = new MemoryNodeStore();
+        NodeBuilder builder = store.getRoot().builder();
+        builder.child("test").child(":hidden");
+        NodeState root = builder.getNodeState();
+
+        builder = root.builder();
+        NodeBuilder test = builder.child("test");
+        test.child(":hidden").remove();
+
+        Validator validator = provider.getRootValidator(
+                root, builder.getNodeState(), CommitInfo.EMPTY);
+        Validator childValidator = validator.childNodeChanged(
+                "test", root.getChildNode("test"), test.getNodeState());
+        assertNotNull(childValidator);
+
+        Validator hiddenValidator = childValidator.childNodeDeleted(
+                ":hidden", root.getChildNode("test").getChildNode(":hidden"));
+        assertNull(hiddenValidator);
+    }
+
     private ConfigurationParameters getConfig() {
         return getUserConfiguration().getParameters();
     }


Reply via email to