嘗試在 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 嘗試此操作時,一切都很好。評論已發表,已發表等==>所有權限和其他雜項設定都OK。

當我從 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 谷歌小組

另一方面,當我使用調試輸出執行相同的命令但作為 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 的一位開發人員表示“我們不顯示字串“Password for ''”。所以這完全來自其他東西。”

我確信這是某種執行權限。它應該在 Ubuntu Server 上運行,所以考慮 Debian。

我想知道它是否與 Ubuntu 中的「無 root 登入」範例有任何關聯。

我還沒有嘗試過其他 Linux 發行版,這實際上並不是一個選擇,因為 SVN 伺服器託管在 Ubuntu Server 上。

你可以檢查我進行的這次討論和 ReviewBoard 護目鏡組的人一起。這事後審查二進位檔案位於:/usr/local/bin/post-review

我嘗試添加權限www-數據能夠執行事後審查在 sudoers 文件中,但沒有運氣。

你能想到什麼解決辦法?

提前致謝,鮑里斯拉夫。

答案1

密碼提示其實是來自svn,而不是來自post-review。 post-review 呼叫 svn 二進位檔案來檢索儲存庫中的變更。

作為您的用戶,您看不到密碼提示,因為您已經通過身份驗證並且 svn 已儲存您的身份驗證資訊。您尚未以 www-data 使用者身分執行此操作,因此 svn 會要求您輸入密碼。

解決此問題的最簡單方法是 su 作為 www-data 使用者並向儲存庫進行身份驗證,以便快取憑證。

相關內容