我已经设置了一个具有 WebDAV 访问权限的 SVN 存储库。由于某种原因,它不允许签出。
这是我的 httpd.conf 部分:
<Location /svn>
DAV svn
SVNParentPath /home/svn/repositories
AuthzSVNAccessFile /home/svn/dav_svn.authz
Satisfy Any
Require valid-user
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /home/svn/dav_svn.passwd
</Location>
我有两个名为“first”和“second”的存储库,dav_svn.authz 的内容是:
[first:/]
doe = rw
* = r
[second:/]
doe = rw
grig = rw
* = r
当我尝试使用用户 doe 签出第二个时,我在 error_log 中收到此信息:用户 doe:“/svn/second”的身份验证失败:密码不匹配
为了理解可能存在的问题,我想更好地了解 AuthzSVNAccessFile 应该如何工作。
答案1
错误是否只发生在两个存储库上的用户 doe 身上?还是第二个存储库上的 grig 也会失败?假设所有用户都会失败,并且假设错误不在 AuthUserFile 中,并且 SVNParentPath 是正确的,我认为您需要为所有存储库添加默认访问规则。
[/]
* = r
[first:/]
doe = rw
[second:/]
doe = rw
grig = rw
或者您可以将用户 doe 和 grig 放入一个组并执行以下操作:
[groups]
secondteam = doe, grig
[/]
* = r
[first:/]
doe = rw
[second:/]
@secondteam = rw
您提到您希望更好地了解 AuthzSVNAccessFile 的工作原理。我建议阅读本教程。该教程中支持多个存储库的基于路径的完整授权文件示例如下:
[groups]
admin = john, kate
devteam1 = john, rachel, sally
devteam2 = kate, peter, mark
docs = bob, jane, mike
training = zak
# Default access rule for ALL repositories
# Everyone can read, admins can write, Dan German is excluded.
[/]
* = r
@admin = rw
dangerman =
# Allow developers complete access to their project repos
[proj1:/]
@devteam1 = rw
[proj2:/]
@devteam2 = rw
[bigproj:/]
@devteam1 = rw
@devteam2 = rw
trevor = rw
# Give the doc people write access to all the docs folders
[/trunk/doc]
@docs = rw
# Give trainees write access in the training repository only
[TrainingRepos:/]
@training = rw
答案2
您是否使用“htpasswd”将 doe 用户添加到 /home/svn/dav_svn.passwd 或它来自某种类型的前端管理员?
例如,我在使用 Virtualmin/Webmin 时遇到了问题,他们以不同于 apache 的格式编辑 htpasswd 文件,并且通过使用 htpasswd 重新添加用户解决了该问题。
答案3
只是检查(我不确定,我稍后会检查)但语法不应该是这样的吗
[first:/home/svn/first]
?
first
名称在哪里,以及/svn/first
repo 的路径是什么。
不确定它是否能解决问题,但我猜您当前的配置文件并不完全是您想要的。