在搜索过滤器中使用DN

Dun*_*ter 8 ldap ldap-query

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

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

假设您想从研发和人力资源中提取ObjectType = Person的所有用户,而不是来自Marketing和PM的任何用户.过滤器将是:

(&(objectClass=person)(|(ou:dn:=ResearchAndDevelopment)(ou:dn:=HumanResources)))
Run Code Online (Sandbox Code Playgroud)

任何人都可以更详细地解释这一点吗?

Pav*_*ral 10

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

LDAP过滤器对布尔运算符使用波兰表示法.所以运算符在其操作数之前写入:

(&(condition1)(condition2)(condition3)...)
Run Code Online (Sandbox Code Playgroud)

上面的示例意味着您需要满足condition1 AND condition2 AND condition3的所有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和要么ResearchAndDevelopmentHumanResources在他们的ou属性,或者某个地方的DN.

  • 请注意,对这些条件的支持因供应商而异。例如,Active Directory不支持可扩展条件,并且将相等的近似相等(`〜=`)和相等相等(`=`)。[参考。](http://ldapwiki.com/wiki/ExtensibleMatch) (2认同)