class LdapFluff::ActiveDirectory::MemberService

Naughty bits of active directory ldap queries

Public Class Methods

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

Public Instance Methods

_groups_from_ldap_data(payload) click to toggle source

return the :memberof attrs + parents, recursively

# File lib/ldap_fluff/ad_member_service.rb, line 19
def _groups_from_ldap_data(payload)
  data = []
  if !payload.nil?
    first_level     = payload[:memberof]
    total_groups, _ = _walk_group_ancestry(first_level, first_level)
    data            = (get_groups(first_level + total_groups)).uniq
  end
  data
end
_walk_group_ancestry(group_dns = [], known_groups = []) click to toggle source

recursively loop over the parent list

# File lib/ldap_fluff/ad_member_service.rb, line 30
def _walk_group_ancestry(group_dns = [], known_groups = [])
  set = []
  group_dns.each do |group_dn|
    search = @ldap.search(:base => group_dn, :scope => Net::LDAP::SearchScope_BaseObject, :attributes => ['memberof'])
    if !search.nil? && !search.first.nil?
      groups                       = search.first[:memberof] - known_groups
      known_groups                += groups
      next_level, new_known_groups = _walk_group_ancestry(groups, known_groups)
      set                         += next_level
      set                         += groups
      known_groups                += next_level
    end
  end
  [set, known_groups]
end
class_filter() click to toggle source
# File lib/ldap_fluff/ad_member_service.rb, line 46
def class_filter
  Net::LDAP::Filter.eq("objectclass", "group")
end
find_user_groups(uid) click to toggle source

get a list [] of ldap groups for a given user in active directory, this means a recursive lookup

# File lib/ldap_fluff/ad_member_service.rb, line 13
def find_user_groups(uid)
  data = find_user(uid)
  _groups_from_ldap_data(data.first)
end