2011-05-26 100 views
1

我使用的筛选器为(cn=${prefix}*),其中$prefix = 'a';但仍显示找到0个记录。如何使用LDAP.pm查找以'a'开头的记录密钥?

鉴于当我在没有此过滤器的情况下进行简单搜索时,我发现许多记录以'a'开头。

这是部分代码: - my $ prefix = shift(); 我的$结果= $ LDAP->搜索(基础=> “$ ldapbase”, 范围=> “子”, 滤波器=> “(对象类= )(CN = $前缀)”, ATTRS => ['*'] )或死“错误搜索树:$ @ \ n”;

my $ldapbase给我所有员工的详细信息,我只想要那些以'a'开头的人。

+0

记录是以'a'还是记录的关键字开头? – TLP 2011-05-26 11:49:31

+0

记录密钥(例如名称)以 – james 2011-05-26 12:28:33

+0

开头您正在使用哪种LDAP.pm?有几个。 – TLP 2011-05-26 12:34:01

回答

0

向LDAP管理员提醒您打算发出涉及使用子字符串的请求可能是明智之举。 LDAP管理员可能能够将CN索引为子字符串搜索,因此搜索速度会更快。筛选器'(cn=a*)'是一个子字符串过滤器,应从您的搜索库'向下'(您使用示例中的子树作用域)返回以字母'a'或'A'开头的所有CN属性(CN可能是一个DirectoryString类型并且可能没有区分大小写)。

从实用的角度来看,一些较老的目录服务器需要的子'*'字符子索引来工作之前多个字符,例如'(cn=ab*)'可能使用一些服务器上的索引,而'(cn=a*)'可能不会使用索引。

在您的代码示例中,列出筛选器'(objectClass=)(cn=$prefix)',它不是合法的LDAP搜索筛选器。也许你的意思是'(&(objectClass=inetOrgPerson)(cn=${prefix}*))'(inetOrgPerson可能是一些其他的对象类),列出的代码是一个错字。如果只需要以“a”或“A”开头的条目的DN,则可以请求“特殊”属性“1.1”,这样只需输入DN并且不返回任何属性。