Apache22 + Subversion-1.8.10_3 on FreeBSD 9.2

FreeBSD 9.2-RELEASE において,使用しているパッケージに既知の脆弱性がないかどうか調べるとき,pkg audit -F の出力を確認する。このたびバージョン管理ソフトウェア subversion-1.8.1 にいくつかの脆弱性が報告されたので,1.8.10_3 にバージョンアップすることにした。

# pkg audit -F
Fetching vuln.xml.bz2: 100%  456kB 233.6k/s    00:02
...
subversion-1.8.1 is vulnerable:
subversion -- mod_dav_svn vulnerability
WWW: http://portaudit.FreeBSD.org/1839f78c-9f2b-11e3-980f-20cf30e32f6d.html
 
subversion-1.8.1 is vulnerable:
subversion -- several vulnerabilities
CVE: CVE-2014-3528
CVE: CVE-2014-3522
WWW: http://portaudit.FreeBSD.org/83a418cc-2182-11e4-802c-20cf30e32f6d.html
 
subversion-1.8.1 is vulnerable:
subversion -- multiple vulnerabilities
CVE: CVE-2013-4558
CVE: CVE-2013-4505
WWW: http://portaudit.FreeBSD.org/e3244a7b-5603-11e3-878d-20cf30e32f6d.html
 
subversion-1.8.1 is vulnerable:
svnserve is vulnerable to a local privilege escalation vulnerability via symlink attack.
CVE: CVE-2013-4277
WWW: http://portaudit.FreeBSD.org/f8a913cc-1322-11e3-8ffa-20cf30e32f6d.html
...

ところが,この新しいバージョンの subversion ports は mod_dav_svn(HTTP トランスポート上で — 要するに,Web サーバ経由で — subversion のリポジトリを操作するための apache モジュール)の自動インストールを行わないように変更されていた。このため apache22 Web サーバをリスタートさせると次のようなエラーが出力されてしまう。

# apachectl restart
Performing sanity check on apache22 configuration:
Syntax error on line 2 of /usr/local/etc/apache22/Includes/svn.conf:
Unknown DAV provider: svn

ちなみに svn.conf の内容は以下のようなものである。2行目がエラーとなったわけである。

<Location /svn>
    Dav svn
    SVNParentPath /usr/local/var/svn
 
    AuthType Digest
    AuthName "Subversion Repository"
    AuthDigestProvider file
    AuthUserFile /usr/local/etc/apache22/.htdigest
 
    <LimitExcept GET PROPFIND OPTIONS REPORT>
        Require valid-user
    </LimitExcept>
</Location>

ports の変更情報である /usr/ports/UPDATING を確認すると,2014.6.16 以降,subversion-1.8.10_3 から mod_dav_svn-1.8.10_3 を別途組み込まなければならなくなったことが判明。では,これをインストール。ところが apache のバージョンの問題で make がうまくいかない。

# cd /usr/ports/www/mod_dav_svn
# make install clean
===>  mod_dav_svn-1.8.10_3 is marked as broken: : Error from bsd.apache.mk. apache22 is
installed (or APACHE_PORT is defined) and port requires apache.
*** [all] Error code 1
 
Stop in /usr/ports/www/mod_dav_svn.

Google で検索してもこれの対処方法は見当たらなかった。んー。でも,/usr/ports/UPDATING をつぶさに読むとちゃんと書いてあった。2014.7.13 以降,ports の apache デフォルト・バージョンが apache24 に変更となり,すなわち,上記のエラーは,mod_dav_svn ports がインストールの前提パッケージとしてデフォルト・バージョン apache24 を要求しているにもかかわらず,すでに apache22 が組み込まれているために apache24 をインストールできず,make 処理を続行できない,ということを示しているのである。ここで apache22 を引き続きデフォルト・バージョンとしたい場合は /etc/make.conf に以下を追加せよとのことだった。

DEFAULT_VERSIONS+=apache=2.2

これで make がうまくいくようになった。mod_dav_svn.so 等の apache モジュールがコンパイルされ,所定の場所にインストールされ,apache22 の設定ファイル httpd.conf にも以下が自動的に追加され,mod_dav_svn-1.8.10_3 の導入が完了した。apachectl restart もエラーなく通るようになった。

LoadModule dav_svn_module     libexec/apache22/mod_dav_svn.so
LoadModule authz_svn_module   libexec/apache22/mod_authz_svn.so
#LoadModule dontdothat_module  libexec/apache22/mod_dontdothat.so

そろそろ apache24 に移行すべきなんだろうか。

 
実用 Subversion 第2版
C. Michael Pilato, Ben Collins-Sussman, Brian W. Fitzpatrick
オライリージャパン