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());
+    }
 }
             

Reply via email to