You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by an...@apache.org on 2019/06/20 14:25:09 UTC
svn commit: r1861689 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/security/user/query/
test/java/org/apache/jackrabbit/oak/security/user/query/
Author: angela
Date: Thu Jun 20 14:25:08 2019
New Revision: 1861689
URL: http://svn.apache.org/viewvc?rev=1861689&view=rev
Log:
OAK-8418 : User query fails if root tree is the search root
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/QueryUtil.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/QueryUtilTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManagerTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/QueryUtil.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/QueryUtil.java?rev=1861689&r1=1861688&r2=1861689&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/QueryUtil.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/QueryUtil.java Thu Jun 20 14:25:08 2019
@@ -21,6 +21,7 @@ import javax.jcr.RepositoryException;
import javax.jcr.Value;
import org.apache.jackrabbit.api.security.user.QueryBuilder;
+import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.commons.QueryUtils;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.spi.query.QueryConstants;
@@ -48,7 +49,11 @@ public final class QueryUtil {
@NotNull
public static String getSearchRoot(AuthorizableType type, ConfigurationParameters config) {
String path = UserUtil.getAuthorizableRootPath(config, type);
- return QueryConstants.SEARCH_ROOT_PATH + path;
+ if (PathUtils.denotesRoot(path)) {
+ return QueryConstants.SEARCH_ROOT_PATH;
+ } else {
+ return QueryConstants.SEARCH_ROOT_PATH + path;
+ }
}
/**
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java?rev=1861689&r1=1861688&r2=1861689&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java Thu Jun 20 14:25:08 2019
@@ -175,11 +175,8 @@ public class UserQueryManager {
private String buildXPathStatement(@NotNull String relPath,
@Nullable String value,
@NotNull AuthorizableType type, boolean exact) {
- StringBuilder stmt = new StringBuilder();
String searchRoot = namePathMapper.getJcrPath(QueryUtil.getSearchRoot(type, config));
- if (!"/".equals(searchRoot)) {
- stmt.append(searchRoot);
- }
+ StringBuilder stmt = new StringBuilder().append(searchRoot);
String propName = Text.getName(relPath);
String path;
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/QueryUtilTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/QueryUtilTest.java?rev=1861689&r1=1861688&r2=1861689&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/QueryUtilTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/QueryUtilTest.java Thu Jun 20 14:25:08 2019
@@ -28,6 +28,7 @@ import com.google.common.collect.Immutab
import com.google.common.collect.ImmutableMap;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.api.security.user.QueryBuilder;
+import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.commons.QueryUtils;
import org.apache.jackrabbit.oak.namepath.impl.LocalNameMapper;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
@@ -49,7 +50,8 @@ public class QueryUtilTest {
private static void assertSearchRoot(@NotNull Map<AuthorizableType, String> mapping, @NotNull ConfigurationParameters params) {
for (AuthorizableType type : mapping.keySet()) {
- String expected = QueryConstants.SEARCH_ROOT_PATH + mapping.get(type);
+ String s = mapping.get(type);
+ String expected = (PathUtils.denotesRoot(s)) ? QueryConstants.SEARCH_ROOT_PATH : QueryConstants.SEARCH_ROOT_PATH + s;
assertEquals(expected, QueryUtil.getSearchRoot(type, params));
}
}
@@ -113,6 +115,20 @@ public class QueryUtilTest {
AuthorizableType.AUTHORIZABLE, "/");
assertSearchRoot(paths, params);
+ }
+
+ @Test
+ public void testGetSearchRootConfiguredPathDenotesRoot() {
+ ConfigurationParameters params = ConfigurationParameters.of(
+ UserConstants.PARAM_USER_PATH, "/users",
+ UserConstants.PARAM_GROUP_PATH, "/");
+
+ Map<AuthorizableType, String> paths = ImmutableMap.of(
+ AuthorizableType.USER, "/users",
+ AuthorizableType.GROUP, "/",
+ AuthorizableType.AUTHORIZABLE, "/");
+
+ assertSearchRoot(paths, params);
}
@Test
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManagerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManagerTest.java?rev=1861689&r1=1861688&r2=1861689&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManagerTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManagerTest.java Thu Jun 20 14:25:08 2019
@@ -16,15 +16,6 @@
*/
package org.apache.jackrabbit.oak.security.user.query;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-import javax.jcr.ValueFactory;
-
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import org.apache.jackrabbit.api.security.user.Authorizable;
@@ -33,17 +24,34 @@ import org.apache.jackrabbit.api.securit
import org.apache.jackrabbit.api.security.user.QueryBuilder;
import org.apache.jackrabbit.api.security.user.User;
import org.apache.jackrabbit.oak.AbstractSecurityTest;
+import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.query.QueryEngineSettings;
+import org.apache.jackrabbit.oak.security.internal.SecurityProviderBuilder;
import org.apache.jackrabbit.oak.security.user.UserManagerImpl;
+import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
+import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
import org.apache.jackrabbit.oak.spi.security.principal.PrincipalImpl;
import org.apache.jackrabbit.oak.spi.security.user.AuthorizableType;
+import org.apache.jackrabbit.oak.spi.security.user.UserConfiguration;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.junit.Before;
import org.junit.Test;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+import javax.jcr.ValueFactory;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.oak.spi.security.user.UserConstants.DEFAULT_ADMIN_ID;
+import static org.apache.jackrabbit.oak.spi.security.user.UserConstants.PARAM_GROUP_PATH;
+import static org.apache.jackrabbit.oak.spi.security.user.UserConstants.REP_AUTHORIZABLE_ID;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
@@ -534,4 +542,15 @@ public class UserQueryManagerTest extend
Iterator<Authorizable> result = queryMgr.findAuthorizables(q);
assertResultContainsAuthorizables(result, g);
}
+
+ @Test
+ public void testFindWhenRootTreeIsSearchRoot() throws Exception {
+ ConfigurationParameters config = ConfigurationParameters.of(PARAM_GROUP_PATH, PathUtils.ROOT_PATH);
+ SecurityProvider sp = SecurityProviderBuilder.newBuilder().with(ConfigurationParameters.of(UserConfiguration.NAME, config)).withRootProvider(getRootProvider()).withTreeProvider(getTreeProvider()).build();
+ UserManagerImpl umgr = new UserManagerImpl(root, getPartialValueFactory(), sp);
+ UserQueryManager uqm = new UserQueryManager(umgr, getNamePathMapper(), config, root);
+
+ Iterator<Authorizable> result = uqm.findAuthorizables(REP_AUTHORIZABLE_ID, DEFAULT_ADMIN_ID, AuthorizableType.AUTHORIZABLE);
+ assertTrue(result.hasNext());
+ }
}