我搜索过这个主题,但我找到的只是过滤器,它返回不存在某个属性的条目,例如:
(!(manager=*))
但是,我想找到属性存在的条目,但是具有空值(即空/空字符串)。我可以使用LDAP过滤器执行此操作吗?如果是,如何执行此操作?
编辑:
为了确认,上面的过滤器找到没有属性的条目,但没有查找属性为空的条目(空字符串)。
这取决于LDAP实现还是什么?
答案 0 :(得分:18)
从LDAP中,没有用于确定空字符串的查询方法。
最佳做法是将数据输入清理到LDAP,因为LDAP中的空值或空值根本没有值。
要确定这一点,您需要使用值(manager = *)查询所有值,然后使用代码确定那些“空格”或空值。
正如Terry所说,在DN语法的属性中存储空值或空值是错误的。
某些LDAP服务器实施将不允许输入DN条目不存在的DN。
也许,如果你的DN是一致的,你可以使用类似的东西:
(&(!(manager=cn*))(manager=*))
这应该返回经理的值的经理的任何值,并且它不以“cn”开头。
但是,某些LDAP实现不允许对DN语法属性进行子字符串搜索。
-Jim
答案 1 :(得分:6)
使用\00
例如:
ldapsearch -D cn=admin -w pass -s sub -b ou=users,dc=acme 'manager=\00' uid manager
确保在命令行上使用null值来使用它周围的引号以防止OS shell向LDAP发送空字符。例如,这不起作用:
ldapsearch -D cn=admin -w pass -s sub -b ou=users,dc=acme manager=\00 uid manager
有各种网站引用此内容以及其他特殊字符。例如:
答案 2 :(得分:5)
这篇文章http://technet.microsoft.com/en-us/library/ee198810.aspx引导我找到解决方案。唯一的变化是感叹号的放置。
(!manager=*)
它似乎正常工作。
答案 3 :(得分:2)
从语义上讲,这些案例在LDAP中没有区别。
答案 4 :(得分:2)
属性的模式定义确定属性是否必须具有值。如果给定示例中的manager
属性是RFC4524中使用OID 0.9.2342.19200300.100.1.10
定义的属性,则该属性具有DN语法。 DN语法是一系列相对可分辨名称,不能为空。示例中给出的过滤器用于使LDAP目录服务器仅在搜索结果中向LDAP客户端返回不具有manager
属性的条目。
答案 5 :(得分:2)
我需要进行查询以获取所有具有managedBy值集(非空)的组,这会产生一些不错的结果:
(!(!=的ManagedBy *))