使用通配符搜索 LDAP 树的节点级别?

使用通配符搜索 LDAP 树的节点级别?

给定一个 LDAP 树(在我的情况下是 AD),是否有办法使用通配符在树中的特定级别进行搜索?

即,我想知道是否存在与在 Linux 中相同的方法来搜索 LDAP ls /opt/*/lib

答案1

我认为没有一行代码可以做到这一点。不过,你可以编写脚本(或编码)。

你在 AD 中执行的任何 LDAP 搜索几乎都会涉及ldap_search_s()函数。该函数绝对需要的一件事是开始搜索的基础。例如“DC=domain,DC=com”。您可以使用任何 OU 或容器作为开始搜索的基础。要使用您的示例,它可能看起来像“OU=opt,DC=domain,DC=com”。您不能在该字符串中使用通配符。

因此,在您的假设脚本中,您使用上面所述的搜索基础运行查询,并使用过滤器(objectclass=container),并指定范围(基础、一级或子树) 的搜索。这将为您提供搜索基础下的所有容器的列表。

然后,您可以在脚本中运行更多查询,将容器列表中的每个元素合并在一起。(“OU=lib,OU=达拉斯,OU=opt,DC=域,DC=com","OU=lib,OU=亚特兰大,OU=opt,DC=domain,DC=com”等)

粗体位代表脚本中的变量,您需要对第一次搜索容器时找到的每个容器进行单独的查询。

这听起来很疯狂。你还必须弄清楚如何处理子树搜索中的递归等。

另一种方法是只搜索您想要搜索的对象,并以编程方式检查每个对象的直接父容器是否为 OU=lib,如果不是,则将其丢弃。这可能稍微不那么疯狂。

但关键是,你必须编写脚本或编码。通配符可用于对象 *(telephonenumber=**555)* 或对象类型的属性(对象类=用户),但不适用于搜索库中的节点。

相关内容