Repository: karaf Updated Branches: refs/heads/karaf-2.x 58fd9f9b8 -> 5442ae049 refs/heads/karaf-3.0.x 61db35520 -> 8ce5034a8 refs/heads/master eaca83783 -> 4eddb09bc
KARAF-3946 - do not count leading and trailing white space in role mapping Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/5442ae04 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/5442ae04 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/5442ae04 Branch: refs/heads/karaf-2.x Commit: 5442ae049540dff32f7dc3ec6f54650e03c667a7 Parents: 58fd9f9 Author: Jonathan Anstey <[email protected]> Authored: Thu Aug 20 15:52:03 2015 -0230 Committer: Jonathan Anstey <[email protected]> Committed: Thu Aug 20 15:52:03 2015 -0230 ---------------------------------------------------------------------- .../jaas/modules/ldap/LDAPLoginModule.java | 4 +- .../jaas/modules/ldap/LdapLoginModuleTest.java | 45 ++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/5442ae04/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/ldap/LDAPLoginModule.java ---------------------------------------------------------------------- diff --git a/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/ldap/LDAPLoginModule.java b/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/ldap/LDAPLoginModule.java index 3be13f3..939bee3 100644 --- a/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/ldap/LDAPLoginModule.java +++ b/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/ldap/LDAPLoginModule.java @@ -145,14 +145,14 @@ public class LDAPLoginModule extends AbstractKarafLoginModule { String[] mappings = option.split(";"); for (String mapping : mappings) { String[] map = mapping.split("=", 2); - String ldapRole = map[0]; + String ldapRole = map[0].trim(); String[] karafRoles = map[1].split(","); if (roleMapping.get(ldapRole) == null) { roleMapping.put(ldapRole, new HashSet<String>()); } final Set<String> karafRolesSet = roleMapping.get(ldapRole); for (String karafRole : karafRoles) { - karafRolesSet.add(karafRole); + karafRolesSet.add(karafRole.trim()); } } } http://git-wip-us.apache.org/repos/asf/karaf/blob/5442ae04/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/ldap/LdapLoginModuleTest.java ---------------------------------------------------------------------- diff --git a/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/ldap/LdapLoginModuleTest.java b/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/ldap/LdapLoginModuleTest.java index 3e9e733..df97cea 100644 --- a/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/ldap/LdapLoginModuleTest.java +++ b/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/ldap/LdapLoginModuleTest.java @@ -307,5 +307,50 @@ public class LdapLoginModuleTest extends AbstractLdapTestUnit { assertEquals("Principals should be gone as the user has logged out", 0, subject.getPrincipals().size()); } + @Test + public void testRoleMappingParsing() throws Exception { + Properties options = ldapLoginModuleOptions(); + options.put(LDAPLoginModule.ROLE_MAPPING, "admin = karaf, test; admin = another"); + LDAPLoginModule module = new LDAPLoginModule(); + CallbackHandler cb = new CallbackHandler() { + public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { + for (Callback cb : callbacks) { + if (cb instanceof NameCallback) { + ((NameCallback) cb).setName("admin"); + } else if (cb instanceof PasswordCallback) { + ((PasswordCallback) cb).setPassword("admin123".toCharArray()); + } + } + } + }; + Subject subject = new Subject(); + module.initialize(subject, cb, null, options); + + assertEquals("Precondition", 0, subject.getPrincipals().size()); + assertTrue(module.login()); + assertTrue(module.commit()); + + assertEquals(4, subject.getPrincipals().size()); + + final List<String> roles = new ArrayList<String>(Arrays.asList("karaf", "test", "another")); + + boolean foundUser = false; + boolean foundRole = false; + for (Principal pr : subject.getPrincipals()) { + if (pr instanceof UserPrincipal) { + assertEquals("admin", pr.getName()); + foundUser = true; + } else if (pr instanceof RolePrincipal) { + assertTrue(roles.remove(pr.getName())); + foundRole = true; + } + } + assertTrue(foundUser); + assertTrue(foundRole); + assertTrue(roles.isEmpty()); + + assertTrue(module.logout()); + assertEquals("Principals should be gone as the user has logged out", 0, subject.getPrincipals().size()); + } }
