OpenLDAP 2.4.23升级至2.5.14后特定过滤查询无法返回结果求助
解决OpenLDAP 2.5.14中特定过滤条件的查询问题
问题根源
OpenLDAP 2.5.x版本对LDAP过滤规则的合规性校验与逻辑处理比2.4.x更为严格。你使用的过滤条件(&(&(&givenName>=0)(givenName<=zz))(|(givenName=user*)(sn=user*)))中,范围匹配(>=0/<=zz)与前缀通配符匹配(user*)的组合触发了新版本的逻辑限制:2.5版本会严格校验字符串范围匹配的排序规则,同时调整了通配符匹配的处理逻辑,导致原有过滤逻辑无法正确返回结果。
解决方案
由于无法修改客户端查询语句,可通过以下几种方式调整OpenLDAP配置来兼容原有过滤逻辑:
1. 调整字段索引配置
确保givenName和sn字段配置了支持范围匹配与前缀匹配的索引,让OpenLDAP能高效处理该过滤条件:
- 修改slapd.conf(或通过cn=config动态配置):
# 为givenName添加范围、等值、前缀索引 index givenName eq,pres,sub,ge,le # 为sn添加等值、前缀索引 index sn eq,pres,sub - 重启slapd服务后,重建索引:
slapindex -b "你的基准DN"
2. 启用Legacy过滤兼容模式
OpenLDAP 2.5提供了olcFilterPolicy配置项,设置为legacy可兼容2.4版本的过滤逻辑:
- 创建LDIF配置文件(如
filter-policy.ldif):dn: cn=config changetype: modify replace: olcFilterPolicy olcFilterPolicy: legacy - 执行配置修改:
该方案可快速解决兼容性问题,但会降低过滤规则的严格性,仅建议作为过渡方案使用。ldapmodify -Y EXTERNAL -H ldapi:/// -f filter-policy.ldif
3. 统一排序规则配置
确认OpenLDAP使用的排序规则与2.4版本一致,避免范围匹配逻辑差异:
- 创建LDIF配置文件(如
collation.ldif):dn: cn=config changetype: modify add: olcCollation olcCollation: en_US.UTF-8 - 执行配置修改并重启服务:
ldapmodify -Y EXTERNAL -H ldapi:/// -f collation.ldif systemctl restart slapd
验证
使用ldapsearch测试过滤条件是否正常返回结果:
ldapsearch -x -b "你的基准DN" "(&(&(&givenName>=0)(givenName<=zz))(|(givenName=user*)(sn=user*)))"
内容的提问来源于stack exchange,提问作者Hadi Najem
相关产品推荐
相关产品推荐

