日本語を含むパスへのSubversionAccess権限
Python本体のConfigParser.pyの中でsvnauthzファイルがパースされたときに文字化け(というか、デコードが正しく走ってないだけ?)を起こして、パスに「テスト」という文字が含まれる場合、'\xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88'のように内部で文字列を持ってしまいます。
Python本体のPythonConfigParse.pyの下記の部分
429 while True: 430 line = fp.readline() 431 if not line:を修正して、svnauthzから正しく文字列が取得できるようにするか、tracのsvn_authz.pyの下記の部分
for p in parent_iter(path): if self.module_name:を修正して、変数pがutf-8のバイト列にマッチするように変更する必要があります。
対処方法は分かったのですが、pythonでどう書けばよいのかは調査中ですので、暫くお待ちください。
書き忘れましたが、'\xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88'はsvnauthzのパスに記述した「テスト」という文字列のutf-8のバイト列です。
Tracのsvn_authz.pyに次のパッチを当てることにより、問題を解決できます。
--- svn_authz.py.orig 2010-04-11 11:53:00.937500000 +0900 +++ svn_authz.py 2010-04-11 11:51:26.906250000 +0900 @@ -19,9 +19,10 @@ import os.path from trac.config import Option +from trac.config import Configuration from trac.core import * from trac.versioncontrol import Authorizer - +from trac.util.text import to_unicode class SvnAuthzOptions(Component): @@ -79,14 +80,7 @@ self.repos = repos self.auth_name = auth_name self.module_name = module_name - - from ConfigParser import ConfigParser - self.conf_authz = ConfigParser() - if cfg_fp: - self.conf_authz.readfp(cfg_fp, cfg_file) - elif cfg_file: - self.conf_authz.read(cfg_file) - + self.conf_authz = Configuration(cfg_file) self.groups = self._groups() def has_permission(self, path): @@ -115,7 +109,7 @@ # Internal API def _groups(self): - if not self.conf_authz.has_section('groups'): + if not u'groups' in self.conf_authz.sections(): return [] grp_parents = {} @@ -145,7 +139,8 @@ return expanded.keys() def _get_section(self, section): - if not self.conf_authz.has_section(section): + section = to_unicode(section) + if not (section in self.conf_authz.sections()): return yield self._get_permission(section, self.auth_name)
Subversion Accessの「SubversionPaths」に日本語名のパスが含まれていると権限が効かないようです。
※/topは root直下
これを@everyoneに属するアカウント「test」でリポジトリブラウザで階層を掘っていくと、権限が効いて末端フォルダが表示されない目的の動作となるのは、全て英数字の「Samp1」と「Samp4」のみです。日本語を含むパスだとどうやっても権限が効かず、登録されているファイルが見れてしまいます。
ちなみにrepository_type が「svn」でも「direct-svnfs」でも、PythonHandlerが「trac.~」でも「tram.~」でも、F5キーやCtrl+F5を何度押下しても同じです。
※すみません。日本語パスが仕様上許されていないのであれば教えてくださいませ。