mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
gitweb: Add a per-repository authorization hook.
Add a configuration variable that can be used to specify an arbitrary subroutine that will be called in the same situations where $export_ok is checked, and its return value used to decide whether the repository is to be shown. This allows the user to implement custom authentication schemes, for example by issuing a subrequest through mod_perl and checking if Apache will authorize it. Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com> Acked-by: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
ec26f098a6
commit
dd7f5f105a
|
@ -166,6 +166,27 @@ Gitweb repositories
|
|||
shows repositories only if this file exists in its object database
|
||||
(if directory has the magic file named $export_ok).
|
||||
|
||||
- Finally, it is possible to specify an arbitrary perl subroutine that
|
||||
will be called for each project to determine if it can be exported.
|
||||
The subroutine receives an absolute path to the project as its only
|
||||
parameter.
|
||||
|
||||
For example, if you use mod_perl to run the script, and have dumb
|
||||
http protocol authentication configured for your repositories, you
|
||||
can use the following hook to allow access only if the user is
|
||||
authorized to read the files:
|
||||
|
||||
$export_auth_hook = sub {
|
||||
use Apache2::SubRequest ();
|
||||
use Apache2::Const -compile => qw(HTTP_OK);
|
||||
my $path = "$_[0]/HEAD";
|
||||
my $r = Apache2::RequestUtil->request;
|
||||
my $sub = $r->lookup_file($path);
|
||||
return $sub->filename eq $path
|
||||
&& $sub->status == Apache2::Const::HTTP_OK;
|
||||
};
|
||||
|
||||
|
||||
Generating projects list using gitweb
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
|
|
@ -95,6 +95,11 @@ BEGIN
|
|||
# (only effective if this variable evaluates to true)
|
||||
our $export_ok = "++GITWEB_EXPORT_OK++";
|
||||
|
||||
# show repository only if this subroutine returns true
|
||||
# when given the path to the project, for example:
|
||||
# sub { return -e "$_[0]/git-daemon-export-ok"; }
|
||||
our $export_auth_hook = undef;
|
||||
|
||||
# only allow viewing of repositories also shown on the overview page
|
||||
our $strict_export = "++GITWEB_STRICT_EXPORT++";
|
||||
|
||||
|
@ -400,7 +405,8 @@ sub check_head_link {
|
|||
sub check_export_ok {
|
||||
my ($dir) = @_;
|
||||
return (check_head_link($dir) &&
|
||||
(!$export_ok || -e "$dir/$export_ok"));
|
||||
(!$export_ok || -e "$dir/$export_ok") &&
|
||||
(!$export_auth_hook || $export_auth_hook->($dir)));
|
||||
}
|
||||
|
||||
# process alternate names for backward compatibility
|
||||
|
|
Loading…
Reference in a new issue