在我的 LDAP 客户端程序中,有时我必须在搜索过滤器中包含 DN 值。但这个 DN 经常变化,每次我都必须在我的代码中更改这个过滤器。
当我用谷歌搜索时,我得到了这样的东西
假设您想要从 R&D 和 HR 中提取所有 ObjectType = Person 的用户,但不从 Marketing 和 PM 中提取任何用户。过滤器将是:
(&(objectClass=person)(|(ou:dn:=ResearchAndDevelopment)(ou:dn:=HumanResources)))
谁能更详细地解释一下吗?
您应该检查RFC 2254(LDAP 搜索过滤器的字符串表示形式)。
LDAP 过滤器对布尔运算符使用 polish notation。所以运算符写在操作数之前:
(&(condition1)(condition2)(condition3)...)
上面的示例意味着您需要满足 条件 1 AND 条件 2 AND 条件 3 等等的所有 LDAP 条目。
然后是条件本身。它们非常简单,只能包含几种类型:
(attrName=*)
(attrName>=value)
/ (attrName<=value)
/ (attrName=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)
匹配。
将示例过滤器翻译成英文句子将是:
为我查找所有
等于objectClass
且在其“ou”属性或 DN 上某处具有person
或ResearchAndDevelopment
的 LDAP 条目。HumanResources
您可以使用 dn 作为基础并将搜索范围设置为
base
。
即将dn值设置为base,并将搜索范围设置为
base
(搜索范围为base、sub和1之一)。
如果您确实需要按整个 DN 搜索,您可以使用以下方式搜索:
(distinguishedName=CN=MyCommonName,OU=SomeEnv,...,DC=SomeDir)