題 嘗試在SVN中的post-commit掛鉤中執行命令時的權限問題


我有一個似乎無法解決的沉悶問題。

我想做什麼?

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的post-commit鉤子嘗試這個時會發生什麼?

資源被提交但是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

我得到(注意post-review命令中的-d參數 - DEBUG):

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

這是掛起等待輸入密碼的地方。提交操作無法完成,它只是停留在那裡。我已經和那些傢伙討論了這件事 在這篇文章中評論Board的谷歌小組

另一方面,當我使用調試輸出執行相同的命令但作為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中的“無根登錄”範例有任何關聯。

我還沒有嘗試過另一個Linux發行版,因為SVN服務器託管在Ubuntu Server上,所以這不是一個真正的選擇。

你可以查一下 我有這個討論 和那些傢伙一起在ReviewBoard的護目鏡組。 該 後檢查 二進製文件位於: /usr/local/bin/post-review 

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

你能想到什麼解決方案?

提前致謝,     鮑里斯拉夫。


6
2017-09-26 12:14


起源


當您收到密碼請求時,請嘗試運行 ps 看看發布它的過程是什麼。 - Scott


答案:


密碼提示實際上來自svn,而非來自審核後。 post-review調用svn二進製文件從repo中檢索更改。

您沒有看到密碼提示作為您的用戶,因為您已經過身份驗證並且svn已存儲您的身份驗證信息。您尚未將此作為www-data用戶,因此svn要求輸入密碼。

修復此問題的最簡單方法是將su作為www-data用戶並對repo進行身份驗證,以便緩存憑據。


3
2017-10-11 19:18



是的,我已經在一周前得出了這個結論,但你仍然是對的。知道SVN本地用戶緩存過期需要多長時間? - Borislav Sabev
我不認為它會過期。該 svnbook 沒有提到任何關於它的事情。 - Alan Shutko