Skip to content

Commit 01d7cb6

Browse files
jbertramclebertsuconic
authored andcommitted
ARTEMIS-3530 space in role list breaks user listing
(cherry picked from commit 6d52f20)
1 parent 9863fed commit 01d7cb6

File tree

4 files changed

+56
-3
lines changed

4 files changed

+56
-3
lines changed

artemis-cli/src/test/java/org/apache/activemq/cli/test/ArtemisTest.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import javax.xml.transform.dom.DOMSource;
3535
import javax.xml.transform.stream.StreamResult;
3636
import java.io.BufferedReader;
37+
import java.io.BufferedWriter;
3738
import java.io.ByteArrayInputStream;
3839
import java.io.File;
3940
import java.io.IOException;
@@ -704,6 +705,46 @@ private void internalTestUserCommandViaManagement(boolean plaintext, boolean bas
704705
stopServer();
705706
}
706707

708+
@Test
709+
public void testListUserWithMultipleRolesWithSpaces() throws Exception {
710+
try {
711+
Run.setEmbedded(true);
712+
File instance1 = new File(temporaryFolder.getRoot(), "instance_user");
713+
System.setProperty("java.security.auth.login.config", instance1.getAbsolutePath() + "/etc/login.config");
714+
Artemis.main("create", instance1.getAbsolutePath(), "--silent", "--no-autotune", "--no-web", "--no-amqp-acceptor", "--no-mqtt-acceptor", "--no-stomp-acceptor", "--no-hornetq-acceptor", "--security-manager", "jaas");
715+
System.setProperty("artemis.instance", instance1.getAbsolutePath());
716+
Object result = Artemis.internalExecute("run");
717+
server = ((Pair<ManagementContext, ActiveMQServer>) result).getB();
718+
ActiveMQServerControl activeMQServerControl = server.getActiveMQServerControl();
719+
720+
File userFile = new File(instance1.getAbsolutePath() + "/etc/artemis-users.properties");
721+
BufferedWriter writer = Files.newBufferedWriter(Paths.get(userFile.getPath()));
722+
writer.write("");
723+
writer.write("user1 = pass1");
724+
writer.newLine();
725+
writer.write("user2 = pass2");
726+
writer.flush();
727+
writer.close();
728+
File roleFile = new File(instance1.getAbsolutePath() + "/etc/artemis-roles.properties");
729+
writer = Files.newBufferedWriter(Paths.get(roleFile.getPath()));
730+
writer.write("");
731+
writer.write("role1 = user1, user2"); // the space here is what breaks the parsing
732+
writer.newLine();
733+
writer.write("role2 = user2");
734+
writer.flush();
735+
writer.close();
736+
737+
String jsonResult = activeMQServerControl.listUser("");
738+
contains(JsonUtil.readJsonArray(jsonResult), "user2", "role1");
739+
contains(JsonUtil.readJsonArray(jsonResult), "user2", "role2");
740+
checkRole("user2", roleFile, false, "role1", "role2");
741+
assertTrue(checkPassword("user1", "pass1", userFile, false));
742+
assertTrue(checkPassword("user2", "pass2", userFile, false));
743+
} finally {
744+
stopServer();
745+
}
746+
}
747+
707748
@Test
708749
public void testProperReloadWhenAddingUserViaManagementJAAS() throws Exception {
709750
testProperReloadWhenAddingUserViaManagement(false);

artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/StringUtil.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package org.apache.activemq.artemis.utils;
1818

1919
import java.util.ArrayList;
20-
import java.util.Arrays;
2120
import java.util.Collection;
2221
import java.util.Iterator;
2322
import java.util.List;
@@ -54,7 +53,9 @@ public static String joinStringList(Collection<String> strList, String delimit)
5453
public static List<String> splitStringList(String strList, String delimit) {
5554
ArrayList<String> list = new ArrayList<>();
5655
if (strList != null && !strList.isEmpty()) {
57-
list.addAll(Arrays.asList(strList.split(delimit)));
56+
for (String string : strList.split(delimit)) {
57+
list.add(string.trim());
58+
}
5859
}
5960
return list;
6061
}

artemis-core-client/src/test/java/org/apache/activemq/artemis/util/StringUtilTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,15 @@ public void testSplitStringList() throws Exception {
5353
String result2 = StringUtil.joinStringList(result, ",");
5454
assertEquals(listStr, result2);
5555
}
56+
57+
@Test
58+
public void testSplitStringListWithSpaces() throws Exception {
59+
String listStr = "white, blue, yellow, green";
60+
List<String> result = StringUtil.splitStringList(listStr, ",");
61+
assertEquals(4, result.size());
62+
assertEquals("white", result.get(0));
63+
assertEquals("blue", result.get(1));
64+
assertEquals("yellow", result.get(2));
65+
assertEquals("green", result.get(3));
66+
}
5667
}

artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/security/jaas/PropertiesLoginModuleConfigurator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ private Set<String> findRoles(String username) {
197197
//each roleList may be a comma separated list
198198
String[] items = roleList.split(",");
199199
for (String item : items) {
200-
if (item.equals(username)) {
200+
if (item.trim().equals(username)) {
201201
roles.add(role);
202202
}
203203
}

0 commit comments

Comments
 (0)