class LdapFluff::Posix::MemberService

handles the naughty bits of posix ldap

Public Class Methods

new(ldap, config) click to toggle source
Calls superclass method LdapFluff::GenericMemberService::new
# File lib/ldap_fluff/posix_member_service.rb, line 5
def initialize(ldap, config)
  @attr_login = (config.attr_login || 'memberuid')
  @use_rfc4519_group_membership = config.use_rfc4519_group_membership
  super
end

Public Instance Methods

find_user(uid, base_dn = @base) click to toggle source
# File lib/ldap_fluff/posix_member_service.rb, line 11
def find_user(uid, base_dn = @base)
  user = @ldap.search(:filter => name_filter(uid), :base => base_dn)
  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 19
def find_user_groups(uid)
  user = find_user(uid).first
  @ldap.search(
    :filter => user_group_filter(uid, user[:dn].first),
    :base => @group_base, :attributes => ["cn"]
  ).map { |entry| entry[:cn][0] }
end

Private Instance Methods

user_group_filter(uid, user_dn) click to toggle source
# File lib/ldap_fluff/posix_member_service.rb, line 35
def user_group_filter(uid, user_dn)
  by_member = Net::LDAP::Filter.eq('memberuid', uid)
  return by_member unless @use_rfc4519_group_membership

  by_name = Net::LDAP::Filter.eq('member', user_dn) &
            Net::LDAP::Filter.eq('objectClass', 'groupOfNames')
  by_unique_name = Net::LDAP::Filter.eq('uniquemember', user_dn) &
                   Net::LDAP::Filter.eq('objectClass', 'groupOfUniqueNames')
  by_member | by_name | by_unique_name
end