2

我们使用 gitolite 的 ACL 机制来控制谁可以访问不同的存储库。我们还将 CGIT 与 Apache httpd 一起使用,以允许浏览可读的存储库。

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

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

谢谢!

4

1 回答 1

1

不久前,我已经将 CGit 和 gitolite 与这个 cgi Perl 脚本集成在一起,调用 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";
  }
于 2015-06-25T06:58:28.953 回答