def Base.search(config={})
unless Base.connection
if @@config
ActiveLDAP::Base.connect(@@config)
else
ActiveLDAP::Base.connect
end
end
config[:filter] = 'objectClass=*' unless config.has_key? :filter
config[:attrs] = [] unless config.has_key? :attrs
config[:scope] = LDAP::LDAP_SCOPE_SUBTREE unless config.has_key? :scope
config[:base] = base() unless config.has_key? :base
values = []
config[:attrs] = config[:attrs].to_a
begin
@@conn.search(config[:base], config[:scope], config[:filter], config[:attrs]) do |m|
res = {}
res['dn'] = [m.dn.dup]
m.attrs.each do |attr|
if config[:attrs].member? attr or config[:attrs].empty?
res[attr] = m.vals(attr).dup
end
end
values.push(res)
end
rescue RuntimeError => detail
@@logger.debug "No matches for #{config[:filter]} and attrs #{config[:attrs]}"
end
return values
end