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 フックを実行しているユーザーとして実行されます。この場合は、Apache の www-data ユーザーです。つまり、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 の「ルートログインなし」パラダイムと何らかの関係があるのではないかと考えていました。

別の Linux ディストリビューションでは試していませんが、SVN サーバーは Ubuntu Server でホストされているため、実際には選択肢ではありません。

確認してもいい私が行ったこの議論ReviewBoardのGoggleグループのみんなと。事後レビューバイナリは次の場所にあります:/usr/local/bin/post-review

権限を追加してみましたwwwデータ実行できる事後レビューsudoers ファイルで実行しようとしましたが、うまくいきませんでした。

どのような解決策が考えられますか?

よろしくお願いします、ボリスラフ。

答え1

パスワード プロンプトは、実際には post-review からではなく svn から来ています。post-review は svn バイナリを呼び出して、リポジトリから変更を取得します。

すでに認証されており、svn が認証情報を保存しているため、ユーザーとしてパスワード プロンプトは表示されません。www-data ユーザーとしてまだこれを実行していないため、svn はパスワードを要求します。

これを修正する最も簡単な方法は、www-data ユーザーとして su し、リポジトリに認証して、資格情報をキャッシュすることです。

関連情報