как вы используете AclExtension и mercurial-server / hg-ssh? - PullRequest
1 голос
/ 17 ноября 2009

mercurial-сервер управляет базой данных пользователей в папке ключей. Пользователи и группы представлены файлами и папками.

AclExtension использует группу пользователей Linux через ssh.

они не совпадают. или я что то пропустил?

Мне удалось заставить работать mercurial-сервер. но просто не вижу, как интегрировать с ним AclExtension, чтобы у меня был более точный контроль доступа.

Ответы [ 2 ]

3 голосов
/ 17 ноября 2009

К сожалению, AclExtension блокирует доступ к именам пользователей. Если вы создаете отдельные учетные записи пользователей UNIX для каждого использования с hg-ssh, у вас есть все, что вам нужно, но если все ваши пользователи ssh используют одну и ту же учетную запись пользователя Unix, то AclExtension не будет работать для вас.

Если только ...

Я только что заглянул в файл acl.py, и похоже, что он использует getuser модуля getpass.py, который проверяет среду на наличие имени пользователя, используя этот код:

for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'):
    user = os.environ.get(name)
    if user:
        return user

так что может быть возможным, чтобы подделать это, установив переменную окружения в файле author_keys пользователя hg-ssh, например:

command="hg-ssh path/to/repo" environment="LOGNAME=fakeusername" ssh-dss ...

где тогда вы можете поместить fakeusername в правила ACL и иметь разные fakeusername для каждого ключа, работающего под одной учетной записью UNIX.

Кстати: все, похоже, используют только hg-ssh, я никогда не видел, чтобы (неофициальное) приложение mercurial-server больше использовалось.

1 голос
/ 06 декабря 2009

Трюк с окружением не работает на моей коробке Solaris; Мое решение состояло в том, чтобы передать имя fakeuser в качестве параметра hg-ssh и задать для него значение os.environ ['LOGNAME'], чтобы getpass его увидел.

command="hg-ssh fakeusername" ssh-dss ...
...