OpenLDAP过滤器无法返回空OU问题求助
解决OpenLDAP获取无子条目OU的问题
你的过滤器逻辑存在明显错误:(&(objectClass=organizationalUnit)(!(objectClass=*))) 中的!(objectClass=*)条件完全不成立——所有LDAP条目都必须包含objectClass属性,这个条件会直接排除所有结果,自然无法得到目标OU列表。
以下是两种可行的解决方案:
方法1:使用hasSubordinates属性筛选
OpenLDAP支持hasSubordinates属性,该属性会标记条目是否存在子条目。直接筛选该属性为FALSE的OU即可:
- 正确过滤器:
(&(objectClass=organizationalUnit)(hasSubordinates=FALSE))
方法2:使用链式匹配规则排除有子OU的条目
如果环境中hasSubordinates属性不可用,可借助LDAP链式匹配规则(1.2.840.113556.1.4.1941)筛选无子OU的条目:
- 正确过滤器:
(&(objectClass=organizationalUnit)(!(objectClass=organizationalUnit:1.2.840.113556.1.4.1941:=*)))
执行搜索的注意事项
确保搜索范围设置为子树搜索(SUBTREE),这样才能遍历基准DN(ou=compay,ou=drivers,dc=core,dc=com)下的所有OU。
示例命令(ldapsearch)
ldapsearch -x -b "ou=compay,ou=drivers,dc=core,dc=com" -s sub "(&(objectClass=organizationalUnit)(hasSubordinates=FALSE))" dn
该命令会输出所有符合条件的无子条目OU的DN。
内容的提问来源于stack exchange,提问作者Connie DeCinko
相关产品推荐
相关产品推荐

