如何使用包含逗号的 DN 作为 LDAP 搜索过滤器中的属性值?
How to use a DN containing commas as the attribute value in an LDAP search filter?
正在尝试根据值为 DN 的属性搜索我们的目录。但是,我们的用户 RDN 的格式为 CN=Surname, GivenName
,这要求在完整的 DN 中用引号引起来。但是给定一个像 manager
这样的属性,它的值是另一个用户的 DN,我无法搜索所有拥有特定经理的用户。我试过 (manager=CN=Surname\, GivenName,CN=users,DC=mydomain,DC=com)
,但出现语法错误 "Bad search filter"。我尝试了各种选项来引用 DN,但所有选项要么给我一个语法错误,要么无法匹配任何对象。我做错了什么?
(请注意,如果我直接查找用户对象,我可以简单地搜索 (CN=Surname, GivenName)
,不需要引号,但我正在搜索具有特定经理的用户。包含逗号的属性值仅当是专有名称的一部分时才会成为问题。)
问题是在Common Name中引用逗号不是为了过滤解析器的利益,而是为了DN解析器的利益;过滤器传递给它的属性值必须按字面意思包含反斜杠字符。不幸的是,反斜杠在 LDAP 过滤器中也(不同地)特殊,因此出现语法错误。
解决方法很简单,但不如加倍反斜杠那么明显; LDAP 过滤器中的反斜杠类似于 URI 中的 %
,因此您必须使用文字反斜杠,后跟 2 位十六进制代码点作为反斜杠:
(manager=CN=Surnamec, Givenname,OU=org,DC=mydomain,DC=com)
原来在 https://docs.oracle.com/cd/E19424-01/820-4811/gdxpo/index.html#6ng8i269q 的最底部有这个特定用例的示例。
正在尝试根据值为 DN 的属性搜索我们的目录。但是,我们的用户 RDN 的格式为 CN=Surname, GivenName
,这要求在完整的 DN 中用引号引起来。但是给定一个像 manager
这样的属性,它的值是另一个用户的 DN,我无法搜索所有拥有特定经理的用户。我试过 (manager=CN=Surname\, GivenName,CN=users,DC=mydomain,DC=com)
,但出现语法错误 "Bad search filter"。我尝试了各种选项来引用 DN,但所有选项要么给我一个语法错误,要么无法匹配任何对象。我做错了什么?
(请注意,如果我直接查找用户对象,我可以简单地搜索 (CN=Surname, GivenName)
,不需要引号,但我正在搜索具有特定经理的用户。包含逗号的属性值仅当是专有名称的一部分时才会成为问题。)
问题是在Common Name中引用逗号不是为了过滤解析器的利益,而是为了DN解析器的利益;过滤器传递给它的属性值必须按字面意思包含反斜杠字符。不幸的是,反斜杠在 LDAP 过滤器中也(不同地)特殊,因此出现语法错误。
解决方法很简单,但不如加倍反斜杠那么明显; LDAP 过滤器中的反斜杠类似于 URI 中的 %
,因此您必须使用文字反斜杠,后跟 2 位十六进制代码点作为反斜杠:
(manager=CN=Surnamec, Givenname,OU=org,DC=mydomain,DC=com)
原来在 https://docs.oracle.com/cd/E19424-01/820-4811/gdxpo/index.html#6ng8i269q 的最底部有这个特定用例的示例。