Fix LDAPUtil#findUser() for OpenLDAP.

This commit is contained in:
takezoe
2013-08-24 01:45:30 +09:00
parent 6d76e93ede
commit f7de3bab74

View File

@@ -2,7 +2,10 @@ package util
import service.SystemSettingsService.Ldap import service.SystemSettingsService.Ldap
import service.SystemSettingsService import service.SystemSettingsService
import com.novell.ldap.{LDAPReferralException, LDAPEntry, LDAPConnection} import com.novell.ldap._
import service.SystemSettingsService.Ldap
import scala.Some
import scala.annotation.tailrec
/** /**
* Utility for LDAP authentication. * Utility for LDAP authentication.
@@ -76,13 +79,20 @@ object LDAPUtil {
} }
private def findUser(conn: LDAPConnection, userName: String, baseDN: String, userNameAttribute: String): Option[String] = { private def findUser(conn: LDAPConnection, userName: String, baseDN: String, userNameAttribute: String): Option[String] = {
val results = conn.search(baseDN, LDAPConnection.SCOPE_SUB, userNameAttribute + "=" + userName, null, false) @tailrec
(for(i <- 0 to results.getCount) yield try { def getEntries(results: LDAPSearchResults, entries: List[Option[LDAPEntry]] = Nil): List[LDAPEntry] = {
Some(results.next) if(results.hasMore){
getEntries(results, entries :+ (try {
Option(results.next)
} catch { } catch {
case ex: LDAPReferralException => None // NOTE(tanacasino): Referral follow is off. so ignores it.(for AD) case ex: LDAPReferralException => None // NOTE(tanacasino): Referral follow is off. so ignores it.(for AD)
}).flatten.collectFirst { }))
case x if(x != null) => x.getDN } else {
entries.flatten
}
}
getEntries(conn.search(baseDN, LDAPConnection.SCOPE_SUB, userNameAttribute + "=" + userName, null, false)).collectFirst {
case x => x.getDN
} }
} }