我最近设立了一个善变的代言人。所有的pusing都是通过ssh完成的。目前,只有拥有LDAP帐户的用户才能将更改推送到存储库。但是,鉴于在提交到本地存储库时,可以使用--user使用任何提交者名称。可能存在提交者名称与LDAP帐户名称不匹配的情况。我想避免这种情况。
确保不发生这种情况的最佳方法是什么?钩子会成为解决这个问题的最佳方法吗?我不希望这是一个本地钩子,但钩子将与存储库一样存在于同一台机器上。它需要在推送事件时检查提交者名称是否与LDAP帐户匹配,如果它没有发回适当的错误消息。
这看起来是一种明智的方式,还是我以错误的方式解决问题?
答案 0 :(得分:1)
如果您只是想检查用户名是否正确,那么在使用Mercurial Server时应该可以,因为每次推送都使用用户的ssh密钥进行身份验证,您将在$ REMOTE_USER环境变量中找到密钥名称,所以一个类型为pretxncommit的钩子(即,在应用了更改之后)可以检查作者名称和键名是否匹配,然后如果不匹配则可以拒绝和回滚提交。
,例如,如果您具有将所有密钥存储在路径中的约定,例如: 编码器/ “名称” _rsa.pub
然后这段代码应该进行检查:
if [ "$REMOTE_USER" != "coders/`hg tip --template "{author}\n"`_rsa.pub" ]
then
echo "reject msg.." ; exit 1
fi
但是,当用户刚刚从其他存储库中提取更改(即,由其他人提交的更改)并使用他/她的密钥将其推送到您的存储库时,可能会出现问题。然后钩子将拒绝它们,即使第一次提交中的用户名是正确的...使用hg,我们可以转发存储库之间的更改集,即使有各种用户名列表..但如果这不是你会遇到的情况,那么你可能会尝试这个..