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