Ошибка SVN при фиксации Доступ запрещен: 'foobar' MKACTIVITY MYREPO: - PullRequest
11 голосов
/ 07 апреля 2011

Сейчас я работаю с Apache и SVN с аутентификацией ActiveDirectory. Пользователь использует клиент TortoiseSVN.

Я должен отметить, что у меня есть 2 репозитория с одинаковым именем и разным сопоставлением, но перенаправленные на один и тот же «URL-адрес пользователя», поскольку разрешения для обоих репозиториев одинаковы.

например 'http://mysrvr/svn/foo/bar/corge' и' http://mysrvr/svn/foo/corge'

или 'http://mysrvr/svn/foo/bar/corge и' 'http://mysrvr/svn/foo/grault/corge'

Эта вещь из 2 репо реплицируется с 8 "парами репо", а остальные 7 работают просто отлично.

Вот моя ошибка:

Не удалось зафиксировать (подробности следуют):

доступ к '/ СВН / Mydir / MYREPO /! СВН / акт / 65bf494c-a66a-4f45-870e-d988f691a45d' Запрещено

Готово!

Это не разрешения, так как пользователь foobar имеет доступ к rw, и он успешно проверил хранилище. Эта ошибка происходит при коммите.

Вещи, которые помогут ориентироваться для точного решения:

  • С другими парами репо все в порядке. И разрешения те же.
  • Мой администратор svn может работать на том же локальном ПК, что и проблемный пользователь, который совершает коммит.
  • Верхний регистр / строчные URL не проблема, я проверил
  • NTLM и Active Directory также не являются проблемой, поскольку он имеет доступ к другому репо с тем же файлом разрешений.
  • Другие пользователи того же репо экспериментируют с той же проблемой. Пока я еще могу сделать коммит на своих локальных ПК. (как если бы у них не было разрешения на написание)

Вот журналы Apache:

Apache error.log

[дд мм 12:38:02 2011] [ошибка] [клиент 10.x.x.x] Доступ запрещен: 'foobar' MKACTIVITY MYREPO:

[дд мм 12:39:40 2011] [ошибка] [клиент 10.x.x.x] Доступ запрещен: 'foobar' MKACTIVITY MYREPO:

[дд мм 12:39:54 2011] [ошибка] [клиент 10.x.x.x] Доступ запрещен: 'foobar' MKACTIVITY MYREPO:

Apache access.log

10.x.x.x - foobar [дд / ммм / гг: 12: 38: 02 GMT] "ОПЦИИ / svn / myDir / MYREPO HTTP / 1,1 "200 198

10.x.x.x - foobar [дд / ммм / гг: 12: 38: 02 GMT] "PROPFIND / svn / myDir / MYREPO HTTP / 1,1 "207 667

10.x.x.x - foobar [дд / ммм / гг: 12: 38: 02 GMT] "MKACTIVITY / СВН / Mydir / MYREPO /! СВН / акт / 65bf494c-a66a-4f45-870e-d988f691a45d HTTP / 1,1 "403 266

svn_activity.log

[дд / ммм / гг: 12: 34: 20 -0300] Уолдо совершить р2

[дд / ммм / гг: 12: 39: 07 -0300] Фред / src / trunk r1447

Из файла svn_activity.log я могу вывести, что Apache перехватывает и перехватывает доступ, учитывая, что в указанный период времени нет доступа к foobar.

Итак, надеясь, что собранные данные полезны для решения этой проблемы ... есть идеи?

Ответы [ 2 ]

13 голосов
/ 13 мая 2011

Я нашел это!

Хорошо, вот ответ:

В чем была проблема:

Мои пользователи проверяют репо в каталоге / svn / myDir / MYREPO

Апач знает, что ему нужно перевести MYREPO в нижний регистр, поэтому, когда вы проверяете или выполняете какую-либо операцию чтения, все работает нормально.

Но когда пользователи попытались выполнить операцию фиксации, Apache изменился каким-то образом порядок операций, которые он должен выполнить, чтобы выполнить запрос пользователя, поэтому сначала принимает операцию записи и пытается записать, а затем переходит в нижний регистр.

Опять же, он пытается записать в / svn / myDir / MYREPO , проблема в том, что:

  • разрешения для репо, где установлено myrepo , а не MYREPO
  • фактическое репо - это мирепо, а не мирепо

Итак ... МИРЕПО не существует! Myrepo делает. Вот почему он выдает эту ошибку:

  • Доступ запрещен, поскольку для MYREPO не написано никаких разрешений.
  • И он распознает репо в режиме чтения, потому что apache понимает, что вы просите, и переводит.

Но для написания сначала работает с ним, а потом требуется , чтобы понять , что он делает. И исключение предшествует пониманию , поэтому Apache никогда туда не доберется.

Как это решить:

Это самая простая вещь:

  • Перейти к проверенному репо
  • Переместить с
    http://YourServer/svn/myDir/MYREPO
    на
    http://YourServer/svn/myDir/myrepo

Моя рекомендация:

Моя рекомендация для svn-администраторов и пользователей: do

ВСЁ НИЖНЯЯ ЧАСТЬ ... извините, я исправляю себя:

все строчные!

6 голосов
/ 17 мая 2012

В дополнение к вышеупомянутому решению, имейте в виду, что до Subversion 1.7 Subversion обрабатывал имена и пути к хранилищам без учета регистра в целях контроля доступа, преобразовывая их в нижний регистр внутри, прежде чем сравнивать их с содержимым.вашего файла доступа.Это теперь делает эти сравнения с учетом регистра.Если вы обновились до Subversion 1.7 со старой версии, вам следует проверить правильность регистра файлов доступа.

Источник - http://svnbook.red -bean.com / ru / 1.7 / svn-book.html #svn.serverconfig.pathbasedauthz

...