我有一個很大的OpenLDap目錄。在目錄顯示名稱屬性爲每個填充,但我需要修改這些條目,並使其像「givenName + + sn」。是否有辦法像sql查詢(更新查詢)一樣直接在目錄中執行操作。我已經閱讀了關於ldapmodify,但無法找到像這樣使用它的方式。修改OpenLDAP目錄中的條目
在這方面的任何幫助將不勝感激。
我有一個很大的OpenLDap目錄。在目錄顯示名稱屬性爲每個填充,但我需要修改這些條目,並使其像「givenName + + sn」。是否有辦法像sql查詢(更新查詢)一樣直接在目錄中執行操作。我已經閱讀了關於ldapmodify,但無法找到像這樣使用它的方式。修改OpenLDAP目錄中的條目
在這方面的任何幫助將不勝感激。
無法通過單個LDAP API調用完成此操作。您將始終必須使用一個LDAP搜索操作來獲取givenname和sn屬性,以及一個LDAP修改操作來修改displayName屬性。
如果您使用命令行ldaptools「ldapsearch」和「ldapmodify」,您可以使用某些shell腳本輕鬆完成此操作,但您必須小心:有時ldapsearch(1)可以以base64格式返回LDIF數據,UTF-8字符串包含ascii以外的字符。例如:'sn :: Base64data'(注意雙':')
所以,如果我是你,我會用我的語言選擇一個簡單的腳本,它有一個LDAP API,而不是使用shell命令。這將爲我節省ldaptools有時施加的base64解碼的麻煩。
例如,對於PHP-CLI下,你的腳本將大致這樣的(或許更多一些錯誤檢查將是適當的):
<?php
$ldap = ldap_connect('host');
ldap_bind($ldap, ...);
$sr = ldap_search($ldap, 'ou=people,...', 'objectclass=*');
$entries= ldap_get_entries($ldap, $sr);
for($i=0; $i<$entries['count']; $i++) {
$modify = array('displayname' => $entries[$i]['givenname'] . ' ' . $entries[$i]['sn']);
ldap_modify($ldap, $entries[$i]['dn'], $modify);
}
附錄:如果你想保持這個數據高達沒有任何干預的日期,你可能需要使用一個專門的OpenLDAP模塊來保持OpenLDAP的「虛擬」屬性,甚至是一個虛擬目錄,例如Penrose或Oracle Virtual Directory。然而,這可能是一個簡單的屬性串聯矯枉過正。
Thnx爲貢獻,但ldap_search每次調用限制爲1000條記錄,並且我有超過100K條記錄。如何解決這個問題。 – 2010-08-03 08:17:51
ldap_search本身沒有這樣的限制。您的服務器具有其特定的配置。您可以相應地更改服務器配置。 – 2010-08-04 15:36:22