dreamedge.net

WebDAV経由でのリポジトリ公開@複数レポジトリ

2009-01-01T10:23:00+0000

前に書いたのはレポジトリが1つの場合の設定だった.

/var/svn/hoge, /var/svn/barといったように複数レポジトリがある場合は,dav_svn.confにSVNListParentPathを設定すると,http://hoge.com/svn/でリポジトリ一覧を表示できるようになる.

<Location /svn>
  DAV svn
  SVNParentPath /var/svn
  SVNListParentPath on
</Location>

認証をかけたい場合は,dav_svn.authzを作成して,以下のようにAuthzSVNAccessFileの項目を設定する.

<Location /svn>
  DAV svn
  SVNParentPath /var/svn
  SVNListParentPath on

  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn.passwd

  AuthzSVNAccessFile /etc/apache2/dav_svn.authz

  Satisfy Any
  Require valid-user
</Location>

dav_svn.authzの書式は”[リポジトリ名:パス]”で設定するリポジトリを指定したうえで,”ユーザ名=[rw]”で各ユーザの権限を記述する.グループを指定する場合は”@グループ名”で指定する.

ユーザ名に*を指定すると任意のユーザを示すので,下の例はprivateはuser1が読み書きできるのみ.publicは誰でも読むことは可能,となる.ユーザ名はdav_svn.passwdと揃えること

[private:/]
user1 = rw
* =

[public:/]
user1 = rw
* = r

けど,この形式でのアクセス制限をかけると,せっかくSVNListParentPath onにしたのに,http://localhost/svn/でレポジトリの一覧を見ることが出来なくなってしまう.

その場合は,dav_svn.authzを使わずにLimitExceptで制限する.下のようにすることによって読み込みは誰でもできるが,書き込みにはユーザ認証が必要になる.

<Location /svn>
  DAV svn
  SVNParentPath /var/svn
  SVNListParentPath on

  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn.passwd

  <LimitExcept GET PROPFIND OPTIONS REPORT>
    Require valid-user
  </LimitExcept>
</Location>