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

时间:2013-01-21 15:10:35

标签: ldap

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

(!(manager=*))

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

编辑:

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

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

6 个答案:

答案 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 *))