1

大きな Openldap ディレクトリがあります。ディレクトリでは、すべての表示名プロパティが入力されていますが、これらのエントリを変更して、「givenName + + sn」のようにする必要があります。SQLクエリ(クエリの更新)と同じように、ディレクトリで直接実行できる方法はありますか。ldapmodify について読みましたが、このように使用する方法が見つかりませんでした。

この点で何か助けていただければ幸いです。

4

1 に答える 1

3

単一の 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。ただし、これは属性の単純な連結にはやり過ぎかもしれません。

于 2010-07-30T11:27:40.000 に答える