尝试在 SVN 中的提交后挂钩中执行命令时出现权限问题

尝试在 SVN 中的提交后挂钩中执行命令时出现权限问题

我有一个似乎无法解决的无聊问题。

我想要做什么?

post-review --repository-url=http://xxx.xxx.xxx.xxx/svn/testRepo2 --revision-range=6:7 --server=http://reviews.example.test/ --username=reviewposter --password=mydullpass --submit-as=admin -p --target-groups=reviewers

当我以我的用户身份登录 bash 尝试此操作时,一切都正常。评论已发布、发表等。==> 所有权限和其他杂项设置均正常。

当我从 SVN 的提交后挂钩尝试执行此操作时会发生什么?

资源已提交,但 svn 操作挂起 - 实际上提交后挂钩尚未完成。

问题缩小至什么?

post-review 以执行 post-commit 钩子的用户身份执行 - 在本例中为 www-data Apache 的用户。例如,当我以 www-data 身份运行命令时:

sudo -u www-data post-review --repository-url=http://xxx.xxx.xxx.xxx/svn/testRepo2 --revision-range=6:7 --server=http://reviews.example.test/ --username=reviewposter --password=mydullpass! --submit-as=admin -p --target-groups=reviewers -d

我得到(注意后审查命令中的 -d 参数 - DEBUG):

RBTools 0.4.1
Home = /home/borislav
Password for 'www-data':

这就是它挂起等待输入密码的地方。提交操作无法完成,它只是停留在那里。我已经和ReviewBoard 的 google 小组在这篇文章中

另一方面,当我以 myuser 身份使用调试输出执行相同命令时,我得到:

RBTools 0.4.1
Home = /home/borislav
HTTP GETting api/
HTTP GETting http://reviews.example.test/api/info/
Using the new web API
TTP GETting http://reviews.example.test/api/repositories/
HTTP GETting http://reviews.example.test/api/repositories/1/
HTTP GETting http://reviews.example.test/api/repositories/1/info/
HTTP GETting http://reviews.example.test/api/repositories/2/
HTTP GETting http://reviews.example.test/api/repositories/2/info/
HTTP GETting http://reviews.example.test/api/repositories/3/
HTTP GETting http://reviews.example.test/api/repositories/3/info/
HTTP GETting http://reviews.example.test/api/repositories/4/
HTTP GETting http://reviews.example.test/api/repositories/4/info/
Attempting to create review request on http://xxx.xxx.xxx.xxx/svn/testRepo2 for None
Submitting the review request as admin
HTTP POSTing to http://reviews.example.test/api/review-requests/: {'submit_as': 'admin', 'repository': 'http://xxx.xxx.xxx.xxx/svn/testRepo2'}
Review request created
Attempting to set field 'target_groups' to 'reviewers' for review request '22'
HTTP PUTting to http://reviews.example.test/api/review-requests/22/draft/: {'target_groups': 'reviewers'}
Uploading diff, size: 2316
HTTP POSTing to http://reviews.example.test/api/review-requests/22/diffs/: {'basedir': '/'}
Publishing
HTTP PUTting to http://reviews.example.test/api/review-requests/22/draft/: {'public': 1}
Review request #22 posted.

http://reviews.example.test/r/22/

因此实际上发布/出版等一切操作都是有效的。

ReveiwBoard 的一位开发人员表示“我们不显示字符串‘’的密码。所以这完全是出于其他原因。”

我确信这是某种执行权限。它应该在 Ubuntu Server 上运行,所以认为是 Debian。

我想知道它是否与 Ubuntu 中的“无 root 登录”范例有任何联系。

我还没有尝试过其他 Linux 发行版,因为这不是一个真正的选择,因为 SVN 服务器托管在 Ubuntu Server 上。

您可以检查我曾经讨论过与 ReviewBoard 的护目镜小组的伙伴们一起。事后审查二进制文件位于:/usr/local/bin/post-review

我尝试添加权限www-数据能够执行事后审查在 sudoers 文件中,但没有运气。

您能想到什么解决办法?

提前谢谢你,鲍里斯拉夫。

答案1

密码提示实际上来自 svn,而不是来自 post-review。post-review 调用 svn 二进制文件来从 repo 中检索更改。

您看不到以您的用户身份输入密码的提示,因为您已经通过了身份验证,并且 svn 已存储了您的身份验证信息。您尚未以 www-data 用户身份执行此操作,因此 svn 会要求输入密码。

解决此问题的最简单方法是作为 www-data 用户执行 su 操作并向 repo 进行身份验证,这样凭据就会被缓存。

相关内容