2010-07-26 3 views
1

커다란 Openldap 디렉토리가 있습니다. 디렉토리에있는 모든 표시 이름 속성이 채워지지만이 항목을 수정하고 "givenName + + sn"과 같이 만들 필요가 있습니다. SQL 쿼리 (업데이트 쿼리)와 마찬가지로 디렉터리에서 직접 수행 할 수있는 방법이 있습니까? 나는 ldapmodify에 대해 읽었지만 이것을 이렇게 사용할 수있는 방법을 찾지 못했습니다.OpenLDAP 디렉토리의 항목을 수정하십시오.

이와 관련하여 도움이 될 것입니다.

답변

2

단일 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 모듈을 사용해야 할 것입니다. 그러나 이는 속성의 간단한 연결에있어 과도 할 수 있습니다.

+0

기여금에는 Thnx이지만 ldap_search에는 통화 당 1000 건의 레코드 제한이 있으며 100,000 개 이상의 레코드가 있습니다. 이 문제를 해결하는 방법. –

+0

ldap_search에는 그와 같은 제한이 없습니다. 서버는 특정 구성을 가지고 있습니다. 그에 따라 서버 구성을 변경할 수 있습니다. –

관련 문제