大きな Openldap ディレクトリがあります。ディレクトリでは、すべての表示名プロパティが入力されていますが、これらのエントリを変更して、「givenName + + sn」のようにする必要があります。SQLクエリ(クエリの更新)と同じように、ディレクトリで直接実行できる方法はありますか。ldapmodify について読みましたが、このように使用する方法が見つかりませんでした。
この点で何か助けていただければ幸いです。
単一の LDAP API 呼び出しでこれを行う方法はありません。givenname および sn 属性を取得するために 1 つの LDAP 検索操作を使用し、displayName 属性を変更するために 1 つの LDAP 変更操作を常に使用する必要があります。
コマンド ラインで ldaptools "ldapsearch" および "ldapmodify" を使用すると、これをシェル スクリプトで簡単に実行できますが、注意が必要です。 ascii 以外の文字を含む 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 モジュールを使用するか、ペンローズや Oracle Virtual Directory などの仮想ディレクトリを使用する必要があります。 OpenLDAP。ただし、これは属性の単純な連結にはやり過ぎかもしれません。