Repository: archiva-redback-core Updated Branches: refs/heads/master 8e98a8aa9 -> 11b2cdbae
Fixing bind issue with certain ldap servers, when user not found Subsequent calls of NamingResult#hasMoreElements returns different values in some environments and situations. e.g. it occured on IBM JDK 7 with Windows Active Directory LDAP when the first value of 'hasMoreElements' was false. The first value is cached now. Project: http://git-wip-us.apache.org/repos/asf/archiva-redback-core/repo Commit: http://git-wip-us.apache.org/repos/asf/archiva-redback-core/commit/5ce2714a Tree: http://git-wip-us.apache.org/repos/asf/archiva-redback-core/tree/5ce2714a Diff: http://git-wip-us.apache.org/repos/asf/archiva-redback-core/diff/5ce2714a Branch: refs/heads/master Commit: 5ce2714a373ece65661bfd769698ee755b641f5b Parents: c02519d Author: Martin Stockhammer <[email protected]> Authored: Fri Sep 9 10:03:27 2016 +0200 Committer: Martin Stockhammer <[email protected]> Committed: Fri Sep 9 10:03:27 2016 +0200 ---------------------------------------------------------------------- .../ldap/LdapBindAuthenticator.java | 21 +++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/5ce2714a/redback-authentication/redback-authentication-providers/redback-authentication-ldap/src/main/java/org/apache/archiva/redback/authentication/ldap/LdapBindAuthenticator.java ---------------------------------------------------------------------- diff --git a/redback-authentication/redback-authentication-providers/redback-authentication-ldap/src/main/java/org/apache/archiva/redback/authentication/ldap/LdapBindAuthenticator.java b/redback-authentication/redback-authentication-providers/redback-authentication-ldap/src/main/java/org/apache/archiva/redback/authentication/ldap/LdapBindAuthenticator.java index c79fb82..648b2f9 100644 --- a/redback-authentication/redback-authentication-providers/redback-authentication-ldap/src/main/java/org/apache/archiva/redback/authentication/ldap/LdapBindAuthenticator.java +++ b/redback-authentication/redback-authentication-providers/redback-authentication-ldap/src/main/java/org/apache/archiva/redback/authentication/ldap/LdapBindAuthenticator.java @@ -122,18 +122,25 @@ public class LdapBindAuthenticator results = context.search( mapper.getUserBaseDn(), filter, ctls ); - log.debug( "Found user '{}': {}", source.getUsername(), results.hasMoreElements() ); + boolean moreElements = results.hasMoreElements(); - if ( results.hasMoreElements() ) + log.debug( "Found user '{}': {}", source.getUsername(), moreElements ); + + if ( moreElements ) { - SearchResult result = results.nextElement(); + try { + SearchResult result = results.nextElement(); - userDn = result.getNameInNamespace(); + userDn = result.getNameInNamespace(); - log.debug( "Adding userDn {} for user {} to the cache..", userDn, source.getUsername() ); + log.debug("Adding userDn {} for user {} to the cache..", userDn, source.getUsername()); - // REDBACK-289/MRM-1488 cache the ldap user's userDn to lessen calls to ldap server - ldapCacheService.addLdapUserDn( source.getUsername(), userDn ); + // REDBACK-289/MRM-1488 cache the ldap user's userDn to lessen calls to ldap server + ldapCacheService.addLdapUserDn(source.getUsername(), userDn); + } catch (Exception e) { + log.error("Error occured on LDAP result retrieval: {}, {}", userDn, e.getMessage()); + return new AuthenticationResult( false, source.getUsername(), e); + } } else {
