Dan Asked: 2012-12-28 13:28:24 +0800 CST2012-12-28 13:28:24 +0800 CST 2012-12-28 13:28:24 +0800 CST 使用节点级别的通配符搜索 LDAP 树? 772 给定一个 LDAP 树(在我的例子中是 AD),有没有一种方法可以在树的特定级别使用通配符进行搜索? 即,我想知道是否有一种等效的方法可以像您ls /opt/*/lib在 Linux 中那样搜索 LDAP。 ldap 1 个回答 Voted Best Answer Ryan Ries 2012-12-28T15:51:04+08:002012-12-28T15:51:04+08:00 我认为没有一种单线可以做到这一点。不过,您可以编写(或编码)它。 您在 AD 中执行的几乎所有 LDAP 搜索都将涉及ldap_search_s()函数。功能绝对需要的东西之一是开始搜索的基础。例如“DC=domain,DC=com”。您可以使用任何 OU 或容器作为开始搜索的基础。要使用您的示例,它可能看起来像“OU=opt,DC=domain,DC=com”。您不能在该字符串中使用通配符。 因此,在您的假设脚本中,您使用上述搜索基础运行查询,并使用过滤器 (objectclass=container),并指定搜索的范围(基础、一级或子树)。这将为您提供搜索基础下所有容器的列表。 然后,在您的脚本中,您可以运行更多查询,合并容器列表中的每个元素。(“OU=lib、OU=dallas、OU=opt、DC=domain、DC=com”、“OU=lib、OU=atlanta、OU=opt、DC=domain、DC=com”等) 粗体位代表脚本中的变量,您将对第一次搜索容器时找到的每个容器进行单独查询。 这对我来说听起来很疯狂。您还必须弄清楚如何处理子树搜索等中的递归。 另一种方法是只搜索您打算搜索的对象,并以编程方式检查每个对象的直接父容器是否为 OU=lib,如果不是,则将其丢弃。那可能稍微不那么疯狂。 但关键是,你将不得不编写脚本或编码。通配符可用于对象 *(telephonenumber=**555)* 或对象种类(objectclass=user)的属性,但不能用于搜索库中的节点。
我认为没有一种单线可以做到这一点。不过,您可以编写(或编码)它。
您在 AD 中执行的几乎所有 LDAP 搜索都将涉及ldap_search_s()函数。功能绝对需要的东西之一是开始搜索的基础。例如“DC=domain,DC=com”。您可以使用任何 OU 或容器作为开始搜索的基础。要使用您的示例,它可能看起来像“OU=opt,DC=domain,DC=com”。您不能在该字符串中使用通配符。
因此,在您的假设脚本中,您使用上述搜索基础运行查询,并使用过滤器 (objectclass=container),并指定搜索的范围(基础、一级或子树)。这将为您提供搜索基础下所有容器的列表。
然后,在您的脚本中,您可以运行更多查询,合并容器列表中的每个元素。(“OU=lib、OU=dallas、OU=opt、DC=domain、DC=com”、“OU=lib、OU=atlanta、OU=opt、DC=domain、DC=com”等)
粗体位代表脚本中的变量,您将对第一次搜索容器时找到的每个容器进行单独查询。
这对我来说听起来很疯狂。您还必须弄清楚如何处理子树搜索等中的递归。
另一种方法是只搜索您打算搜索的对象,并以编程方式检查每个对象的直接父容器是否为 OU=lib,如果不是,则将其丢弃。那可能稍微不那么疯狂。
但关键是,你将不得不编写脚本或编码。通配符可用于对象 *(telephonenumber=**555)* 或对象种类(objectclass=user)的属性,但不能用于搜索库中的节点。