使用LDAP查询系统中的所有用户

时间:2010-07-06 18:08:32

标签: ruby active-directory ldap

我正在使用ruby的net / ldap库来解决这个问题,但实际上驱动程序语言并不重要。我需要找到一种方法,以便能够从系统中获取所有用户,并找出哪些用户没有分配给该帐户的电子邮件。可能吗?

我可以通过LDAP连接甚至创建新记录,并可以使用通配符条目来过滤结果来返回查询。

给定我创建一个过滤器来查找以三个9开头的cn:

  filter = Net::LDAP::Filter.eq("cn", "999*")
  @connection.search(:base => "cn=Manager, dc=foo, dc=bar, dc=biz", 
                     :filter  => filter)

然后我的结果计数可能是42。

给定i创建相同的过滤器但仅请求1 9,查询失败并返回false

  filter = Net::LDAP::Filter.eq("cn", "9*")
  @connection.search(:base => "cn=Manager, dc=foo, dc=bar, dc=biz", 
                     :filter  => filter)

如果我只是请求"cn", "*",我应该说“给我所有的cn。” ”

2 个答案:

答案 0 :(得分:0)

因此,问题的简短回答是,这一切都取决于您的架构的设置方式。如果要设置LDAP模式,则需要具有多个具有各种cn(公用名)标识符的记录组,例如cn=activeUserscn=inactiveUsers,这将允许您在列表中查询比在我的情况下。

答案 1 :(得分:0)

我认为您在LDAP服务器的搜索操作上设置了时间限制问题。

如果你有一个非常大的搜索需要花费很多时间,那么LDAP服务器会返回错误“超出时间限制”而没有数据。

在这种情况下,Ruby-Ldap会引发异常LDAP :: ResultError。我不知道Net-Ldap的表现如何。

尝试提高LDAP服务器的时间限制或使用更严格的搜索过滤器,例如'(&(cn = 9 *)(active = TRUE))'。用您的活跃用户标准替换此处'active = TRUE'。