Author: baedke
Date: Fri Apr 21 15:55:39 2017
New Revision: 1792229

URL: http://svn.apache.org/viewvc?rev=1792229&view=rev
Log:
OAK-6118: XPathConditionVisitor wrongly escapes string values for 
ImpersonationCondition

Removed the escaping, added test case.

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/XPathConditionVisitor.java
    
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserQueryTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/XPathConditionVisitor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/XPathConditionVisitor.java?rev=1792229&r1=1792228&r2=1792229&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/XPathConditionVisitor.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/XPathConditionVisitor.java
 Fri Apr 21 15:55:39 2017
@@ -111,7 +111,7 @@ class XPathConditionVisitor implements C
             statement.append('@')
                     
.append(QueryUtil.escapeForQuery(UserConstants.REP_IMPERSONATORS, 
namePathMapper))
                     .append("='")
-                    .append(QueryUtil.escapeForQuery(condition.getName()))
+                    .append(condition.getName())
                     .append('\'');
         }
     }

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserQueryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserQueryTest.java?rev=1792229&r1=1792228&r2=1792229&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserQueryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserQueryTest.java
 Fri Apr 21 15:55:39 2017
@@ -112,6 +112,7 @@ public class UserQueryTest extends Abstr
         addMembers(insects, ant, bee, fly);
 
         User jackrabbit = createUser("jackrabbit", "carrots", 2500, true);
+        User backslash = createUser("foo\\bar", "characters", 2500, false);
         User deer = createUser("deer", "leaves", 120000, true);
         User opossum = createUser("opossum", "fruit", 1200, true);
         kangaroo = createUser("kangaroo", "grass", 90000, true);
@@ -160,6 +161,7 @@ public class UserQueryTest extends Abstr
         setProperty("continent", vf.createValue("America"), opossum);
 
         
elephant.getImpersonation().grantImpersonation(jackrabbit.getPrincipal());
+        
elephant.getImpersonation().grantImpersonation(backslash.getPrincipal());
 
         authorizables.addAll(users);
         authorizables.addAll(groups);
@@ -664,6 +666,20 @@ public class UserQueryTest extends Abstr
             }
         });
 
+        Iterator<User> expected = Iterators.singletonIterator(elephant);
+        assertTrue(result.hasNext());
+        assertSameElements(expected, result);
+    }
+
+    @Test
+    public void testImpersonationWithBackslash() throws RepositoryException {
+        Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() {
+            public <T> void build(QueryBuilder<T> builder) {
+                builder.setCondition(builder.
+                        impersonates("foo\\bar"));
+            }
+        });
+
         Iterator<User> expected = Iterators.singletonIterator(elephant);
         assertTrue(result.hasNext());
         assertSameElements(expected, result);


Reply via email to