git-cvsserver pserver распространение имени пользователя
Для некоторых специфических проблем рабочего процесса в моей компании мне нужно разрешить некоторым пользователям работать с CVS, пока основной репозиторий находится в git.
Я выбрал git-cvsserver в качестве реализации для этой задачи.
Я установил git-репозиторий, включил его для gitcvs и настроил симуляцию pserver на xinetd. Все работает нормально, я могу работать с этим репозиторием из клиента cvs, проходя аутентификацию по файлу passwd, который я создал с помощью эмуляции pserver.
Моя проблема в том, что коммиты, которые я делаю через CVS, отображаются под пользователем, который запускает xinetd, а не под пользователем, которого я аутентифицирую на passwd.
то есть я фиксирую CVS как пользователя 'foo', я успешно аутентифицируюсь через pserver, но когда я просматриваю историю коммитов git для этого репозитория, я вижу, что фиксация была сделана пользователем 'root'.
Я просмотрел источник git-cvsserver ( http://git.kernel.org/?p=git/git.git;a=blob;f=git-cvsserver.perl) и кажется, что вход в CVS используется только для аутентификация, а не для фактического совершения. Записи в базе данных SQLite также содержат имя пользователя root, а не foo
Есть ли у вас какие-либо идеи, как я могу распространять CVS логин для git username?
внешняя ссылка в списке рассылки git: http://thread.gmane.org/gmane.comp.version-control.git/169182
2 ответа
У меня нет особого опыта с этим, но git-cvsserver
почти наверняка вызывает git-commit
делать реальную работу. Ты можешь получить git-commit
использовать все, что вы хотите для автора и коммиттера, устанавливая переменные среды, такие как GIT_COMMITTER_EMAIL
а также GIT_AUTHOR_EMAIL
(также ..._NAME
а также ..._DATE
а также ..._IDENT
). Если у вас есть информация для аутентификации, вы можете просто установить ее в $ENV
до фактического совершения. Если git-cvsserver
не очищает его среду, вы могли бы фактически установить их из информации аутентификации в оболочке, прежде чем вызывать ее (на случай любого коммита).
Прежде чем распространять логин, как показано в user479989 , с
помощью ответеGIT_COMMITTER_NAME
/
EMAIL
переменные среды, убедитесь, что этап аутентификации выполнен правильно.
До Git 2.34 (4 квартал 2021 г.) " " () имел давнюю ошибку в коде аутентификации, которая, наконец, была исправлена (хотя это неясно, и это отдельный вопрос, если кто-то серьезно ее использует).
См. коммит 4b81f69, коммит bffcb4d , (15 сентября 2021 г.) Карло Марсело Аренас Белон (
carenas
) .
(Объединено Junio C Hamano --
gitster
-- в коммите 1030dae, 3 октября 2021 г.)
коммит a7775c7: правильно использовать crypt для сравнения хэшей паролей
Подписал: Карло Марсело Аренас Белон
c057bad ("
git-cvsserver
: использовать файл паролей cvsserver pserver", 15 мая 2010 г., Git v1.7.2-rc0 -- merge) добавляет способ ( человекman ) для предоставления аутентифицированных учетных записей pserver без паролей в открытом виде, но использует имя пользователя вместо пароля для вызова crypt(3).Исправьте это и убедитесь, что в документации правильно указано, как получить хешированные пароли, которые можно использовать для заполнения этой конфигурации, а также исправить хеш, который использовался для тестов.
Это изменение потребует, чтобы любой пользователь этой функции обновил хэши в своей конфигурации, но имеет преимущество использования более похожего формата, чем использует cvs, что, вероятно, также упрощает любую миграцию.
теперь включает в свою справочную страницу :
файлы, но только с
-d
вариант (или-B
если ваша система это поддерживает).
git cvsserver
теперь включает в свою справочную страницу :
Предпочтительно использовать специальную системную утилиту, которая управляет созданием хэша пароля на вашей платформе (например,
mkpasswd
в линуксе,encrypt
в OpenBSD илиpwhash
в NetBSD) и вставьте его в нужное место.