空白(空)属性的LDAP过滤器

myd*_*rms 24 ldap

我搜索过这个主题,但我找到的只是过滤器,它返回不存在某个属性的条目,例如:

(!(manager=*))
Run Code Online (Sandbox Code Playgroud)

但是,我想查找属性存在的条目,但是具有空值(即空/空字符串).我可以使用LDAP过滤器执行此操作吗?如果是,如何执行此操作?

编辑:

只是为了确认,上面的过滤器找到没有属性的条目,但没有找到属性为空的条目(空字符串).

这取决于LDAP实现还是什么?

jwi*_*eke 20

从LDAP,没有用于确定空字符串的查询方法.

最佳做法是将数据输入清理到LDAP,因为LDAP中的空值或空值根本没有值.

要确定这一点,您需要使用值查询all(manager =*),然后使用代码确定那些是"space"或null值的代码.

正如Terry所说,在DN语法的属性中存储空值或空值是错误的.

某些LDAP服务器实现不允许输入DN条目不存在的DN.

也许,如果您的DN一致,您可以使用以下内容:

(&(!(manager=cn*))(manager=*))
Run Code Online (Sandbox Code Playgroud)

这应该返回经理的值的经理的任何值,并且它不以"cn"开头.

但是,某些LDAP实现不允许对DN语法属性进行子字符串搜索.

-Jim

  • 没有旁白:模式在确定可以使用哪些类型的过滤器中起作用。断言取决于属性的类型,语法,顺序和匹配规则。这就是断言的工作方式。 (2认同)

Mat*_*att 7

使用搜索空值 \00

例如:

ldapsearch -D cn=admin -w pass -s sub -b ou=users,dc=acme 'manager=\00' uid manager
Run Code Online (Sandbox Code Playgroud)

确保在命令行上使用null值来使用它周围的引号以防止OS shell向LDAP发送空字符.例如,这不起作用:

 ldapsearch -D cn=admin -w pass -s sub -b ou=users,dc=acme manager=\00 uid manager
Run Code Online (Sandbox Code Playgroud)

有各种网站引用它,以及其他特殊字符.例:


小智 6

这篇文章http://technet.microsoft.com/en-us/library/ee198810.aspx引导我找到解决方案.唯一的变化是感叹号的位置.

(!manager=*)
Run Code Online (Sandbox Code Playgroud)

它似乎正如所希望的那样工作.

  • ldap_search_ext:错误的搜索过滤器 (-7) (2认同)