Commit b1150883 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'improve/gitlab_ldap' of /home/git/repositories/gitlab/gitlab-ee

parents 397282b4 44507069
...@@ -12,7 +12,7 @@ module Gitlab ...@@ -12,7 +12,7 @@ module Gitlab
# if instance does not use group_base setting # if instance does not use group_base setting
return true unless Gitlab.config.ldap['group_base'].present? return true unless Gitlab.config.ldap['group_base'].present?
ldap_user = Gitlab::LDAP::Person.find(user.extern_uid) ldap_user = Gitlab::LDAP::Person.find_by_dn(user.extern_uid)
ldap_groups = ldap_user.groups ldap_groups = ldap_user.groups
ldap_groups_cn = ldap_groups.map(&:name) ldap_groups_cn = ldap_groups.map(&:name)
groups = ::Group.where(ldap_cn: ldap_groups_cn) groups = ::Group.where(ldap_cn: ldap_groups_cn)
......
...@@ -51,14 +51,20 @@ module Gitlab ...@@ -51,14 +51,20 @@ module Gitlab
end end
end end
def users(uid = "*") def users(field, value)
if field.to_sym == :dn
options = {
base: value
}
else
options = { options = {
base: config['base'], base: config['base'],
filter: Net::LDAP::Filter.eq(config.uid, uid) filter: Net::LDAP::Filter.eq(field, value)
} }
end
entries = ldap.search(options).select do |entry| entries = ldap.search(options).select do |entry|
entry.respond_to? :uid entry.respond_to? config.uid
end end
entries.map do |entry| entries.map do |entry|
...@@ -66,8 +72,8 @@ module Gitlab ...@@ -66,8 +72,8 @@ module Gitlab
end end
end end
def user(uid) def user(*args)
users(uid).first users(*args).first
end end
private private
......
...@@ -19,24 +19,14 @@ module Gitlab ...@@ -19,24 +19,14 @@ module Gitlab
name.parameterize name.parameterize
end end
def members def memberuid?
member_uids.map do |uid| entry.respond_to? :memberuid
adapter.user(uid)
end.compact
end end
def member_uids def member_uids
if entry.respond_to? :memberuid
entry.memberuid entry.memberuid
else
member_dns.map do |dn|
$1 if dn =~ /uid=([a-zA-Z0-9.-]+)/
end
end.compact
end end
private
def member_dns def member_dns
if entry.respond_to? :member if entry.respond_to? :member
entry.member entry.member
...@@ -49,6 +39,8 @@ module Gitlab ...@@ -49,6 +39,8 @@ module Gitlab
end end
end end
private
def entry def entry
@entry @entry
end end
......
...@@ -7,15 +7,12 @@ ...@@ -7,15 +7,12 @@
module Gitlab module Gitlab
module LDAP module LDAP
class Person class Person
def self.find(user_uid) def self.find_by_uid(uid)
uid = if user_uid =~ /uid=([a-zA-Z0-9.-]+)/ Gitlab::LDAP::Adapter.new.user(config.uid, uid)
$1
else
user_uid
end end
def self.find_by_dn(dn)
Gitlab::LDAP::Adapter.new.user(uid) Gitlab::LDAP::Adapter.new.user('dn', dn)
end end
def initialize(entry) def initialize(entry)
...@@ -27,16 +24,24 @@ module Gitlab ...@@ -27,16 +24,24 @@ module Gitlab
end end
def uid def uid
entry.uid.join(" ") entry.send(config.uid).join(" ")
end end
def username def username
uid uid
end end
def dn
entry.dn
end
def groups def groups
adapter.groups.select do |group| adapter.groups.select do |group|
if group.memberuid?
group.member_uids.include?(uid) group.member_uids.include?(uid)
else
group.member_dns.include?(dn)
end
end end
end end
...@@ -49,6 +54,10 @@ module Gitlab ...@@ -49,6 +54,10 @@ module Gitlab
def adapter def adapter
@adapter ||= Gitlab::LDAP::Adapter.new @adapter ||= Gitlab::LDAP::Adapter.new
end end
def config
@config ||= Gitlab.config.ldap
end
end end
end end
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