class LdapFluff::ActiveDirectory

Public Instance Methods

bind?(uid = nil, password = nil, opts = {}) click to toggle source
# File lib/ldap_fluff/active_directory.rb, line 2
def bind?(uid = nil, password = nil, opts = {})
  unless uid.include?(',') || uid.include?('\\') || opts[:search] == false
    service_bind
    user = @member_service.find_user(uid)
    uid = user.first.dn if user&.first
  end
  @ldap.auth(uid, password)
  @ldap.bind
end
is_in_groups(uid, gids = [], all = false) click to toggle source

active directory stores group membership on a users model TODO: query by group individually not like this

# File lib/ldap_fluff/active_directory.rb, line 14
def is_in_groups(uid, gids = [], all = false)
  service_bind
  return true if gids == []
  begin
    groups       = @member_service.find_user_groups(uid)
    intersection = gids & groups
    (all ? intersection == gids : intersection.size > 0)
  rescue MemberService::UIDNotFoundException
    false
  end
end

Private Instance Methods

users_from_search_results(search, method) click to toggle source
# File lib/ldap_fluff/active_directory.rb, line 28
def users_from_search_results(search, method)
  users = []

  search.send(method).each do |member|
    begin
      entry = @member_service.find_by_dn(member).first
    rescue MemberService::UIDNotFoundException
      next
    end
    objectclasses = entry.objectclass.map(&:downcase)

    if (%w[organizationalperson person userproxy] & objectclasses).present?
      users << @member_service.get_login_from_entry(entry)
    elsif (%w[organizationalunit group] & objectclasses).present?
      users << users_for_gid(entry.cn.first)
    end
  end

  users.flatten.uniq
end