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

apa*_*cay 11 svn apache tortoisesvn commit

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

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

例如'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'禁止

完了!

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

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

  • 其他回购配对做得很好.权限是一样的.
  • 我的svn管理员用户可以在与提交的有问题的用户相同的本地PC上进行操作.
  • UPPERCASE /小写URL不是问题,我已经检查过了
  • NTLM和Active Directory也不是问题,因为他可以使用相同的权限文件访问其他repo.
  • 同一个回购的其他用户正在试验同样的问题.虽然我仍然可以在他们的本地PC上进行提交.(就像他们没有书面许可一样)

以下是Apache日志:

Apache error.log

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

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

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

Apache access.log

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

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

10.xxx - 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] waldo犯r2

[dd/mmm/yy:12:39:07 -0300] fred status/src/trunk r1447

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

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

apa*_*cay 13

我找到了!

好的,这是答案:

问题是什么:

我的用户在目录/ svn/myDir/MYREPO中查看了一个Repo

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

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

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

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

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

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

但是,用它来写第一部作品,然后花一点时间来理解他在做什么.而这个例外是在理解之前发生的,所以Apache永远不会在那里.

如何解决:

这是最简单的事情:

  • 转到签出的回购
  • 从中重新定位
    http://YourServer/svn/myDir/MYREPO
    http://YourServer/svn/myDir/myrepo

我的建议:

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

很简单 ...抱歉,我纠正自己:

一切小写!

  • 谢谢先生...我整个周末都没有签到,因为我以为有人修改了我的权限...呃...我的工作空间也用大写字母。 (2认同)

Jey*_*n I 6

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

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