在搜索过滤器中使用DN

时间:2011-09-19 15:02:57

标签: ldap ldap-query

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

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

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

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

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

1 个答案:

答案 0 :(得分:10)

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

LDAP过滤器使用polish notation作为布尔运算符。因此,运算符在其操作数之前写入:

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

上述示例意味着您希望所有满足 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并且ResearchAndDevelopment属性中HumanResourcesou或其DN上某个位置的LDAP条目。