Как я могу настроить сообщение «403 запрещено»? Только для этого сообщения я хочу добавить дополнительную информацию, например, «403 Запрещено (у вас нет прав на [URL-адрес репозитория])». Как это сделать? Я хочу сохранить совместимость с любыми инструментами svn, такими как собственный клиент svn, черепаха, среда программирования Java и т. Д.
--редактировать--
Моя среда:
ОС: Linux Debian
SVN: 1.8.8
протокол доступа: HTTP (s) от Apache и DAV svn
auth protolol config: authzsvnaccess
Все работает как я хочу, кроме запрещенного сообщения. Это вводит пользователей в заблуждение. Они думают, что проблема связана с сервисом, но на самом деле проблема связана с правами доступа.
Вы можете настроить текст / документы ошибки с помощью Apache (http://httpd.apache.org/docs/current/custom-error.html), но здесь это не поможет.
Сообщения об ошибках встраиваются в клиентский источник (subversion/libsvn_ra_serf/util.c
):
svn_ra_serf__error_on_status(serf_status_line sline,
const char *path,
const char *location)
{
switch(sline.code)
{
case 301:
case 302:
case 307:
return svn_error_createf(SVN_ERR_RA_DAV_RELOCATED, NULL,
(sline.code == 301)
? _("Repository moved permanently to '%s';"
" please relocate")
: _("Repository moved temporarily to '%s';"
" please relocate"), location);
case 403:
return svn_error_createf(SVN_ERR_RA_DAV_FORBIDDEN, NULL,
_("Access to '%s' forbidden"), path);
Не глядя, я подозреваю, что другие клиенты (SmartSVN, Tortoise) используют те же или очень похожие клиентские библиотеки HTTP, поэтому у вас будет та же проблема: нет возможности для маршрутизации настраиваемых сообщений об ошибках с сервера на клиент, когда клиент отклоняется ошибкой пароля или authz.
Однако, если это то, что вам действительно нужно, вы можете в особом случае указать необходимый путь в pre-commit
ловушка, поскольку, когда существует сценарий ловушки с ненулевым статусом, содержимое stdout
отправляются обратно пользователю, и вы можете сказать, что хотите.
Проблема в том, что запрос должен быть сначала аутентифицирован, поэтому подобное решение, скорее всего, нарушит вашу модель разрешений, если только оно не предназначено для очень конкретного, единственного случая. (Вы всегда можете настроить клиента, но я подозреваю, что это больше, чем вы готовы пойти на это)