2013-06-27 41 views
0

我正在嘗試使用OpenLDAP API執行LDAP搜索。我已經成功連接並綁定到服務器。我用ldap_search_ext_s()完成了搜索,並用ldap_parse_result()解析了結果。但是,我似乎無法弄清楚如何獲得搜索的實際結果。不幸的是,OpenLDAP C API最近發生了變化,互聯網上的許多現有示例都沒有使用當前的API。OpenLDAP API搜索

我已經試圖使用ldap_first_attribute(),ldap_next_attribute()和ldap_get_values(),如http://www-archive.mozilla.org/directory/csdk-docs/search.htm(示例6-13)所示。但是,看起來ldap_get_values()現在已被棄用,並且ldap_get_values_len()是最接近的替代品。而不是返回char **,新函數返回一個berval **。我試圖通過用barval ** [i]的值創建一個berval *來調整這個示例代碼。這會導致成功編譯,但是會在ber_scanf()上進行核心轉儲。

有誰知道如何使用OpenLDAP C API獲得LDAP搜索的結果?

UPDATE:

特別,我問如何從搜索消息所請求的屬性。

回答

0

在研究了OpenLDAP API源代碼並瞭解如何使用berval值之後,我最終偶然發現瞭如何獲得它的價值。

首先,您必須獲得ldap_first_entry()的第一個條目。然後,您需要獲取ldap_first_attribute()的該條目中的第一個屬性。然後,將這些值與ldap_get_values_len()一起放入berval **數組中。然後可以使用berval[i]->bv_val訪問返回的屬性值。

您可以分別使用ldap_next_entry()ldap_next_attribute()獲取下一個條目和屬性。

我希望這可以幫助任何有類似問題的人。

0

搜索請求的結果始終包含一系列SearchResultEntrySeachResultReference消息,該系列消息由SearchResultDone消息終止。調用getNextAttribute(使用任何語言和任何API)是沒有意義的,因爲搜索結果是消息列表。 API應該以調用者可以簡單地檢索條目或引用列表的方式打包條目或引用的數組。尋找一種方法來做到這一點。

+0

如何從消息中獲取請求的屬性? – Eric