我们使用 gitolite 的 ACL 机制来控制谁可以访问不同的存储库。我们还将 CGIT 与 Apache httpd 一起使用,以允许浏览可读的存储库。
我们还想在 Apache httpd 访问控制系统中使用 gitolite ACL。
是否有提供此功能的 Apache httpd authn/authz 模块?
谢谢!
我们使用 gitolite 的 ACL 机制来控制谁可以访问不同的存储库。我们还将 CGIT 与 Apache httpd 一起使用,以允许浏览可读的存储库。
我们还想在 Apache httpd 访问控制系统中使用 gitolite ACL。
是否有提供此功能的 Apache httpd authn/authz 模块?
谢谢!
不久前,我已经将 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";
}