Ticket #21299

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

Eröffnet am: 2010-04-06 11:19 Letztes Update: 2010-05-20 21:06

Auswertung:
Verantwortlicher:
Typ:
Status:
Geschlossen
Komponente:
Meilenstein:
Priorität:
5 - Mittel
Schweregrad:
5 - Mittel
Lösung:
Keine
Datei:
Keine

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-Verlauf (3/6 Historien)

2010-04-06 11:19 Aktualisiert von: yaboo
  • New Ticket "日本語を含むパスへのSubversionAccess権限" created
2010-04-07 07:34 Aktualisiert von: okamototk
  • Verantwortlicher Update from (Keine) to okamototk
Kommentar

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 Aktualisiert von: okamototk
Kommentar

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

2010-04-11 11:55 Aktualisiert von: okamototk
Kommentar

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 Aktualisiert von: okamototk
2010-05-20 21:06 Aktualisiert von: okamototk
  • Status Update from Offen to Geschlossen
  • Ticket Close date is changed to 2010-05-20 21:06

Dateianhangliste

Keine Anhänge

Bearbeiten

Please login to add comment to this ticket » Anmelden