Ticket #21299

日本語を含むパスへのSubversionAccess権限

Open Date: 2010-04-06 11:19 Last Update: 2010-05-20 21:06

Reporter:
Owner:
Type:
Status:
Closed
MileStone:
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
None
File:
None

Details

Subversion Accessの「SubversionPaths」に日本語名のパスが含まれていると権限が効かないようです。

Samp1. /top/folder1/subfolder
Samp2. /top/folder1/さぶふぉるだー    ※末端が日本語
Samp3. /top/folder2/差部フォ瑠打ー    ※末端が日本語
Samp4. /top/folder1/subfolder/child
Samp5. /top/folder1/さぶふぉるだー/child ※途中が日本語
Samp6. /top/folder2/差部フォ瑠打ー/child ※途中が日本語

※/topは root直下

  • 上記の末端フォルダにはテキストファイルを登録しています。
  • 上記全て「@sys-admin = rw」「@everyone =」の権限としています。
  • CollabNetSVN\httpd\conf\httpd.confで「PythonHandler trac.web.modpython_frontend」を有効にしています。


これを@everyoneに属するアカウント「test」でリポジトリブラウザで階層を掘っていくと、権限が効いて末端フォルダが表示されない目的の動作となるのは、全て英数字の「Samp1」と「Samp4」のみです。日本語を含むパスだとどうやっても権限が効かず、登録されているファイルが見れてしまいます。


ちなみにrepository_type が「svn」でも「direct-svnfs」でも、PythonHandlerが「trac.~」でも「tram.~」でも、F5キーやCtrl+F5を何度押下しても同じです。

※すみません。日本語パスが仕様上許されていないのであれば教えてくださいませ。

Ticket History (3/6 Histories)

2010-04-06 11:19 Updated by: yaboo
  • New Ticket "日本語を含むパスへのSubversionAccess権限" created
2010-04-07 07:34 Updated by: okamototk
  • Owner Update from (None) to okamototk
Comment

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でどう書けばよいのかは調査中ですので、暫くお待ちください。

2010-04-07 07:36 Updated by: okamototk
Comment

書き忘れましたが、'\xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88'はsvnauthzのパスに記述した「テスト」という文字列のutf-8のバイト列です。

2010-04-11 11:55 Updated by: okamototk
Comment

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)
2010-04-19 16:56 Updated by: okamototk
2010-05-20 21:06 Updated by: okamototk
  • Status Update from Open to Closed
  • Ticket Close date is changed to 2010-05-20 21:06

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login