4

我最近建立了一个善变的存储库。所有的 pusing 都是通过 ssh 完成的。目前只有具有 LDAP 帐户的用户才能将更改推送到存储库。但是,鉴于在提交到本地存储库时,可以使用 --user 使用任何提交者名称。可能会出现提交者名称与 LDAP 帐户名称不匹配的情况。我想避免这种情况。

确保不会发生这种情况的最佳方法是什么?钩子是解决这个问题的最好方法吗?我不希望这是一个本地挂钩,而是与存储库位于同一台机器上的挂钩。它需要在推送事件中检查提交者名称是否与 LDAP 帐户匹配,以及它是否没有发回适当的错误消息。

这似乎是一种明智的继续方式,还是我以错误的方式解决问题?

4

1 回答 1

1

如果您只是想检查用户名是否正确,那么在使用Mercurial Server时应该可以,因为每次推送都使用用户的 ssh 密钥进行身份验证,并且您会在 $REMOTE_USER 环境变量中找到密钥名称,因此 pretxncommit 类型的钩子(即,在应用更改之后)可以检查作者姓名和密钥名称是否匹配,如果不匹配,则可以拒绝并回滚提交。

例如,如果您有将所有键存储在路径中的约定,例如:coders/"name"_rsa.pub

那么这段代码应该进行检查:

if [ "$REMOTE_USER" != "coders/`hg tip --template "{author}\n"`_rsa.pub" ]
   then
      echo "reject msg.." ; exit 1
fi

但是,当用户刚刚从其他存储库中提取更改(即,其他人所做的提交)并使用他/她的密钥将它们推送到您的存储库时,可能会出现问题。然后,即使用户名在第一次提交中是正确的,钩子也会拒绝它们。使用 hg,我们可以在存储库之间转发变更集,即使有各种用户名的列表。但如果这不是你会遇到的情况,那么你可以尝试这个..

于 2010-06-30T08:29:28.233 回答