OpenLDAP/日本語で名簿検索
2000/09/06 H.Suzuki (setter AT i-red DOT info)
2002/09/25 Update. for 2.1.5
BACK
openldap-2.0.7 を openldap-2.1.5 にアップデートした時にひっかっかったこと。
・schima の互換性が無いようです。
そのため、make install を行う前に、
mv /usr/local/etc/openldap /usr/local/etc/openldap.bkup
などとし、make install 後、
cp /usr/local/etc/openldap/slapd.conf /usr/local/etc/openldap/slapd.conf
として、slapd.conf を書き戻した。
・ldap_v2 によるバインドがデフォルトではできなくなっているので、
allow bind_v2
をslapd.conf に追加した。
・ldbm をデフォルトでは使わなくなっているので
・Berkeley DBをインストールするか
・configure 時に --disable-bdb --enable-ldbm をオプションで付け足す。
必要がある。
・ldapadd が異様に早くなっている。
WARNING!!
この文書?の設定で、LDAPに触れることができると思います。
単純に、日本語名などを、引けるようになると思いますが、
アクセスコントロールや、コピーなどは一切やってません。
LDAPって、思ってたより、とっても奥が深くて、複雑 (;;)
なお、筆者の予期せぬ“うそ”が含まれている可能性がある(^^;;;;ので、
くれぐれも、鵜呑みにしないように。
必要なもの
utf8 エントリを作るのに、LV が必要ですので、
インストールしておいてください。
-------------------------------------------------------------
なんだ、この、わけのわからん、オブジェクトID ってやつは!?
などと嘆いていないで...
とりあえず、スキーマをいじらずにできるところまで、やってみよう。
1.OpenLDAP2.1.5のインストール
まず、 openldap-2.1.5.tgz を ftpで、ゲットします。
さらに、ここを参照
それでは、インストール。
$ ./configure --help
$ ./configure --without-cyrus-sasl --disable-kbind --without-kerberos --with
とか、
$ ./configure --without-cyrus-sasl --without-kerberos --disable-kbind --disable-bdb --enable-ldbm
オプションは、適当 (^^;;
Cyrus-SASL ライブラリはインストールしてないし、
kerberos もつかわないので。
SSLが必要な場合、openssl/ssl.h の場所を指定する。
$ make depend
$ make
$ make test
$ su
# make install
slapd.conf の directory をいじらなければ、
ここに、エントリのデータベースができる。
# mkdir /usr/local/var/openldap-ldbm
# chmod 700 /usr/local/var/openldap-ldbm
2.設定を変更する。
# vi /usr/local/etc/openldap/slapd.conf
同梱されている推奨のスキーマを追加する。
私のはこんな感じ。
[----- Contents of slapd.conf -----]
# $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.23.2.2 2002/08/19 16:21:49 kurt Exp $
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/misc.schema
#include /usr/local/etc/openldap/schema/openldap.schema
# Define global ACLs to disable default read access.
# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral ldap://root.openldap.org
pidfile /usr/local/var/slapd.pid
argsfile /usr/local/var/slapd.args
# Load dynamic backend modules:
# modulepath /usr/local/libexec/openldap
# moduleload back_ldap.la
# moduleload back_ldbm.la
# moduleload back_passwd.la
# moduleload back_shell.la
#######################################################################
# ldbm database definitions
#######################################################################
database ldbm
cachesize 5000
dbcachesize 1000000
schemacheck no
sizelimit 50 # 一度に応答する最大件数
# openldap-2.1.x ではこれが無いと Mozilla のアドレス帳から引けない
allow bind_v2
suffix "dc=hode, dc=ho, dc=ge"
#suffix "o=My Organization Name, c=US"
rootdn "cn=Manager, dc=hoge, dc=ho, dc=ge"
#rootdn "cn=Manager, o=My Organization Name, c=US"
# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw secret
# The database directory MUST exist prior to running slapd AND
# should only be accessable by the slapd/tools. Mode 700 recommended.
directory /usr/local/var/openldap-ldbm
# Indices to maintain
index objectClass eq
[----- Contents of slapd.conf end -----]
3.データベースを作る。
こんなファイルを作成
[------ Contents of c.imp ------]
dn: dc=hoge, dc=ho, dc=ge
objectclass: dcObject
objectclass: organization
o: HogeHoge
dc: hoge
dn: cn=Manager, dc=hoge, dc=ho, dc=ge
objectclass: person
objectclass: organizationalperson
objectclass: inetorgperson
cn: Manager
sn: Manager
o: HogeHoge
givenname: Manager
telephonenumber: 011-000-1111[621:244]
facsimiletelephonenumber: 011-000-2222
mail: admin@mail
ou: core
[------ End of File ------]
・基本エントリを追加
LDAP サーバを起動
$ su -c '/usr/local/libexec/slapd'
上記で作成したデータを LDAP に登録
$ ldapadd -x -D "cn=Manager, dc=hoge, dc=ho, dc=ge" -w secret -f c.imp
検索のテスト
$ /usr/local/bin/ldapsearch -x -b 'dc=hoge, dc=ho, dc=ge' '(objectclass=*)'
ちゃんと引ければ、こんなのが表示される。
version: 2
#
# filter: (objectclass=*)
# requesting: ALL
#
# hoge, dc=ho, dc=ge
dn: dc=hoge, dc=ho, dc=ge
objectClass: dcObject
objectClass: organization
o: HogeHoge
dc: hoge
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
また、Netscapeで、
ldap://ldap-server/dc=hoge, dc=ho, dc=ge
にアクセスしても見ることができる。
・さらに、データを追加
こんなファイルを作る
[------ Contents of ip.imp ------]
dn: cn=阿部 ほげ男, dc=hoge, dc=ho, dc=ge
objectclass: person
objectclass: organizationalperson
objectclass: inetorgperson
cn: 阿部 ほげ男
cn: Abe Hogeo
sn: 阿部
givenname: ほげ男
mail: abe_hogeo@mail
ou: 販売部
telephoneNumber: 000-000-1111[111:1111]
facsimileTelephoneNumber: 000-000-2222
o: HogeHoge
dn: cn=のの のの子, dc=hoge, dc=ho, dc=ge
objectclass: person
objectclass: organizationalperson
objectclass: inetorgperson
cn: のの のの子
cn: Nono Nonoko
sn: のの
givenname: のの子
mail: nono_nonoko@mail
ou: ソフト部
telephoneNumber: none[none:none]
facsimileTelephoneNumber: none
o: HogeHoge
[------ End of File ------]
cn: が二つあるのは、漢字でも、ローマ字でも引けるようにするため。
OE の場合、勝手にローマ字を漢字に変換したクエリーだすのだが、NCは素直なので。
$ lv -Ou8 ip.imp | /usr/local/bin/ldapadd -D 'cn=Manager, dc=hoge, dc=ho, dc=ge' -v -w secret > ldapadd.log
4.Netscape の設定
LDAP サーバ : mail.hoge.ho.ge
検索開始場所: dc=hoge, dc=ho, dc=ge
ポート番号 : 389
OEでも同じようにすればよい。
これで、やっと、OEからも漢字で引ける。(^^)
・デバッグのしかた。
まず、slapd を
$ su -c '/usr/local/libexec/slapd -d 10000000000000'
とかのオプションをつけて起動する。(むちゃくちゃだな)
このとき、ターミナルには、ぎょうさん情報が表示されるので、
ある程度、推測ができると...思う...(なげやりだな)
# 気になること:base64 エンコードした utf8 のデータ。
# 正しくは、このように登録するのかな?
おしまい