class LdapFluff::Posix::MemberService

handles the naughty bits of posix ldap

Attributes

ldap[RW]

Public Class Methods

new(ldap, group_base) click to toggle source
# File lib/ldap_fluff/posix_member_service.rb, line 8
def initialize(ldap, group_base)
  @ldap       = ldap
  @group_base = group_base
end

Public Instance Methods

find_group(gid) click to toggle source
# File lib/ldap_fluff/posix_member_service.rb, line 29
def find_group(gid)
  group = @ldap.search(:filter => group_filter(gid), :base => @group_base)
  raise GIDNotFoundException if (group.nil? || group.empty?)
  group
end
find_user(uid) click to toggle source
# File lib/ldap_fluff/posix_member_service.rb, line 23
def find_user(uid)
  user = @ldap.search(:filter => name_filter(uid), :base => @group_base)
  raise UIDNotFoundException if (user.nil? || user.empty?)
  user
end
find_user_groups(uid) click to toggle source

return an ldap user with groups attached note : this method is not particularly fast for large ldap systems

# File lib/ldap_fluff/posix_member_service.rb, line 15
def find_user_groups(uid)
  groups = []
  find_user(uid).each do |entry|
    groups << entry[:cn][0]
  end
  groups
end
group_filter(cn) click to toggle source
# File lib/ldap_fluff/posix_member_service.rb, line 49
def group_filter(cn)
  Net::LDAP::Filter.eq("cn", cn)
end
merge_filters(filters = [], all = false) click to toggle source

AND or OR all of the filters together

# File lib/ldap_fluff/posix_member_service.rb, line 54
def merge_filters(filters = [], all = false)
  if !filters.nil? && filters.size >= 1
    filter = filters[0]
    filters[1..(filters.size - 1)].each do |gfilter|
      filter = (all ? filter & gfilter : filter | gfilter)
    end
    return filter
  end
end
name_filter(uid) click to toggle source
# File lib/ldap_fluff/posix_member_service.rb, line 45
def name_filter(uid)
  Net::LDAP::Filter.eq("memberUid", uid)
end
times_in_groups(uid, gids, all) click to toggle source
# File lib/ldap_fluff/posix_member_service.rb, line 35
def times_in_groups(uid, gids, all)
  filters = []
  gids.each do |cn|
    filters << group_filter(cn)
  end
  group_filters = merge_filters(filters, all)
  filter        = name_filter(uid) & group_filters
  @ldap.search(:base => @group_base, :filter => filter).size
end