2009年4月22日

[Apache-Users 7333]Apache2.0.63でGDBMによるBASIC認証時SegmentationFaultする

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

はじめて投稿させていただきます。hidehiraと申します。

Apache2.0.63をLinux64bit環境(RHEL5.2/openSUSE11.1)上でpreforkモードにコンパイルして
GDBMによるDBMを使った認証を行った際にSegmentation Faultが発生します。

gdbで追いかけてみたのですが、modules/aaa/mod_auth_dbm.cの134行目の
strncpyに渡しているポインタpwの値が0であるためにlibcでSegmentation Faultが発生するようです。

workerモードでコンパイルした場合には、同じGDBMによるDBM認証を行っても、Segmentation Fault
は発生せず、正常に認証されます。

PHPを使いたいのでどうしてもpreforkにしたいのですが、良い解決方法はないでしょうか?

以下コンパイル情報などです。
./configure \
--prefix=/usr/apache \
--enable-mods-shared=most \
--with-expat=builtin \
--enable-auth-dbm \
--with-gdbm

httpd.conf 追加部分
<Directory /usr/apache/htdocs>
AuthType Basic
AuthName "system"
AuthDBMType GDBM
AuthDBMUserFile /usr/apache/conf/basic.pag
AuthDBMGroupFile /dev/null
require valid-user
</Directory>

GDBMファイル作成スクリプト
#!/usr/local/bin/perl
use Fcntl;
use GDBM_File;
tie (%db, 'GDBM_File' , "/usr/apache/conf/basic.pag", O_RDWR|O_CREAT, 0666) or die;
$db{'test'} = crypt('test', 'sa');
untie %db;

modules/aaa/mod_auth_dbm.cの134行目付近
132 if (apr_dbm_fetch(f, q, &d) == APR_SUCCESS && d.dptr) {
133 pw = apr_palloc(r->pool, d.dsize + 1);
134 strncpy(pw, d.dptr, d.dsize);
135 pw[d.dsize] = '\0'; /* Terminate the string */
--
入退会・変更・配送一時停止は以下へ
http://mm.apache.jp/mailman/listinfo/apache-users


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




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