You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2019/12/05 17:11:16 UTC
[qpid-broker-j] 01/02: QPID-8374: [Broker-J] Change of attribute
'caseSensitive' should take immediate effect
This is an automated email from the ASF dual-hosted git repository.
orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git
commit 17cab901e5005be9c3355f5cf9fe8d5994b06994
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Thu Dec 5 17:01:40 2019 +0000
QPID-8374: [Broker-J] Change of attribute 'caseSensitive' should take immediate effect
---
.../model/adapter/FileBasedGroupProviderImpl.java | 4 +--
.../server/security/group/FileGroupDatabase.java | 12 ++++----
.../adapter/FileBasedGroupProviderImplTest.java | 35 ++++++++++++++++++++++
.../FileGroupDatabaseCaseInsensitiveTest.java | 16 ++++++----
.../security/group/FileGroupDatabaseTest.java | 16 ++++++----
5 files changed, 64 insertions(+), 19 deletions(-)
diff --git a/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java b/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java
index 3d4f0fc..7760f7b 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java
@@ -105,7 +105,7 @@ public class FileBasedGroupProviderImpl
protected void onOpen()
{
super.onOpen();
- FileGroupDatabase groupDatabase = new FileGroupDatabase(isCaseSensitive());
+ FileGroupDatabase groupDatabase = new FileGroupDatabase(this);
try
{
groupDatabase.setGroupFile(getPath());
@@ -175,7 +175,7 @@ public class FileBasedGroupProviderImpl
throw new IllegalConfigurationException(String.format("Cannot read groups file '%s'. Please check permissions.", _path));
}
- FileGroupDatabase groupDatabase = new FileGroupDatabase(isCaseSensitive());
+ FileGroupDatabase groupDatabase = new FileGroupDatabase(this);
try
{
groupDatabase.setGroupFile(_path);
diff --git a/broker-core/src/main/java/org/apache/qpid/server/security/group/FileGroupDatabase.java b/broker-core/src/main/java/org/apache/qpid/server/security/group/FileGroupDatabase.java
index 0e9a608..8f08ccb 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/security/group/FileGroupDatabase.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/security/group/FileGroupDatabase.java
@@ -36,6 +36,7 @@ import com.google.common.base.Joiner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.qpid.server.model.adapter.FileBasedGroupProvider;
import org.apache.qpid.server.util.BaseAction;
import org.apache.qpid.server.util.FileHelper;
import org.apache.qpid.server.util.ServerScopedRuntimeException;
@@ -52,15 +53,12 @@ public class FileGroupDatabase implements GroupDatabase
private final Map<String, Set<String>> _groupToUserMap;
private final Map<String, Set<String>> _userToGroupMap;
+ private final FileBasedGroupProvider<?> _groupProvider;
private String _groupFile;
- private final boolean _caseSensitive;
- /**
- * @param caseSensitive provides information if search of Users and Groups is CaseSensitive or CaseInsensitive;
- */
- public FileGroupDatabase(boolean caseSensitive)
+ public FileGroupDatabase(FileBasedGroupProvider<?> groupProvider)
{
- this._caseSensitive = caseSensitive;
+ this._groupProvider = groupProvider;
_groupToUserMap = new ConcurrentHashMap<>();
_userToGroupMap = new ConcurrentHashMap<>();
}
@@ -299,7 +297,7 @@ public class FileGroupDatabase implements GroupDatabase
private String keySearch(Set<String> set, String requiredKey)
{
- if (!_caseSensitive)
+ if (!_groupProvider.isCaseSensitive())
{
for (String key : set)
{
diff --git a/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImplTest.java b/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImplTest.java
index d046937..ba41631 100644
--- a/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImplTest.java
+++ b/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImplTest.java
@@ -21,8 +21,10 @@
package org.apache.qpid.server.model.adapter;
import static org.apache.qpid.server.model.adapter.FileBasedGroupProviderImpl.GROUP_FILE_PROVIDER_TYPE;
+import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -166,6 +168,39 @@ public class FileBasedGroupProviderImplTest extends UnitTestBase
assertThat(rootMember.getName(), is(equalTo("root")));
}
+
+ @Test
+ public void testGetGroupPrincipalsForUserCaseAware() throws Exception
+ {
+ Map<String, Set<String>> input = new HashMap<>();
+ input.put("super", Sets.newHashSet("root"));
+
+ _groupFile = createTemporaryGroupFile(input);
+
+ Map<String, Object> providerAttrs = new HashMap<>();
+ String groupsFile = _groupFile.getAbsolutePath();
+ providerAttrs.put(FileBasedGroupProvider.TYPE, GROUP_FILE_PROVIDER_TYPE);
+ providerAttrs.put(FileBasedGroupProvider.PATH, groupsFile);
+ providerAttrs.put(FileBasedGroupProvider.NAME, getTestName());
+
+ @SuppressWarnings("unchecked")
+ GroupProvider<?> provider = _objectFactory.create(GroupProvider.class, providerAttrs, _broker);
+ assertThat(provider, is(instanceOf(FileBasedGroupProvider.class)));
+ assertThat(((FileBasedGroupProvider)provider).isCaseSensitive(), is(true));
+
+ Set<Principal> adminGroups = provider.getGroupPrincipalsForUser(() -> "Root");
+ assertThat("No group should be found when caseSensitive=true",
+ adminGroups.stream().map(Principal::getName).collect(Collectors.toSet()),
+ is(empty()));
+
+ provider.setAttributes(Collections.singletonMap("caseSensitive", false));
+ assertThat(((FileBasedGroupProvider)provider).isCaseSensitive(), is(false));
+ Set<Principal> adminGroups2 = provider.getGroupPrincipalsForUser(() -> "Root");
+ assertThat("root has unexpected group membership",
+ adminGroups2.stream().map(Principal::getName).collect(Collectors.toSet()),
+ containsInAnyOrder("super"));
+ }
+
@Test
public void testAddGroupAndMember() throws Exception
{
diff --git a/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseCaseInsensitiveTest.java b/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseCaseInsensitiveTest.java
index b712387..2f0a923 100644
--- a/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseCaseInsensitiveTest.java
+++ b/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseCaseInsensitiveTest.java
@@ -23,6 +23,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
import java.io.File;
import java.io.IOException;
@@ -32,6 +34,7 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.apache.qpid.server.model.adapter.FileBasedGroupProvider;
import org.apache.qpid.test.utils.UnitTestBase;
public class FileGroupDatabaseCaseInsensitiveTest extends UnitTestBase
@@ -48,11 +51,14 @@ public class FileGroupDatabaseCaseInsensitiveTest extends UnitTestBase
private FileGroupDatabase _fileGroupDatabase;
private GroupProviderUtil _util;
private String _groupFile;
+ private FileBasedGroupProvider _groupProvider;
@Before
public void setUp() throws IOException
{
- _fileGroupDatabase = new FileGroupDatabase(CASE_SENSITIVE);
+ _groupProvider = mock(FileBasedGroupProvider.class);
+ when(_groupProvider.isCaseSensitive()).thenReturn(CASE_SENSITIVE);
+ _fileGroupDatabase = new FileGroupDatabase(_groupProvider);
_util = new GroupProviderUtil(_fileGroupDatabase);
_groupFile = _util.getGroupFile();
}
@@ -307,7 +313,7 @@ public class FileGroupDatabaseCaseInsensitiveTest extends UnitTestBase
_fileGroupDatabase.addUserToGroup(USER3.toUpperCase(), MY_GROUP);
assertEquals(3, users.size());
- FileGroupDatabase newGroupDatabase = new FileGroupDatabase(CASE_SENSITIVE);
+ FileGroupDatabase newGroupDatabase = new FileGroupDatabase(_groupProvider);
newGroupDatabase.setGroupFile(_groupFile);
Set<String> newUsers = newGroupDatabase.getUsersInGroup(MY_GROUP.toUpperCase());
@@ -325,7 +331,7 @@ public class FileGroupDatabaseCaseInsensitiveTest extends UnitTestBase
_fileGroupDatabase.removeUserFromGroup(USER2.toUpperCase(), MY_GROUP);
assertEquals(1, users.size());
- FileGroupDatabase newGroupDatabase = new FileGroupDatabase(CASE_SENSITIVE);
+ FileGroupDatabase newGroupDatabase = new FileGroupDatabase(_groupProvider);
newGroupDatabase.setGroupFile(_groupFile);
Set<String> newUsers = newGroupDatabase.getUsersInGroup(MY_GROUP.toUpperCase());
@@ -346,7 +352,7 @@ public class FileGroupDatabaseCaseInsensitiveTest extends UnitTestBase
assertEquals(1, groups.size());
assertTrue(groups.contains(MY_GROUP));
- FileGroupDatabase newGroupDatabase = new FileGroupDatabase(CASE_SENSITIVE);
+ FileGroupDatabase newGroupDatabase = new FileGroupDatabase(_groupProvider);
newGroupDatabase.setGroupFile(_groupFile);
Set<String> newGroups = newGroupDatabase.getAllGroups();
@@ -374,7 +380,7 @@ public class FileGroupDatabaseCaseInsensitiveTest extends UnitTestBase
groupsForUser1 = _fileGroupDatabase.getGroupsForUser(USER1.toUpperCase());
assertEquals(1, groupsForUser1.size());
- FileGroupDatabase newGroupDatabase = new FileGroupDatabase(CASE_SENSITIVE);
+ FileGroupDatabase newGroupDatabase = new FileGroupDatabase(_groupProvider);
newGroupDatabase.setGroupFile(_groupFile);
Set<String> newGroups = newGroupDatabase.getAllGroups();
diff --git a/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseTest.java b/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseTest.java
index 9d2590d..0ccbe3c 100644
--- a/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseTest.java
+++ b/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseTest.java
@@ -23,6 +23,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
import java.io.File;
import java.io.FileNotFoundException;
@@ -32,6 +34,7 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.apache.qpid.server.model.adapter.FileBasedGroupProvider;
import org.apache.qpid.test.utils.UnitTestBase;
public class FileGroupDatabaseTest extends UnitTestBase
@@ -48,11 +51,14 @@ public class FileGroupDatabaseTest extends UnitTestBase
private FileGroupDatabase _fileGroupDatabase;
private GroupProviderUtil _util;
private String _groupFile;
+ private FileBasedGroupProvider<?> _groupProvider;
@Before
public void setUp() throws Exception
{
- _fileGroupDatabase = new FileGroupDatabase(CASE_SENSITIVE);
+ _groupProvider = mock(FileBasedGroupProvider.class);
+ when(_groupProvider.isCaseSensitive()).thenReturn(CASE_SENSITIVE);
+ _fileGroupDatabase = new FileGroupDatabase(_groupProvider);
_util = new GroupProviderUtil(_fileGroupDatabase);
_groupFile = _util.getGroupFile();
}
@@ -357,7 +363,7 @@ public class FileGroupDatabaseTest extends UnitTestBase
_fileGroupDatabase.addUserToGroup(USER3, MY_GROUP);
assertEquals(3, users.size());
- FileGroupDatabase newGroupDatabase = new FileGroupDatabase(CASE_SENSITIVE);
+ FileGroupDatabase newGroupDatabase = new FileGroupDatabase(_groupProvider);
newGroupDatabase.setGroupFile(_groupFile);
Set<String> newUsers = newGroupDatabase.getUsersInGroup(MY_GROUP);
@@ -375,7 +381,7 @@ public class FileGroupDatabaseTest extends UnitTestBase
_fileGroupDatabase.removeUserFromGroup(USER2, MY_GROUP);
assertEquals(1, users.size());
- FileGroupDatabase newGroupDatabase = new FileGroupDatabase(CASE_SENSITIVE);
+ FileGroupDatabase newGroupDatabase = new FileGroupDatabase(_groupProvider);
newGroupDatabase.setGroupFile(_groupFile);
Set<String> newUsers = newGroupDatabase.getUsersInGroup(MY_GROUP);
@@ -396,7 +402,7 @@ public class FileGroupDatabaseTest extends UnitTestBase
assertEquals(1, groups.size());
assertTrue(groups.contains(MY_GROUP));
- FileGroupDatabase newGroupDatabase = new FileGroupDatabase(CASE_SENSITIVE);
+ FileGroupDatabase newGroupDatabase = new FileGroupDatabase(_groupProvider);
newGroupDatabase.setGroupFile(_groupFile);
Set<String> newGroups = newGroupDatabase.getAllGroups();
@@ -424,7 +430,7 @@ public class FileGroupDatabaseTest extends UnitTestBase
groupsForUser1 = _fileGroupDatabase.getGroupsForUser(USER1);
assertEquals(1, groupsForUser1.size());
- FileGroupDatabase newGroupDatabase = new FileGroupDatabase(CASE_SENSITIVE);
+ FileGroupDatabase newGroupDatabase = new FileGroupDatabase(_groupProvider);
newGroupDatabase.setGroupFile(_groupFile);
Set<String> newGroups = newGroupDatabase.getAllGroups();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org