SVN hook pre-revprop-change не работает

Я знаю, что об этом уже много раз спрашивали, но я считаю, что моя ситуация иная.

Я пытаюсь добавить ловушку pre-revprop-change в наш репозиторий SVN, чтобы можно было вносить изменения в сообщения журнала.

Прежде чем я добавил файл pre-revprop-change, я получал эту ошибку:

$ svn propset -r 557 --revprop svn:log "New message!" https://myserver/repos/myrepo
svn: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent
svn: At least one property change failed; repository is unchanged
svn: Error setting property 'log': 
Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook

«Нет проблем, - подумал я. Добавлю:

$ cd /var/www/svn/myrepo/hooks

$ # Create the simplest hook possible
$ echo '#!/bin/sh' > pre-revprop-change
$ echo 'exit 0' >> pre-revprop-change

$ # Check that it looks correct
$ cat pre-revprop-change
#!/bin/sh
exit 0

$ # Looks good, now make it executable
$ chmod a+x pre-revprop-change

$ # Check the permissions
$ ls -al pre-revprop-change
-rwxr-xr-x 1 apache apache 17 2012-05-24 12:05 pre-revprop-change

$ # Run it, to make sure it runs, and check the error code
$ ./pre-revprop-change 
$ echo $?
0

Итак, согласно всему остальному, что я читал о SO, это должно быть все, что мне нужно, чтобы заставить его работать. Но когда я снова пытаюсь отредактировать сообщение журнала, я все равно получаю сообщение об ошибке (на этот раз уже другое):

$ svn propset -r 557 --revprop svn:log "New message!" https://myserver/repos/myrepo
svn: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent
svn: At least one property change failed; repository is unchanged
svn: Error setting property 'log': 
Revprop change blocked by pre-revprop-change hook (exit code 255) with no output.

Следует отметить несколько моментов:

1) Репозиторий размещен на сервере SELinux (Fedora core 10). Возможно, мне нужно что-то сделать с этими разрешениями? Вот разрешения SE для ловушки:

$ ls -alZ pre-revprop-change
-rwxr-xr-x  apache apache unconfined_u:object_r:httpd_sys_content_rw_t:s0 pre-revprop-change

2) Доступ к репозиторию осуществляется через WebDAV (обратите внимание на https:// в имени репозитория). Есть ли что-то, что мне нужно настроить на стороне WebDAV, чтобы разрешить изменения до изменений?


person Lee Netherton    schedule 24.05.2012    source источник


Ответы (2)


После нескольких часов попыток я нашел ответ. И, поскольку его больше нигде в Интернете не существует, я размещу его здесь ...

Проблема была вызвана SELinux (здесь нет ничего удивительного). Похоже, что у apache (/usr/sbin/httpd) не было необходимых разрешений для запуска сценария ловушки с вышеупомянутыми разрешениями SE. Чтобы заставить его выполнить, необходимо изменить разрешения SELinux с помощью

$ chcon -t httpd_exec_t pre-revprop-change

(Сначала я попытался изменить его на httpd_sys_script_exec_t, но этого было недостаточно для запуска скрипта. Но с типом httpd_exec_t это сработало.)

Последний вопрос: безопасно ли это делать?

person Lee Netherton    schedule 24.05.2012
comment
Безопасно ли это, зависит от ваших стандартов безопасности :) ... но да, SELinux может вызвать некоторые тонкие проблемы, которые, тем не менее, можно диагностировать, включив ведение журнала. - person 0xC0000022L; 24.05.2012
comment
Спасибо. Да, я не думаю, что наш сервер станет центром взлома, но я просто хотел убедиться, что не открыл огромную дыру в безопасности! Вы знаете, почему использование httpd_sys_script_exec_t не помогло? Судя по документации, в нем должно быть ... - person Lee Netherton; 24.05.2012
comment
Я бы также подумал, что это должно сработать. Понятия не имею, почему это должно быть httpd_exec_t вместо httpd_sys_script_exec_t. Но возможно, что SELinux каким-то образом способен отличать сценарии, вывод которых идет в Apache, от тех, которые отправляются в другое место. Где вы используете Apache, а не svnserve (хотя Apache может использовать прокси), верно? - person 0xC0000022L; 24.05.2012
comment
Ага, определенно прохожу через apache. URL-адрес svn WebDAV настроен в каталоге /etc/httpd/conf.d/. И я получал к нему доступ через https:// url. - person Lee Netherton; 25.05.2012

Было подобное на CentOS. Проблема, вероятно, была где-то в кешировании, так как когда я отредактировал файл, а затем вернул его обратно, он начал работать.

Поэтому, если у кого-то есть похожая проблема, просто попробуйте:

touch hooks/pre-revprop-change
person Nux    schedule 17.07.2013