단일 LDAP API 호출로이를 수행 할 방법이 없습니다. givenName 및 sn 속성을 얻으려면 항상 하나의 LDAP 검색 작업을 사용해야하며 displayName 속성을 수정하려면 LDAP 수정 작업을 하나만 사용해야합니다.
명령 줄 ldaptools "ldapsearch"및 "ldapmodify"를 사용하는 경우 일부 셸 스크립트를 사용하면 쉽게 수행 할 수 있지만주의해야합니다. ldapsearch (1)은 LDIF 데이터를 base64 형식 ascii 이상의 문자를 포함하는 UTF-8 문자열을 사용합니다. 예 : 'sn :: Base64data'(이중 ':'에주의하십시오.)
그래서 내가 선택한 경우 원하는 언어로 간단한 스크립트를 사용합니다. 쉘 스크립트 명령 대신 LDAP API가 있습니다. . 이렇게하면 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) 위에 "가상"속성 또는 Penrose 또는 Oracle Virtual Directory와 같은 가상 디렉토리를 유지하는 특수 OpenLDAP 모듈을 사용해야 할 것입니다. 그러나 이는 속성의 간단한 연결에있어 과도 할 수 있습니다.
기여금에는 Thnx이지만 ldap_search에는 통화 당 1000 건의 레코드 제한이 있으며 100,000 개 이상의 레코드가 있습니다. 이 문제를 해결하는 방법. –
ldap_search에는 그와 같은 제한이 없습니다. 서버는 특정 구성을 가지고 있습니다. 그에 따라 서버 구성을 변경할 수 있습니다. –