Назад | Перейти на главную страницу

Управление доступом клонов к нескольким репозиториям Mercurial, обслуживаемым через hgwebdir.cgi

Возможный дубликат:
Контроль доступа на чтение с Mercurial и Apache

Я пытаюсь разместить несколько репозиториев Mercurial для своих клиентов. Мне нужно контролировать доступ к каждому репозиторию индивидуально - не только push-доступ, но и клонирование.

У меня есть .htaccess набор, который требует глобальной аутентификации:

AuthUserFile /path/to/hgweb.passwd
AuthGroupFile /dev/null
AuthName "Chris Lawlor Client Mercurial Repositories"
AuthType Basic
<Limit GET POST PUT>
    Require valid-user
</Limit>
<FilesMatch "\.(htaccess|passwd|config|bak)$">
    Order Allow,Deny
    Deny from all
</FilesMatch>

Затем в каждом репозитории у меня есть .hg/hgrc файл, требующий действующего пользователя

[web]
allow_push = <comma seperated user list> 

Это почти то, что мне нужно. Проблема в том, что мне нужно добавить все мои клиенты hgweb.passwd, что дает им клонировать доступ к все репозиториев.

Единственное решение, которое я могу придумать, - это иметь другой .htaccess и .passwd файл в каждый репозиторий. Я действительно не хочу этого делать, это кажется немного запутанным. Я уже могу указать список авторизованных пользователей для каждого репозитория в этих репозиториях ' hgrc файл с allow_push настройка. Если бы только был allow_clone установка тоже ...

Вся документация, которую я нашел для hgwebdir.cgi неполный. Я прочел:

И другие. Мне еще предстоит найти исчерпывающий список hgrc настройки.

Я думаю, это скорее вопрос Apache, чем вопрос Mercurial.

Если я не смогу найти лучший подход, я буду использовать отдельный .htaccess и .passwd файл для каждого репо.

Если это важно, это виртуальный хост на Webfaction - примерно как описано в их документации.

Редактировать: Похоже на любой .htaccess файлы в клиентских репозиториях будут проигнорированы. Я думаю, это потому, что все запросы обслуживаются hgwebdir.cgi в корне сети, поэтому только .htaccess в webroot вступает в силу.

Я нашел ответ в hgrc (5) справочная страница:

allow_read

Если пользователю еще не было отказано в доступе к репозиторию из-за содержимого deny_read, этот список определяет, предоставлять ли пользователю доступ к репозиторию. Если этот список не пуст, а пользователь не прошел проверку подлинности или отсутствует в списке (разделены пробелами или ,), то пользователю будет отказано в доступе. Если список пуст или не задан, то по умолчанию доступ разрешен всем пользователям. Настройка allow_read к особой ценности * эквивалентно тому, что он не установлен (т.е. доступ разрешен всем пользователям). Содержание allow_read список рассматривается после deny_read список.