Commit 09b1f305 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'feature/ldap_user_filter' of /home/git/repositories/gitlab/gitlab-ee

parents 1fd0639a 172eb64d
...@@ -159,10 +159,15 @@ class ApplicationController < ActionController::Base ...@@ -159,10 +159,15 @@ class ApplicationController < ActionController::Base
def ldap_security_check def ldap_security_check
if current_user && current_user.ldap_user? && current_user.requires_ldap_check? if current_user && current_user.ldap_user? && current_user.requires_ldap_check?
Gitlab::LDAP::Access.new.update_permissions(current_user) if gitlab_ldap_access.allowed?(current_user)
gitlab_ldap_access.update_permissions(current_user)
current_user.last_credential_check_at = Time.now current_user.last_credential_check_at = Time.now
current_user.save current_user.save
else
sign_out current_user
flash[:alert] = "Access denied for your LDAP account."
redirect_to new_user_session_path
end
end end
end end
...@@ -170,4 +175,8 @@ class ApplicationController < ActionController::Base ...@@ -170,4 +175,8 @@ class ApplicationController < ActionController::Base
filters = cookies['event_filter'].split(',') if cookies['event_filter'].present? filters = cookies['event_filter'].split(',') if cookies['event_filter'].present?
@event_filter ||= EventFilter.new(filters) @event_filter ||= EventFilter.new(filters)
end end
def gitlab_ldap_access
Gitlab::LDAP::Access.new
end
end end
...@@ -20,8 +20,14 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController ...@@ -20,8 +20,14 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
# if the authentication to LDAP was successful. # if the authentication to LDAP was successful.
@user = Gitlab::LDAP::User.find_or_create(oauth) @user = Gitlab::LDAP::User.find_or_create(oauth)
@user.remember_me = true if @user.persisted? @user.remember_me = true if @user.persisted?
Gitlab::LDAP::Access.new.update_permissions(@user)
sign_in_and_redirect(@user) if gitlab_ldap_access.allowed?(@user)
gitlab_ldap_access.update_permissions(@user)
sign_in_and_redirect(@user)
else
flash[:alert] = "Access denied for your LDAP account."
redirect_to new_user_session_path
end
end end
private private
......
...@@ -114,6 +114,12 @@ production: &base ...@@ -114,6 +114,12 @@ production: &base
# #
base: '' base: ''
# Filter LDAP users
#
# Ex. (employeeType=developer)
#
user_filter: ''
# Base where we can search for groups # Base where we can search for groups
# #
# Ex. ou=Groups,dc=gitlab,dc=example # Ex. ou=Groups,dc=gitlab,dc=example
......
...@@ -7,6 +7,12 @@ ...@@ -7,6 +7,12 @@
module Gitlab module Gitlab
module LDAP module LDAP
class Access class Access
def allowed?(user)
!!Gitlab::LDAP::Person.find_by_dn(user.extern_uid)
rescue
false
end
def update_permissions(user) def update_permissions(user)
# Skip updating group permissions # Skip updating group permissions
# if instance does not use group_base setting # if instance does not use group_base setting
......
...@@ -69,6 +69,16 @@ module Gitlab ...@@ -69,6 +69,16 @@ module Gitlab
} }
end end
if config['user_filter'].present?
user_filter = Net::LDAP::Filter.construct(config['user_filter'])
options[:filter] = if options[:filter]
Net::LDAP::Filter.join(options[:filter], user_filter)
else
user_filter
end
end
entries = ldap.search(options).select do |entry| entries = ldap.search(options).select do |entry|
entry.respond_to? config.uid entry.respond_to? config.uid
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment