Apache 2 + mod_dav_svnでSVNParentPath以下の特定レポジトリにのみBasic認証を噛ます方法

アホみたいに1時間ぐらい時間をつぶしてしまったので、忘れないようにメモメモ。

構造

  • repos
    • project1
    • project2

この状態でproject2にのみBasic認証を噛ます。 http://svn.hogehoge.jp/ にアクセスすると repos 以下のレポジトリ一覧が見れて、ここには大本のBasic認証を噛ましてある。でも特定レポジトリにのみユーザーを追加したい、という場合。

Locationを増やす

<VirtualHost *:80>
  ServerName svn.hogehoge.jp
  <Location />
    DAV svn
    SVNListParentPath on
    SVNParentPath /opt/svn/repos
    AuthType Basic
    AuthName "Authorization Realm"
    AuthUserFile /opt/svn/repos/.htpasswd
    Require valid-user
  </Location>
  <Location /project2>
    AuthType Basic
    AuthName "Authorization Zone"
    AuthUserFile /opt/svn/repos/.htpasswd.another
    Require valid-user
  </Location>
</VirtualHost>

Locationの中身は / で終わらせない。終わらせるとやっかいなことになる。
DAV svnやSVNPathを書かない。書くとやっかいなことになる。
AuthNameを変更しておいた方がどっち読んでいるのか分かりやすいと思って変更している。特に他意はない。
project2 のみ読み書きできるユーザーを /opt/svn/repos/.htpasswd.another に追加する。ただこの方法だと大本の .htpasswd と .htpasswd.another に重複しているユーザーが出てくるはずなのでちょっと管理しづらいなー、とか思っているところ。仕方がないのかな。