Apache2.4のmakeができたので、次は追加で入れているモジュールを作ろうとしたらエラーが出た。

mod_allowlist.c:144: error: ‘conn_rec’ has no member named ‘remote_ip’

mod_allowlist は自前のモジュールでSQLite3に登録しているIPを元にアクセス可否を行うのだけれど、
アクセス元のIPアドレスを利用している所でコケている。

という訳で、ここで初めてAPIの変更点を見てみる。
https://httpd.apache.org/docs/2.4/developer/new_api_2_4.html

プロクシを利用している場合とわけるために変数名が変わったと言うことらしい。
conn_rec->remote_ip は conn_rec->client_ip に、
conn_rec->remote_addr は conn_rec->client_addr を使うと良いようだ。

次、mod_limitipconn のエラーはこんな感じ

mod_limitipconn.c:107: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_limitipconn.c:119: warning: implicit declaration of function ‘ap_default_type’
mod_limitipconn.c:119: warning: assignment makes pointer from integer without a cast
mod_limitipconn.c:163: warning: passing argument 1 of ‘ap_get_scoreboard_worker’ makes pointer from integer without a cast
mod_limitipconn.c:163: error: too many arguments to function ‘ap_get_scoreboard_worker’
apxs:Error: Command failed with rc=65536
.
*** Error code 1

remote_ip はさっきと同じなのでサクッと修正。
ap_default_type は2.4で無くなっている事が判明したので、適当に”text/html”でmimeタイプを決め打ち。
ap_get_scoreboard_worker は、引数のタイプと数が変更になっていて ap_sb_handle_t のポインタを渡してやらなければならない。
が、どうも scoreboard.h の ap_sb_handle_t の定義が怪しく、 ap_sb_handle_t を使おうとすると怒られる。
さて、どうしたものか。と思いきや、 scoreboard.h に以前の使い方で動きそうなAPIを発見。

AP_DECLARE(worker_score *) ap_get_scoreboard_worker(ap_sb_handle_t *sbh);
AP_DECLARE(worker_score *) ap_get_scoreboard_worker_from_indexes(int child_num, int thread_num);

ap_get_scoreboard_worker を ap_get_scoreboard_worker_from_indexes に置き換えてmakeを通す。

subversion-1.7.3 の mod_dav_svn では、以下のエラー

subversion/mod_dav_svn/util.c: In function ‘dav_svn__log_err’:
subversion/mod_dav_svn/util.c:630: error: ‘dav_error’ has no member named ‘save_errno’
subversion/mod_dav_svn/util.c:631: error: ‘dav_error’ has no member named ‘save_errno’
*** Error code 1

これは、dav_error は無くなっていて、代わりに apr_status_t型の aprerr に項目が変わっている。
結局はintで持ってるっぽいので、単純に項目名を変えて対処。

mod_security2 は、2.6.3でconn_rec絡みの変更点が入っているので、最新版を取ってきてmakeでOK。

php-5.4.0 の libphp5.so は普通にmakeが通る。

これで、ひとまず自分の使っているモジュールは全部2.4対応となった。
ソースを弄ったのは確認してからでないと実運用は無理だけど。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です