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 のデータ。 # 正しくは、このように登録するのかな?
おしまい