2008年9月 9日

[Apache-Users 7118]OpenLDAP の Thread Safe ライブラリのリンク方法

** Apache ユーザーズメーリングリスト **
** 注意:このメールへの返信は Apache-Users へ行きます **

平岡です。

以下の環境で Apache 2.2.8 のコンパイルを行っております。

OS: Solaris10 for SPARC

OpenLDAP: 2.3.43

Apache を以下のように mpm=worker として configure すると、Apache
の Basic 認証で mod_authnz_ldap を使用する際にたまに異常 (認証が
失敗して InternalServer Error が出る) が発生します。

./configure --disable-ipv6 --disable-ssl --with-mpm=worker \
--enable-rewrite --enable-so --with-ldap --enable-ldap \
--enable-authnz-ldap

mpm=prefork とすると全く異常が発生しないので、この原因としては、
OpenLDAP の Thread Safe でないライブラリが、以下のようにリンク
されているためであると思われます。

% ldd /usr/local/apache/bin/httpd
libldap-2.3.so.0 => /usr/local/lib/libldap-2.3.so.0

Apace の Thread Safe 関係のページ

http://apache.manual.php.to/developer/thread_safety.html

を参照すると、Thread Safe なライブラリ (libldap_r-2.3.so.0)
をリンクする必要があると思うのですが、

% setenv LDFLAGS
% ./configure --disable-ipv6 --disable-ssl --with-mpm=worker \
--enable-rewrite --enable-so --with-ldap --enable-ldap \
--enable-authnz-ldap

このようにすると、以下のように Thread Safe なライブラリと
そうでないライブラリが共にリンクされます。
このような方法で問題ないのでしょうか。(Thread Safe なライブラリ
を使ってくれるのでしょうか)

% ldd .libs/httpd | grep ldap
libldap_r-2.3.so.0 => /usr/local/lib/libldap_r-2.3.so.0
libldap-2.3.so.0 => /usr/local/lib/libldap-2.3.so.0

尚、OpenLDAP は Thread Safe なライブラリを作成しております。

% ls -alF /usr/local/lib/libldap* | grep _r
lrwxrwxrwx 1 root root 23 2008-09-03 22:26 /usr/local/lib/libldap_r-2.3.so.0 -> libldap_r-2.3.so.0.2.31*
-rwxr-xr-x 1 root root 789112 2008-09-03 22:22 /usr/local/lib/libldap_r-2.3.so.0.2.31*
-rw-r--r-- 1 root root 1228004 2008-09-03 22:22 /usr/local/lib/libldap_r.a
-rw-r--r-- 1 root root 886 2008-09-03 22:22 /usr/local/lib/libldap_r.la
lrwxrwxrwx 1 root root 23 2008-09-03 22:26 /usr/local/lib/libldap_r.so -> libldap_r-2.3.so.0.2.31*

以上、よろしくお願いします。

- flathill
--
入退会・変更・配送一時停止は以下へ
http://mm.apache.jp/mailman/listinfo/apache-users


投稿者 xml-rpc : 2008年9月 9日 06:07
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/77083
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。