diff --git a/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java b/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java index d245777..b44905d 100644 --- a/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java +++ b/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java @@ -139,7 +139,8 @@ public class PropertiesLoginModule extends AbstractKarafLoginModule { String groupInfo = (String) users.get(infos[i].trim()); if (groupInfo != null) { String[] roles = groupInfo.split(","); - for (int j = 1; j < roles.length; j++) { + LOGGER.error("Roles for:" + infos[i].trim() + ", are:" + java.util.Arrays.asList(roles)); + for (int j = 0; j < roles.length; j++) { principals.add(new RolePrincipal(roles[j].trim())); } } diff --git a/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModuleTest.java b/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModuleTest.java index 3413048..2266bbb 100644 --- a/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModuleTest.java +++ b/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModuleTest.java @@ -38,8 +38,11 @@ import org.apache.karaf.jaas.boot.principal.GroupPrincipal; import org.apache.karaf.jaas.boot.principal.RolePrincipal; import org.apache.karaf.jaas.boot.principal.UserPrincipal; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class PropertiesLoginModuleTest { + private static final transient Logger LOGGER = LoggerFactory.getLogger(PropertiesLoginModuleTest.class); @Test public void testBasicLogin() throws Exception { @@ -147,6 +150,7 @@ public class PropertiesLoginModuleTest { pbe.addUser("pqr", "abc"); pbe.addGroup("pqr", "group1"); pbe.addGroupRole("group1", "r1"); + pbe.addGroupRole("group1", "r2"); PropertiesLoginModule module = new PropertiesLoginModule(); Map options = new HashMap(); @@ -170,9 +174,10 @@ public class PropertiesLoginModuleTest { Assert.assertTrue(module.login()); Assert.assertTrue(module.commit()); - Assert.assertEquals(3, subject.getPrincipals().size()); + Assert.assertEquals(5, subject.getPrincipals().size()); boolean foundUser = false; boolean foundRole = false; + boolean foundRoleTwo = false; boolean foundGroup = false; for (Principal pr : subject.getPrincipals()) { if (pr instanceof UserPrincipal) { @@ -182,13 +187,17 @@ public class PropertiesLoginModuleTest { Assert.assertEquals("group1", pr.getName()); foundGroup = true; } else if (pr instanceof RolePrincipal) { - Assert.assertEquals("r1", pr.getName()); - foundRole = true; + if ("r1".equals(pr.getName())) { + foundRole = true; + } else if ("r2".equals(pr.getName())) { + foundRoleTwo = true; + } } } Assert.assertTrue(foundUser); Assert.assertTrue(foundGroup); Assert.assertTrue(foundRole); + Assert.assertTrue(foundRoleTwo); } finally { if (!f.delete()) { Assert.fail("Could not delete temporary file: " + f); @@ -281,6 +290,44 @@ public class PropertiesLoginModuleTest { } } + @Test + public void testTwoGroupRoles() throws Exception { + PropertiesLoginModule module = new PropertiesLoginModule(); + Subject subject = new Subject(); + CallbackHandler handler = new NamePasswordHandler("test", "test"); + Map options = new HashMap(); + options.put("users", this.getClass().getClassLoader().getResource("org/apache/karaf/jaas/modules/properties/test.properties").getFile()); + module.initialize(subject, handler, null, options); + module.login(); + module.commit(); + + boolean foundUser = false; + boolean foundGroup = false; + boolean foundRole = false; + boolean foundRoleTwo = false; + + for (Principal pr : subject.getPrincipals()) { + LOGGER.error("principal:" + pr); + if (pr instanceof UserPrincipal) { + Assert.assertEquals("test", pr.getName()); + foundUser = true; + } else if (pr instanceof GroupPrincipal) { + Assert.assertEquals("gg", pr.getName()); + foundGroup = true; + } else if (pr instanceof RolePrincipal) { + if ("r1".equals(pr.getName())) { + foundRole = true; + } else if ("r2".equals(pr.getName())) { + foundRoleTwo = true; + } + } + } + Assert.assertTrue(foundUser); + Assert.assertTrue(foundGroup); + Assert.assertTrue(foundRole); + Assert.assertTrue(foundRoleTwo); + } + private void testWithUsersFile(String usersFilePath) throws LoginException { PropertiesLoginModule module = new PropertiesLoginModule(); Subject sub = new Subject(); diff --git a/jaas/modules/src/test/resources/org/apache/karaf/jaas/modules/properties/test.properties b/jaas/modules/src/test/resources/org/apache/karaf/jaas/modules/properties/test.properties index 7d16e5b..bff7fa7 100644 --- a/jaas/modules/src/test/resources/org/apache/karaf/jaas/modules/properties/test.properties +++ b/jaas/modules/src/test/resources/org/apache/karaf/jaas/modules/properties/test.properties @@ -17,4 +17,5 @@ # ################################################################################ -test=test,test \ No newline at end of file +test=test,test,_g_:gg +_g_\:gg=r1,r2 \ No newline at end of file