2013-09-30 47 views
2

我有LDAP條目的DN。我知道我可以搜索它:做這樣的事情:Perl Net :: LDAP - 不帶搜索的提取DN?

my $search = $ldap->search( 
    base => $dn, 
    scope => "base", 
    filter => "(objectclass=*)", 
); 

但是,我並不需要做搜索。我有DN。我只是想拉出DN條目,並直接在那做我的操作。事情是這樣的:

my $dn_entry = $ldap->get($dn); 

有沒有得到來自DN字符串本身的DN條目的方法,或者你必須搜索爲入門,即使你知道DN本身?

回答

2

使用LDAP時,客戶端必須始終搜索或使用擴展操作來獲取數據。如果你有興趣與項目相關的所有屬性,而DN是已知的,使用下面的參數在搜索請求:

  • baseObject:即知
  • 搜索範圍的DN:基地
  • 過濾器:或者(&)(objectClass=*)
  • 要返回的屬性列表。一些API對所有用戶屬性使用*,對所有操作屬性使用+
+0

是的,這是我基本上做的:搜索基地是DN,範圍是_base_,過濾器是'(objectclass = *)'。我沒有想到把它做成(&)'。似乎必須有某種方式直接獲取DN,但是查看各種LDAP API,除了通過搜索之外,它們都不包含任何_fetching_條目。 –

+0

您所描述的正是LDAP的工作原理。 –

0

它聽起來像你說的是,你已經存儲了「專有名稱」(字符串)而不是DN條目(一個Net::LDAP::Entry對象)。如果是這種情況,我相信你必須從DN創建一個新的Net::LDAP::Entry對象。該文檔指出,您可以將操作直接應用於此類對象,而無需與服務器同步,但這不會提供給定DN的所有數據。如果你需要服務器的數據,你需要通過$ldap->search(...)得到它。

您是否考慮過使用Net::LDAP::LDIFmechanism來在本地存儲DN數據?

+0

是的,我有DN字符串,而不是條目。我們正在從'svn_auth_file'移動到LDAP,並且我正在拔出管理鏈下的所有用戶。 Manager具有_directReports_屬性,其中包含直接報告的員工的DN字符串。我需要通過這些直接報告遞減,直到我擁有整個組織爲止。由於我有DN字符串,我認爲使用該DN字符串搜索DN Entry會很愚蠢。我希望有一些方法可以直接檢索該DN。 –