任务单 #21299

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

开放日期: 2010-04-06 11:19 最后更新: 2010-05-20 21:06

报告人:
属主:
类型:
状态:
关闭
里程碑:
优先:
5 - Medium
严重性:
5 - Medium
处理结果:
文件:

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を何度押下しても同じです。

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

任务单历史 (3/6 Histories)

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

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
评论

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

2010-04-11 11:55 Updated by: okamototk
评论

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
  • 状态 Update from 开启 to 关闭
  • Ticket Close date is changed to 2010-05-20 21:06

Attachment File List

No attachments

编辑

Please login to add comment to this ticket » 登录名