SVN自定义403错误信息

SVN自定义403错误信息

我如何自定义“403 禁止”消息?对于此消息,我只想添加其他信息,例如“403 禁止(您无权访问 [存储库 URL])”。如何操作?我希望保留与任何 svn 工具的兼容性,例如本机 svn 客户端、tortoise、java 程序员环境等。

- 编辑 -

我的环境:
操作系统:Linux Debian
SVN:1.8.8
访问协议:Apache 和 DAV 的 HTTP(s) svn
auth protolol 配置:authzsvnaccess

一切都如我所愿,除了禁止信息。这误导了用户。他们认为问题出在服务上,但实际上问题出在访问权限上。

答案1

您可以使用 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 客户端库,因此您会遇到同样的问题:当客户端因密码失败或身份验证而被拒绝时,没有用于将自定义错误消息从服务器路由到客户端的工具。

但是,如果这是您真正需要的,那么您可能能够在钩子中对必要的路径进行特殊处理pre-commit,因为当钩子脚本具有非零状态时,其内容stdout将反馈给用户,您可以让它说出任何您喜欢的内容。

问题在于请求必须先经过身份验证,因此除非是针对非常具体的单一案例,否则这样的解决方案可能会破坏您的权限模型。(您始终可以自定义客户端,但我怀疑这超出了您的意愿)

相关内容