web-dev-qa-db-ja.com

SVNカスタマイズ403エラーメッセージ

「403Forbidden」メッセージをカスタマイズするにはどうすればよいですか?このメッセージについてのみ、「403 Forbidden([URL to repository])」のような情報を追加したいと思います。どうやるか?ネイティブsvnクライアント、tortoise、Javaプログラマー環境など)などのsvnツールとの互換性を保存したいと思います。

-編集-

私の環境:
OS:Linux Debian
SVN:1.8.8
アクセスプロトコル:ApacheおよびDAVsvnによるHTTP
auth protolol config:authzsvnaccess

禁止されたメッセージを除いて、すべてが私が望むように機能します。これはユーザーを誤解させます。彼らは問題はサービスにあると考えていますが、実際の問題はアクセス権にあります。

1
Znik

Apacheを使用してエラーテキスト/ドキュメントをカスタマイズできます( http://httpd.Apache.org/docs/current/custom-error.html )が、ここでは役に立ちません。

エラーメッセージはクライアントソース(Subversion/libsvn_ra_serf/util.c)に埋め込まれています。

svn_ra_serf__error_on_status(serf_status_line sline,
                             const char *path,
                             const char *location)
{
  switch(sline.code)
    {
      case 301:
      case 302:
      case 307:
        return svn_error_createf(SVN_ERR_RA_DAV_RELOCATED, NULL,
                                 (sline.code == 301)
                                 ? _("Repository moved permanently to '%s';"
                                     " please relocate")
                                 : _("Repository moved temporarily to '%s';"
                                     " please relocate"), location);
      case 403:
        return svn_error_createf(SVN_ERR_RA_DAV_FORBIDDEN, NULL,
                                 _("Access to '%s' forbidden"), path);

見ていないと、他のクライアント(SmartSVN、Tortoise)が同じまたは非常に類似したHTTPクライアントライブラリを使用していると思われるため、同じ問題が発生します。クライアントの場合、サーバーからクライアントにカスタムエラーメッセージをルーティングする機能がありません。パスワードの失敗またはauthzによって拒否されました。

ただし、これが本当に必要な場合は、pre-commitフックで必要なパスを特殊なケースに入れることができる場合があります。これは、フックスクリプトがゼロ以外のステータスで存在する場合、stdoutはユーザーにフィードバックされ、好きなように言うことができます。

問題は、リクエストを最初に認証する必要があることです。そのため、このようなソリューションは、非常に特殊な単一のケースでない限り、権限モデルで機能しなくなる可能性があります。 (いつでもクライアントをカスタマイズできますが、それはあなたがこれを望んでいるよりもはるかに遠いと思います)

1
SmallClanger