Linux

SVN自定義403錯誤資訊

  • July 9, 2014

如何自定義“403 Forbidden”消息?僅對於此消息,我想添加其他資訊,例如“403 Forbidden(您無權

$$ URL to repository $$)" . 怎麼做?我想保存與任何 svn 工具的兼容性,如原生 svn 客戶端、烏龜、java 程序員環境等。

  • 編輯 -

我的環境:

作業系統:Linux Debian

SVN:1.8.8

訪問協議:Apache 和 DAV 的 HTTP(s) svn

auth protolol 配置:authzsvnaccess

所有的作品都像我想要的一樣,除了禁止的消息。這會誤導使用者。他們認為問題在於服務,但真正的問題在於訪問權限。

您可以使用 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會回饋給使用者,您可以讓它說你喜歡的任何東西。

問題是必須首先對請求進行身份驗證,因此這樣的解決方案可能會破壞您的權限模型,除非它是針對非常具體的單一案例。(您始終可以自定義客戶端,但我懷疑這比您願意為此更進一步)

引用自:https://serverfault.com/questions/610852