diff options
author | Horatiu Eugen Vlad <horatiu@vlad.eu> | 2018-03-26 12:23:54 +0300 |
---|---|---|
committer | Horatiu Eugen Vlad <horatiu@vlad.eu> | 2018-03-27 10:21:17 +0300 |
commit | 7d01792614e48c8f94307d660298014cd01cb79c (patch) | |
tree | c5981e90b915ee09871a6505193f4c9fc5ab65dd /lib/gitlab/auth/ldap | |
parent | 391732a2c1b04baf565c77f2788a1ec035b1d85e (diff) |
Fix LDAP login without user in DB
Diffstat (limited to 'lib/gitlab/auth/ldap')
-rw-r--r-- | lib/gitlab/auth/ldap/authentication.rb | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/lib/gitlab/auth/ldap/authentication.rb b/lib/gitlab/auth/ldap/authentication.rb index e70c3ab6b46..7c134fb6438 100644 --- a/lib/gitlab/auth/ldap/authentication.rb +++ b/lib/gitlab/auth/ldap/authentication.rb @@ -12,30 +12,26 @@ module Gitlab return unless Gitlab::Auth::LDAP::Config.enabled? return unless login.present? && password.present? - auth = nil - # loop through providers until valid bind + # return found user that was authenticated by first provider for given login credentials providers.find do |provider| auth = new(provider) - auth.login(login, password) # true will exit the loop + break auth.user if auth.login(login, password) # true will exit the loop end - - # If (login, password) was invalid for all providers, the value of auth is now the last - # Gitlab::Auth::LDAP::Authentication instance we tried. - auth.user end def self.providers Gitlab::Auth::LDAP::Config.providers end - attr_accessor :ldap_user - def login(login, password) - @ldap_user = adapter.bind_as( + result = adapter.bind_as( filter: user_filter(login), size: 1, password: password ) + return unless result + + @user = Gitlab::Auth::LDAP::User.find_by_uid_and_provider(result.dn, provider) end def adapter @@ -56,12 +52,6 @@ module Gitlab filter end - - def user - return unless ldap_user - - Gitlab::Auth::LDAP::User.find_by_uid_and_provider(ldap_user.dn, provider) - end end end end |