2011-06-22 116 views
3

有没有更好的方式来专门使用Net-ldap gem搜索用户和计算机?通过ruby net-ldap查询LDAP用户的更好方法?

这是我目前不得不做的只有用户。

results = search :base => @base, :filter => Net::LDAP::Filter.eq("cn", "*") 
    @results = Array.new 

    results.each do |result| 
    @results.push result if result[:objectclass].include? "person" unless result[:objectclass].include? "computer" 

似乎会有更好的方法。我在文档中看不到任何明显的内容。

回答

5

您可以使用net-LDAP的加入过滤器功能:

filter = Net::LDAP::Filter.eq("sAMAccountName", "*") 
filter2 = Net::LDAP::Filter.eq("objectCategory", "organizationalPerson") 

joined_filter = Net::LDAP::Filter.join(filter, filter2) 

ldap.search(:base => treebase, :filter => joined_filter) do |entry| 
    puts entry.sAMAccountName 
end 
2

如果您知道用于人员的objectClass,则可以使用过滤器'(objectClass=person)',用objectClass替换'person'。大多数实现将使用从'person'继承的'person'或objectClass,如'inetOrgPerson'。使用过滤器'(cn=*)'很可能会获得不是人的条目。

尝试使用Filter.eq("objectClass","person")

+0

不幸的是,这是第一件事我试过一次。我会再给它一次,告诉你我今天晚些时候会得到什么结果。 – Beaon