そろそろLDAPにしてみないか?
第8回 LDAPデータ管理
本連載では今までさまざまなソフトウェアとLDAPの連携を紹介してきたわけですが,今回は今までほとんど触れていなかったデータ管理についてお話ししたいと思います。
エントリの追加
リスト1のようなLDIFファイルが存在した場合を考えてみましょう。
リスト1 orig.ldif
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: example
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People
dn: cn=suzuki,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
sn: suzuki
cn: suzuki
mail: suzuki@example.com
dn: cn=tanaka,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
sn: tanaka
cn: tanaka
mail: tanaka@example.com
mail: a.tanaka@example.com
このエントリをLDAPサーバに追加するためには,図1のようにldapaddコマンドを使用してきました。今さらですが,-xオプションはSASLなどを使用しないシンプル認証,-DではバインドDNの指定,-wではバインドパスワードの指定を行います。SSL/TLSを使用しない限り,シンプル認証では平文のパスワードがネットワーク上を流れるため,注意が必要です。
図1 ファイル指定によるエントリ追加
% ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret -f orig.ldif
すでにご存じの方もいらっしゃるかもしれませんが,ldapaddコマンドの-fオプションでファイルを指定するのではなく,標準入力から設定を更新する方法もあります(図2)。
図2 標準入力を利用したエントリ追加
% ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret < orig.ldif
これをうまく使えば,図3のようにUTF-8形式に変換したファイルをldapaddコマンドに渡すことも可能です。(LDAPサーバに日本語データを登録するためには,値をUTF-8形式に変換しておく必要があります)
図3 UTF-8形式に変換したファイルをldapaddに渡す
% lv -Ou8 orig.ldif | ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret
または
% nkf -w orig.ldif | ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret
また,ldapaddコマンドのファイルの状態をよく見てみるとわかりますが,ldapaddコマンドは多くの場合ldapmodifyコマンドへのリンクとなっており,実行時のコマンド名によって挙動が変化するようになっています(gentoo Linuxやソースからmakeした環境ではシンボリックリンクでしたが,CentOSの場合はハードリンクになっているようです)。
ldapmodifyコマンドは文字通りエントリを編集するために使われますが,-aオプションを使用することで次のようにldapaddコマンド同様,エントリの追加を行うことも可能です。
図4 ldapmodifyによるエントリ追加
% ldapmodify -a -x -D "cn=Manager,dc=example,dc=com" -w secret -f orig.ldif


