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 5 def initialize(ldap, config) @attr_login = (config.attr_login || 'samaccountname') super end
Public Instance Methods
_get_domain_func_level()
click to toggle source
return the domain functionality level, default to 0
# File lib/ldap_fluff/ad_member_service.rb, line 28 def _get_domain_func_level return @domain_functionality if defined?(@domain_functionality) @domain_functionality = 0 search = @ldap.search(:base => "", :scope => Net::LDAP::SearchScope_BaseObject, :attributes => ['domainFunctionality']) if !search.nil? && !search.first.nil? @domain_functionality = search.first[:domainfunctionality].first.to_i end @domain_functionality end
_groups_from_ldap_data(payload)
click to toggle source
return the :memberof attrs + parents, recursively
# File lib/ldap_fluff/ad_member_service.rb, line 42 def _groups_from_ldap_data(payload) data = [] unless 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 53 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']) next unless !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 [set, known_groups] end
class_filter()
click to toggle source
# File lib/ldap_fluff/ad_member_service.rb, line 68 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 try to use msds-memberOfTransitive if it is supported, otherwise do a recursive loop
# File lib/ldap_fluff/ad_member_service.rb, line 12 def find_user_groups(uid) user_data = find_user(uid).first if _get_domain_func_level >= 6 user_dn = user_data[:distinguishedname].first search = @ldap.search(:base => user_dn, :scope => Net::LDAP::SearchScope_BaseObject, :attributes => ['msds-memberOfTransitive']) if !search.nil? && !search.first.nil? return get_groups(search.first['msds-memberoftransitive']) end end # Fall back to recursive lookup _groups_from_ldap_data(user_data) end