通过推送将数据传递给gitolite VREF
对于我现有的gitolite3安装,我想添加匿名访问,限制在一定数量的存储库中。所有这些存储库都应该允许读取,而写入操作应该受到保护 为此,我考虑将一个令牌推送到gitolite存储库。VREF接收令牌并检查其是否有效。如果是,则允许对存储库执行写操作。gitolite配置应如下所示:通过推送将数据传递给gitolite VREF,git,gitolite,Git,Gitolite,对于我现有的gitolite3安装,我想添加匿名访问,限制在一定数量的存储库中。所有这些存储库都应该允许读取,而写入操作应该受到保护 为此,我考虑将一个令牌推送到gitolite存储库。VREF接收令牌并检查其是否有效。如果是,则允许对存储库执行写操作。gitolite配置应如下所示: repo @anonrepos RW = @all option deny-rules = 1 - VREF/MYTOKENREF = @all (如果配置包含错误,则我从它们所在的p
repo @anonrepos
RW = @all
option deny-rules = 1
- VREF/MYTOKENREF = @all
(如果配置包含错误,则我从它们所在的pc上复制了错误的配置)对于vref,我想到:
#!/usr/bin/python3
token = input()
if is_valid(token): # TODO: define is_valid
exit(0) # Allow the push
else:
exit(1) # Deny it
理论到此为止。当我尝试推送时,我得到一个错误,因为pythonsinput()
会引发EOR。因此,我不能通过stdin将信息传递给vref,也不能通过sys.argv
传递信息
还是我错了?是否有某种方法可以将令牌传递给我的vref,或者通过一些git命令行技巧?或者,如果我确信背后的人是合法的,是否有其他方法可以允许匿名推送(实际上每个人都可以推送,所以我需要保护这些存储库)?我在考虑将要推送的提交的提交id白名单,但这不是一种灵活的方法
注意:推送的过程应该与他的过程类似:有人向我发送消息说他想推送到存储库,我创建一个令牌并发送给他,最后他使用提供的令牌成功地推送到存储库。另一种方法是定义一组您不填充的用户
repo test-ldap-devel
RW+ = @devel
要确定某个用户是否在该devel组中(并授权推送),您需要编写一个程序,在给定用户名的情况下,该程序查询用户引用并返回该用户所属的组的空格分隔列表。然后将该程序的完整路径放入名为
GROUPLIST\u PGM
的变量中,如下所示:
GROUPLIST_PGM => '/home/git/bin/ldap-query-groups',
这通常是在考虑LDAP引用(as)的情况下完成的,但您可以使用任何其他引用
这可能会取代代币的概念,因为代币似乎很难传递。您应该阅读精美手册。Gitolite VREFs是
update
hooks的扩展,因此在命令行上接受它们的输入,而不是通过stdin
这种东西的一般规则是“通过环境变量传递”。我不知道如何特别使用gitolite来设置它。@torek这是个好主意,虽然我想让推送尽可能容易,并且在windows系统上传递环境变量并不容易。Hanks,我会看看它并尝试让它工作。我还没有试过,我还有其他事情要做。但我同意使用LDAP是一条可行之路。我会按照你的建议做其他事情,但我会将你标记为答案,直到我创建了一个描述我所做的事情的答案。@Sirac当然,我会支持你的答案(只需将我的答案保持为“选中”)