通过push将数据传递给gitolite-VREF

时间:2017-06-19 18:30:03

标签: git gitolite

对于我现有的gitolite3-installation,我想添加匿名访问,仅限于一定数量的存储库。应该允许读取所有这些存储库,同时应该保护写操作。

为此我想到了将一个令牌推送到gitolite-repositories。 VREF接收令牌并检查它是否有效。如果是,则允许对存储库进行写入操作。 gitolite-conf应如下所示:

repo @anonrepos
    RW = @all

    option deny-rules = 1
    - VREF/MYTOKENREF = @all

(如果配置包含错误,那么我从他们所在的电脑中错误地复制了它们)
对于我想到的vref:

#!/usr/bin/python3

token = input()
if is_valid(token): # TODO: define is_valid
    exit(0) # Allow the push
else:
    exit(1) # Deny it

理论如此之多。当我尝试推送时,我收到错误,因为pythons input()引发了EOFError。所以我不能通过stdin将信息传递给vref,也不能通过sys.argv传递信息。

或者我错了?有没有办法将令牌传递给我的vref,可能是通过一些git-command-line-trickery?或者是否有其他方式我可以允许匿名推送(字面上每个人都可以推送,所以我需要保护这些存储库)如果我确定它背后的人是合法的?我正在考虑将即将推送的提交的commit-id列入白名单,但这不是一种灵活的方法。

注意:有人推送的程序应该像他一样:有人告诉我他想要推送到存储库,我创建一个令牌并将其发送给他,最后他推送使用提供的令牌成功地存储到存储库中。

2 个答案:

答案 0 :(得分:1)

另一种方法是定义一组您没有填充的用户。

repo test-ldap-devel
    RW+    =    @devel

要确定用户是否在该开发组中(并授权推送),您可以编写一个程序,该程序在给定用户名的情况下查询用户参照并返回用户所属的组的空格分隔列表。 。
然后将此程序的完整路径放在名为GROUPLIST_PGM的{​​{3}}变量中,如下所示:

GROUPLIST_PGM           =>  '/home/git/bin/ldap-query-groups',

这通常在考虑LDAP参考时完成(如rc),但您可以使用任何其他参考。

这可能会取代似乎有问题的令牌概念。

答案 1 :(得分:0)

你应该阅读精细手册。 Gitolite VREF是update挂钩的扩展,因此在命令行上输入,而不是通过stdin。

http://gitolite.com/gitolite/vref/#what-arguments-are-passed-to-the-vref-maker

https://git-scm.com/docs/githooks