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) и вставьте его в нужное место.

Другие вопросы по тегам