提交拒绝访问时SVN错误:' foobar' MKACTIVITY MYREPO:

时间:2011-04-06 20:31:49

标签: apache svn tortoisesvn commit

我目前正在使用ActiveDirectory身份验证与Apache和SVN合作。用户正在使用TortoiseSVN客户端。

我应该指出,我有2个具有相同名称和不同映射的存储库,但重定向到相同的“用户网址”,因为两个存储库的权限相同。

例如'http:// mysrvr / svn / foo / bar / corge'和'http:// mysrvr / svn / foo / corge'

或'http:// mysrvr / svn / foo / bar / corge和''http:// mysrvr / svn / foo / grault / corge'

这个2回购的东西被复制了8个“回购对”,其余7个工作正常。

这是我的错误:

  

提交失败(详情如下):

     

访问   '/ SVN / MYDIR / MYREPO /!SVN / ACT / 65bf494c-a66a-4f45-870e-d988f691a45d'   禁

     

完成!

这不是权限,因为用户 foobar 具有rw访问权限并且他已成功检出存储库。提交时会发生此错误。

有助于确定精确解决方案的事情:

  • 其他回购配对很好。权限是一样的。
  • 我的svn管理员用户可以在与提交的有问题的用户相同的本地PC上进行。
  • 大写/小写网址不是问题,我已经检查了
  • NTLM和Active Directory也不是问题,因为他可以访问具有相同权限文件的其他仓库。
  • 同一个回购的其他用户正在尝试同样的问题。虽然我仍然可以在他们的本地PC上进行提交。 (就像他们没有书面许可一样)

以下是Apache日志:

Apache error.log

  

[dd mm 12:38:02 2011] [错误] [客户   10.x.x.x]拒绝访问:'foobar'MKACTIVITY MYREPO:

     

[dd mm 12:39:40 2011] [错误] [客户   10.x.x.x]拒绝访问:'foobar'MKACTIVITY MYREPO:

     

[dd mm 12:39:54 2011] [错误] [客户   10.x.x.x]拒绝访问:'foobar'MKACTIVITY MYREPO:

Apache access.log

  

10.x.x.x - foobar [dd / mmm / yy:12:38:02 GMT]“OPTIONS / svn / myDir / MYREPO   HTTP / 1.1“200 198

     

10.x.x.x - foobar [dd / mmm / yy:12:38:02 GMT]“PROPFIND / svn / myDir / MYREPO   HTTP / 1.1“207 667

     

10.x.x.x - foobar [dd / mmm / yy:12:38:02 GMT]“MKACTIVITY   / SVN / MYDIR / MYREPO /!SVN / ACT / 65bf494c-a66a-4f45-870e-d988f691a45d   HTTP / 1.1“403 266

svn_activity.log

  

[dd / mmm / yy:12:34:20 -0300]沃尔多   提交r2

     

[dd / mmm / yy:12:39:07 -0300]弗雷德州   / src / trunk r1447

从svn_activity.log我可以推断Apache捕获和反弹访问,因为在先前暴露的时间范围内没有foobar访问。

所以,希望我收集的数据对于解决这个问题很有用......任何想法?

2 个答案:

答案 0 :(得分:13)

我找到了它!

好的,这是答案:

问题是什么:

我的用户在目录/ svn / myDir / MYREPO

中查看了一个回购

Apache知道他必须将MYREPO翻译成一个小写目录,所以当你签出或进行任何阅读操作时,这工作得很好。

但是当用户确实尝试执行Apache更改的提交操作时 以某种方式为完成用户请求必须执行的操作的顺序,因此,首先接受写入操作并尝试写入,然后更改为小写。

再一次,它试图写入/ svn / myDir / MYREPO ,问题是:

  • 设置为 myrepo 而不是 MYREPO 的仓库的权限
  • 实际的回购是myrepo而不是MYREPO

所以...... MYREPO不存在! myrepo。这就是它抛出错误的原因:

  • ACCESS DENIED因为没有为MYREPO写的许可。
  • 并且它确实以读取方式识别回购,因为apache了解您要求和翻译的内容。

但是,为了写第一部作品,之后花了一些时间来理解他在做什么。而理解之前的例外是因为Apache永远不会在那里。

如何解决:

这是最简单的事情:

  • 转到检出的Repo
  • http://YourServer/svn/myDir/MYREPO
    重新定位到
    http://YourServer/svn/myDir/myrepo

我的建议:

从现在开始,我对svn管理员和用户的建议是

EVERITHING LOWERCASE ...对不起,我纠正了自己:

一切都小写!

答案 1 :(得分:6)

在上述解决方案中,请注意,在Subversion 1.7之前,Subversion以不区分大小写的方式处理存储库名称和路径以进行访问控制,在将它们与内容进行比较之前将它们内部转换为小写您的访问文件。它现在以区分大小写的方式进行这些比较。如果您从旧版本升级到Subversion 1.7,则应检查您的访问文件以确保大小写正确。

来源 - http://svnbook.red-bean.com/en/1.7/svn-book.html#svn.serverconfig.pathbasedauthz