2008-10-28 70 views
5

我無法對我們公司的LDAP服務器運行復雜的查詢。雖然前兩個過濾器的工作(如返回預期值),最後和複雜的不如何使用Perl的Net :: LDAP進行復雜的查詢?

use Data::Dumper; 
use Net::LDAP; 

die "Can't connect to LDAP-Server: [email protected]\n" 
    unless $ldap = Net::LDAP->new('xLDAPx'); 


foreach my $filter ('ou=Personal', 'ou=BAR', 'ou=Personal,ou=BAR', 'ou=Personal,ou=FOO,o=FOO,dc=foo,dc=com') 
{ 
    $mesg = $ldap->search(base => "o=FOO,dc=foo,dc=com", filter => $filter); 
    print Dumper($mesg), "\n\n"; 
} 

:我使用下面的Perl腳本。它返回一個空數組。真令我困惑的是,當我使用Softerra LDAP Browser等工具時,查詢字符串完全相同。

我也試過相同的查詢使用PHP的ldap_search & co,無濟於事。

有人可以對此有所瞭解嗎?

感謝您閱讀

holli

編輯: 這是服務器的結構:

Server 
    ou=FOO 
     ou=... 
     ou=Personal 
      uid=something 

我需要的UID的列表。

+0

總是`使用嚴格;`和`使用警告;`。 – 2008-10-30 04:24:40

回答

5

我想你想讓它更像(&(ou=Personal)(ou=FOO)(o=FOO)(dc=foo)(dc=com))。 但是你完全不清楚你想要什麼,所以我不能爲你做一個過濾器。

編輯補充:我猜這是你想做的事:(|(ou=Personal)(ou=FOO))

4

原因是您沒有提供語法上正確的過濾器字符串,而是部分DN。我無法想象這在Ldap瀏覽器中有效 - 我只是嘗試過自己而沒有成功。

前兩個是正確的過濾器字符串。它們以「({attribute} = {value})」方式過濾單個對象屬性。第一個(「ou =個人」)會返回您的搜索庫中名爲「個人」的任何OU。

如果您更詳細地解釋您正在嘗試查找的內容,我可能會告訴您需要哪種過濾器表達式。

+0

添加服務器結構到OP – holli 2008-10-28 09:45:14

+0

對不起,但問題仍不清楚。什麼是你的上下文中的「uids」?對象本身的權利,還是不同對象的屬性? – Tomalak 2008-10-28 09:48:05

2

編寫符合RFC 2254 一個過濾器,然後看看會發生什麼。您不需要複雜的查詢,您需要一個分支下的每個條目的一個屬性。查看搜索方法的attrs參數。