15

在我的 LDAP 客户端程序中,有时我必须在搜索过滤器中包含 DN 值。但是这个 DN 经常变化,每次我都必须在我的代码中更改这个过滤器。

当我用谷歌搜索它时,我得到了这样的东西

假设您要从 R&D 和 HR ous 中提取 ObjectType = Person 的所有用户,但不从 Marketing 和 PM 中提取任何用户。过滤器将是:

(&(objectClass=person)(|(ou:dn:=ResearchAndDevelopment)(ou:dn:=HumanResources)))

有人可以更详细地解释一下吗?

4

2 回答 2

18

您应该检查RFC 2254(LDAP 搜索过滤器的字符串表示)。

LDAP 过滤器对布尔运算符使用波兰符号。所以运算符写在它的操作数之前:

(&(condition1)(condition2)(condition3)...)

上面的示例意味着您想要所有满足条件1 AND条件2条件3 的 LDAP 条目,依此类推。

然后有条件自己。它们非常简单,只能包含几种类型:

  • 目前状况 -(attrName=*)
  • 简单条件 - (attrName>=value)/ (attrName<=value)/ (attrNamevalue=value)/(attrName~=value)
  • 子串条件- (attrName=*value*)//(attrName=*value)(attrName=value*)
  • 可扩展条件 - (attrName:dn:=value)/(attrName:matchingRule:=value)

带有关键字的可扩展条件:dn:意味着您希望条目 DN 中的属性也被考虑在内。因此,对于您的案例条目cn=John Doe,ou=HumanResources,ou=Users,dc=example,dc=com将匹配过滤器(ou:dn:=HumanResource)


将您的示例过滤器翻译成英文句子将是:

找到所有 LDAP 条目,它们objectClass等于person并且在它们的属性中或在它们的 DN 上的某个地方ResearchAndDevelopment具有或。HumanResourcesou

于 2014-08-08T18:31:35.050 回答
0

您可以使用 dn 进入 base 并将搜索范围设置为base.

即设置dn值为base搜索范围设置为(搜索范围为basebase、sub、one之一)。

于 2021-09-29T07:56:45.793 回答