PHP LDAP 搜索似乎不匹配 *


PHP LDAP Search seems not to be matching *

使用 LDAP 搜索和 * 似乎可以很好地处理单词,但对于数字似乎不起作用:

我的类的调试输出(自制软件):

Query: Peter is string
Search for cn=Peter
Search for cn=Peter*
Found: 439
Query: 7565 is number
Search for PersonID=7565
Search for PersonID=7565*
Found: 0
Query: 7565025 is number
Search for 
Found: 1
有点

难以显示代码,因为它是类的集合,但执行搜索的部分使用 for 之后的字符串:

例如(这是捏造的)

ldap_search($connection, $base, "cn=Peter*", array("dn"));
ldap_search($connection, $base, "PersonID=7565", array("dn"));
ldap_search($connection, $base, "PersonID=7565025", array("dn"));

你知道为什么7565*上的第二个查询没有返回结果,而完整数字的最后一个查询返回结果吗?

谢谢

您可能知道在您的 LDAP 目录上,您有一个架构。众所周知,SCHEMA 提供类(类型)和属性。但实际上在大多数目录中,SCHEMA 为属性提供了另外两个功能:

  1. 由 OID 给出的属性的语法
  2. 有效用于匹配属性的匹配规则

例:

attributeType ( 2.5.4.41 NAME 'name'
                DESC 'name(s) associated with the object'
                EQUALITY caseIgnoreMatch
                SUBSTR caseIgnoreSubstringsMatch
                SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )

在示例中,匹配规则是 EQUALITY 和 SUBSTR,它们大部分时间都链接到Directory String语法 (1.3.6.1.4.1.1466.115.121.1.15)。

您可能会遇到以下匹配规则:

EQUALITY
ORDERING
SUBSTR

匹配规则SUBSTR是编写筛选器时常用(cn=Peter*)

规则

所以我的建议是:看看你的架构中的属性"PersonID","语法/匹配规则"会给你可以应用的过滤器类型