[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:48176] Re: saslpasswd 実行のエラー on SASL(cyrus)



はじめまして。渡瀬と申します。
当MLに初めて参加して投稿いたします。

ずいぶん古い投稿に対するレスでまことに恐縮ですが、
------------------------------------------------------------
[debian-users:39933] saslpasswd 実行のエラー on SASL(cyrus)
Wed, 17 Mar 2004 17:12:14 +0900 
>
> 下記環境でopenLDAPをインストール後、
> SASLを入れてopenLDAPの設定をしているのですが、
> sasldbに認証用にユーザ登録をする為に
> /usr/local/sbin/saslpasswd -u a.b.c.com komi で
> パスワードを聞いてくるので2回入れるのですが、
> 最後に”セグメンテーション違反”とエラーが出ます。
> これは、どういう意味なのでしょうか?
> インターネットで探しても該当の個所が見つけきれませんでした。
> 又、docをみたのですが、SASLの説明に終始しておりますし、
> 同じようなキーワードで探しましたが、やり方が悪いのか、
> 検索不能です。
------------------------------------------------------------

スレッドを見ても反応はとくになさそうでしたし、状況は違うものの
私も同じ問題にぶつかって解決できたので、ご参考までにその結果を
投稿しました。

私の場合は、RedHat-Linux上にCyrus-IMAPDを載せたケースでして、
ソフト(バージョン)は以下のとおりです。※かなり古いですが。。。
※OSはRedHat-Linux(release9)
・Berkeley-DB (3.3.11)
・Cyrus-SASL  (1.5.28)
・Cyrus-IMAPD (2.0.17)

この順番でメイク(configure+make+make install)実行後、同様に
/usr/local/sbin/saslpasswdで認証用DB(/etc/sasldb)にID/PWDを設定
しようとして、同じくセグメンテーション違反に陥りました。

原因は、Cyrus-SASLのconfigure実行時に、BerkeleyDBライブラリへの
パス参照が足りず、libsasl.so が正しく出来ていなかった事でした。
見逃しやすいのですが、configure実行時にワーニングが出ていました。
------------------------------------------------------------
# cd /home/xxx/cyrus-sasl-1.5.28/
# LDFLAGS="-L/usr/local/BerkeleyDB.3.3/lib" \
  CFLAGS="-I/usr/local/BerkeleyDB.3.3/include" \
  ./configure --with-dblib=berkeley --enable-plain ...
〜
checking DB path to use... /etc/sasldb
checking for db3/db.h... no
checking for db.h... yes
checking for db_create in -ldb-3.2... no
checking for db_create in -ldb3.2... no
checking for db_create in -ldb-3.1... no
checking for db_create in -ldb3.1... no
checking for db_create in -ldb-3... no
checking for db_create in -ldb3... no
checking for db_create in -ldb... no
checking for db_open in -ldb... no
checking DB library to use... no
configure: warning: Disabling SASL authentication database support★
〜
------------------------------------------------------------

Cyrus-SASLのconfigureでは、BerkeleyDBが導入済かどうかを検査
する目的で、BerkeleyDBライブラリ(libdb*.so)のdb_create()関数を
呼び出すだけの単純なCソースをgccでコンパイル/リンクします。
当然、BerkeleyDBのライブラリへのパス参照が正しくconfigureに
渡されていないと、これが失敗することになりますが、上記★は
まさにこの失敗に相当するものでした。

BerkeleyDBはデフォルトのインストール先に導入していまして、
ライブラリは以下に格納されていました。
------------------------------------------------------------
# ls -l /usr/local/BerkeleyDB.3.3/lib/
lrwxrwxrwx  1  root root      12  libdb-3.so -> libdb-3.3.so
lrwxrwxrwx  1  root root      12  libdb.so -> libdb-3.3.so
-rw-r--r--  1  root root  720390  libdb-3.3.a
-r--r--r--  1  root root     717  libdb-3.3.la
-r--r--r--  1  root root  567072  libdb-3.3.so
------------------------------------------------------------

configure実行時にそれなりに指定したつもりでしたが、より正確に
(冗長に)指定したところ、ワーニングが解消されました。
※以下の「△」は「/usr/local/BerkeleyDB.3.3」のことです。
------------------------------------------------------------
# cd /home/xxx/cyrus-sasl-1.5.28/
# LDFLAGS="-L/△/lib" \
  CFLAGS="-I/△/include" ./configure ...
↓(変更)↓
# LDFLAGS="-L/△/lib -Wl,-rpath,/△/lib -ldb -lpthread" \
  CFLAGS="-I/△/include" \
  ./configure --with-dblib=berkeley --enable-plain ...
〜
checking DB path to use... /etc/sasldb
checking for db3/db.h... no
checking for db.h... yes
checking for db_create in -ldb-3.2... no
checking for db_create in -ldb3.2... no
checking for db_create in -ldb-3.1... no
checking for db_create in -ldb3.1... no
checking for db_create in -ldb-3... yes ◎OK !
checking DB library to use... berkeley ◎OK !
checking for dlopen in -ldl... yes
〜
------------------------------------------------------------
#本来であれば、LD_LIBRARY_PATH、LIBDIR、INCDIRの環境変数に
#これらのパスを設定するなり、/etc/ld.so.conf にライブラリパスを
#記述しておくなど、事前にしておくところでしょうが。。

出来上がったMakefileを比較して、わかったのですが、
ワーニングが出ていた時は、libsasl.soに含むべきターゲットとして
BerkeleyDB用(lib/db_berkeley.c)でなく、DB無し用(lib/db_none.c)が
選択されていました。これでは、DBアクセスを行おうとする処理部分で
エラーになっても不思議ありません。

引き続き、「make+make install」を実行して出来上がった
/usr/local/sbin/saslpasswdを実行すると、今度は、
セグメンテーション違反は出ませんでした。

ただ、この時、/etc/sasldbファイルが既にあると(サイズ0でも)
下のようなエラーが表示される場合もありました。
------------------------------------------------------------
# ls -l /etc/sasldb
-rw-rw---- 1 root root  0   /etc/sasldb
# /usr/local/sbin/saslpasswd -c foo
Password: xxxx
Again (for verification): xxxx
saslpasswd: generic failure ★
------------------------------------------------------------

その場合は、/etc/sasldbファイルを削除してから再度実行すると、
1回目だけ同じエラーが表示されますが、/etc/sasldbファイルは
正しく出来ました。2回目以降はエラーは表示されません。
よくわかりませんが、1回目は単にファイルがないことをエラー
だと言っているだけで、ファイル自体は正しく出来上がるので、
2回目以降は問題ない、と考えれば良いと思います。

***

とりとめもなく書いてしまいました。
ご参考になることでもあれば幸いです。

-------------------------------------------------------
渡瀬 正憲 (わたせ まさのり)  watase@xxxxxxxxx
株式会社セック http://www.sec.co.jp
-------------------------------------------------------