class LdapFluff::GenericMemberService

Attributes

ldap[RW]

Public Class Methods

new(ldap, config) click to toggle source
# File lib/ldap_fluff/generic_member_service.rb, line 7
def initialize(ldap, config)
  @ldap       = ldap
  @base       = config.base_dn
  @group_base = (config.group_base.empty? ? config.base_dn : config.group_base)
  begin
    @search_filter = Net::LDAP::Filter.construct(config.search_filter) unless (config.search_filter.nil? || config.search_filter.empty?)
  rescue Net::LDAP::LdapError => error
    puts "Search filter unavailable - #{error}"
  end
end

Public Instance Methods

find_by_dn(dn) click to toggle source
# File lib/ldap_fluff/generic_member_service.rb, line 24
def find_by_dn(dn)
  entry, base = dn.split(/(?<!\),/, 2)
  entry_attr, entry_value = entry.split('=', 2)
  entry_value = entry_value.gsub('\,', ',')
  user = @ldap.search(:filter => name_filter(entry_value, entry_attr), :base => base)
  raise self.class::UIDNotFoundException if (user.nil? || user.empty?)
  user
end
find_group(gid) click to toggle source
# File lib/ldap_fluff/generic_member_service.rb, line 33
def find_group(gid)
  group = @ldap.search(:filter => group_filter(gid), :base => @group_base)
  raise self.class::GIDNotFoundException if (group.nil? || group.empty?)
  group
end
find_user(uid) click to toggle source
# File lib/ldap_fluff/generic_member_service.rb, line 18
def find_user(uid)
  user = @ldap.search(:filter => name_filter(uid))
  raise self.class::UIDNotFoundException if (user.nil? || user.empty?)
  user
end
get_groups(grouplist) click to toggle source

extract the group names from the LDAP style response, return string will be something like CN=bros,OU=bropeeps,DC=jomara,DC=redhat,DC=com

# File lib/ldap_fluff/generic_member_service.rb, line 56
def get_groups(grouplist)
  grouplist.map(&:downcase).collect { |g| g.sub(/.*?cn=(.*?),.*/, '\1') }
end
get_login_from_entry(entry) click to toggle source
# File lib/ldap_fluff/generic_member_service.rb, line 72
def get_login_from_entry(entry)
  [@attr_login, 'uid', 'cn'].each do |attribute|
    return entry.send(attribute) if entry.respond_to? attribute
  end
  nil
end
get_logins(userlist) click to toggle source
# File lib/ldap_fluff/generic_member_service.rb, line 60
def get_logins(userlist)
  userlist.map(&:downcase!)
  [@attr_login, 'uid', 'cn'].map do |attribute|
    logins = userlist.collect { |g| g.sub(/.*?#{attribute}=(.*?),.*/, '\1') }
    if logins == userlist
      nil
    else
      logins
    end
  end.uniq.compact.flatten
end
group_filter(gid) click to toggle source
# File lib/ldap_fluff/generic_member_service.rb, line 49
def group_filter(gid)
  Net::LDAP::Filter.eq("cn", gid)
end
name_filter(uid, attr = @attr_login) click to toggle source
# File lib/ldap_fluff/generic_member_service.rb, line 39
def name_filter(uid, attr = @attr_login)
  filter = Net::LDAP::Filter.eq(attr, uid)

  if @search_filter.nil?
    filter
  else
    filter & @search_filter
  end
end