Jonathan Anstey created KARAF-2529:
--------------------------------------

             Summary: Use connection credentials when searching for roles in 
LDAP
                 Key: KARAF-2529
                 URL: https://issues.apache.org/jira/browse/KARAF-2529
             Project: Karaf
          Issue Type: Bug
    Affects Versions: 2.3.3
            Reporter: Jonathan Anstey


Currently when you specify connection.username and connection.password, the 
LDAP module correctly uses these credentials when searching for a Karaf user, 
it then checks the Karaf user's password by doing a bind. Now when the LDAP 
module searches for roles for this user it doesn't switch back to using the 
provided connection credentials but reuses the Karaf user credentials added 
during the bind. It should be using the connection credentials for the role 
search just like the user search. Proposed fix:

{code}
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 f6637b7..37afcea 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
@@ -225,6 +225,7 @@ public class LDAPLoginModule extends 
AbstractKarafLoginModule {
         // step 2: bind the user using the DN
         context = null;
         try {
+            // switch the credentials to the Karaf login user so that we can 
verify his password is correct
             logger.debug("Bind user (authentication).");
             env.put(Context.SECURITY_AUTHENTICATION, authentication);
             logger.debug("Set the security principal for " + userDN + "," + 
userBaseDN);
@@ -251,6 +252,12 @@ public class LDAPLoginModule extends 
AbstractKarafLoginModule {
         context = null;
         try {
             logger.debug("Get user roles.");
+            // switch back to the connection credentials for the role search 
like we did for the user search in step 1 
+            if (connectionUsername != null && 
connectionUsername.trim().length() > 0) {
+                env.put(Context.SECURITY_AUTHENTICATION, authentication);
+                env.put(Context.SECURITY_PRINCIPAL, connectionUsername);
+                env.put(Context.SECURITY_CREDENTIALS, connectionPassword);
+            }
             context = new InitialDirContext(env);
             SearchControls controls = new SearchControls();
             if (roleSearchSubtree) {
{code}

I'll push the commit once I get my karma set up if there are no objections to 
the fix :-)



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to