Apache 提交拒绝访问时出现SVN错误:';foobar&x27;MKmyrepo:

Apache 提交拒绝访问时出现SVN错误:';foobar&x27;MKmyrepo:,apache,svn,tortoisesvn,commit,Apache,Svn,Tortoisesvn,Commit,我目前正在使用Apache和SVN进行ActiveDirectory身份验证。用户正在使用OrtoiseSVN客户端 我应该指出,我有两个repo具有相同的名称和不同的映射,但重定向到相同的“用户url”,因为两个repo的权限相同 eg'http://mysrvr/svn/foo/bar/corge“还有”http://mysrvr/svn/foo/corge" 或者http://mysrvr/svn/foo/bar/corge 和“http://mysrvr/svn/foo/grault/c

我目前正在使用Apache和SVN进行ActiveDirectory身份验证。用户正在使用OrtoiseSVN客户端

我应该指出,我有两个repo具有相同的名称和不同的映射,但重定向到相同的“用户url”,因为两个repo的权限相同

eg'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上执行操作
  • 大写/小写URL不是问题,我已经检查过了
  • NTLM和Active Directory也不是问题,因为他可以使用相同的权限文件访问另一个repo
  • 同一回购协议的其他用户也在试验同样的问题。而我仍然可以在他们的本地PC上进行提交(就像他们没有书面许可一样)
以下是Apache日志:

apacheerror.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]“选项/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

[日/月/日:12:34:20-0300]瓦尔多 提交r2

[dd/mmm/yy:12:39:07-0300]弗雷德状态 /src/干线r1447

从svn_activity.log中,我可以推断Apache捕获并恢复访问,因为在之前公开的时间范围内没有foobar访问

所以,希望我收集的数据对解决这个问题有用。。。有什么想法吗?

我找到了

好的,下面是答案:

问题是什么: 我的用户在/svn/myDir/MYREPO目录下签出一个Repo

Apache知道他必须将MYREPO转换为小写目录,所以当您签出或执行任何读取操作时,这一切都很正常

但是当用户尝试执行提交操作时,Apache发生了变化 不知何故,为了满足用户的请求,他必须执行的操作顺序是这样的,首先接受写操作并尝试写,然后更改为小写

同样,它试图写入/svn/myDir/MYREPO,问题是:

  • 设置为myrepo而非myrepo的回购权限
  • 实际回购为myrepo,而非myrepo
所以。。。MYREPO不存在!myrepo有。这就是它抛出错误的原因:

  • 访问被拒绝,因为没有为MYREPO写入权限
  • 它确实以读的方式识别repo,因为apache理解您的要求并进行翻译
但是第一次写作是用它来完成的,之后需要一点时间来理解他在做什么。例外情况出现在理解之前,因此Apache永远不会出现

如何解决这个问题: 这是最简单的事情:

  • 转到已签出的回购协议
  • 重新安置http://YourServer/svn/myDir/MYREPO 到http://YourServer/svn/myDir/myrepo
  • http://YourServer/svn/myDir/MYREPO
我的建议是: 从现在起,我对svn管理员和用户的建议是

所有小写字母。。。对不起,我更正一下:


一切都是小写的

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


来源-

谢谢你,先生……我整个周末都没有签入,因为我以为有人修改了我的权限……嗯……我也把我的工作空间用大写字母写了出来。谢谢,顺便说一句,记得这个问题是去年提出的,当时svn 1.7不存在。然而,这就像是一个附属品,以防现在有人看到它。你有我的+1! http://YourServer/svn/myDir/myrepo