Проблема с разрешениями при попытке выполнить команду в хуке post-commit в SVN

Проблема с разрешениями при попытке выполнить команду в хуке post-commit в 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-commit не завершается.

В чем заключается проблема?

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.

Мне было интересно, связано ли это как-то с парадигмой «без входа root» в Ubuntu.

Я не пробовал использовать другой дистрибутив Linux, поскольку это не вариант, поскольку сервер SVN размещен на Ubuntu Server.

Вы можете проверитьэто обсуждение у меня былос ребятами из группы ReviewBoard в Google.после-обзорДвоичный файл находится по адресу:/usr/local/bin/post-review

Я попробовал добавить разрешения дляwww-данныеиметь возможность выполнитьпосле-обзорв файле sudoers, но безуспешно.

Какое решение вы можете предложить?

Заранее спасибо, Борислав.

решение1

Запрос пароля на самом деле исходит от svn, а не от post-review. post-review вызывает двоичный файл svn для извлечения изменений из репозитория.

Вы не видите запрос пароля как ваш пользователь, потому что вы уже аутентифицировались, и svn сохранил вашу информацию об аутентификации. Вы еще не сделали этого как пользователь www-data, поэтому svn запрашивает пароль.

Самый простой способ исправить это — войти в систему как пользователь www-data и пройти аутентификацию в репозитории, чтобы учетные данные были кэшированы.

Связанный контент