插件使用gitolite的ACL用于CGIT / Apache httpd?

时间:2015-06-24 17:08:47

标签: apache httpd.conf gitolite cgit

我们使用gitolite的ACL机制来控制谁有权访问不同的存储库。我们还使用CGIT和Apache httpd来浏览可读的存储库。

我们也想在Apache httpd访问控制系统中使用gitolite ACL。

是否有提供此功能的Apache httpd authn / authz模块?

谢谢!

1 个答案:

答案 0 :(得分:1)

我刚刚使用这个cgi Perl脚本集成了CGit和gitolite,调用了gitolite:cgit/cgit.pl.tpl
(不要介意@H@,这些是模板占位符,为了生成实际的Perl脚本,应该稍后对其进行估值)

这个想法是受益于Apache所做的身份验证:

my $remote_user=$ENV{"REMOTE_USER"};

在调用Gitolite时使用该用户来检查是否可以授予对repo的访问权限,如果授予访问权限则调用实际的cgit.cgi C过程:

use Gitolite::Rc;
use Gitolite::Common;
use Gitolite::Conf::Load;

(my $repo)=($path_info =~ /\/([^\/]+)/);
  my $perm = "R";
  if ($repo ne "") {
  my $aperm = access( $repo, $user, 'R', 'any' );
  # my ($aperm, $creator) = &repo_rights($repo);
    $perm=$aperm;
  }
  if ($perm !~ /DENIED/) {
    system("@H@/cgit/cgit.cgi");
  }
  else {
    print "Content-type: text/html\n\n";
    print "<html>\n";
    print "<body>\n";
    print " <h1>HTTP Status 403 - Access is denied</h1>\n";
    print " You don't have access to repo <b>$repo</b> as <b>$user</b>\n";
    print "</body>\n";
    print "</html>\n";
  }