2011-05-26 99 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並且不返回任何屬性。