Browse Source

Have git-cvsserver call hooks/update before really altering the ref

git-cvsserver is analogous to git-receive-pack; a checking from a cvs
client to a central server is like a git-push from a working repository.
Therefore it's nice to use the same access control (and email sending)
that a receive-pack would perform.

This patch tests for an executable update hook; if it is it is run with
the ref being updated and the old and new hashes as normal.  If the
update hook returns an error code the update is aborted and the ref is
never updated.  The cvsserver returns "error 1" to the client to signal
there was an EPERM error.

Signed-off-by: Andy Parkins <andyparkins@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Andy Parkins 18 years ago committed by Junio C Hamano
parent
commit
b2741f63d4
  1. 15
      git-cvsserver.perl

15
git-cvsserver.perl

@ -1171,6 +1171,21 @@ sub req_ci @@ -1171,6 +1171,21 @@ sub req_ci
exit;
}

# Check that this is allowed, just as we would with a receive-pack
my @cmd = ( $ENV{GIT_DIR}.'hooks/update', "refs/heads/$state->{module}",
$parenthash, $commithash );
if( -x $cmd[0] ) {
unless( system( @cmd ) == 0 )
{
$log->warn("Commit failed (update hook declined to update ref)");
print "error 1 Commit failed (update hook declined)\n";
close LOCKFILE;
unlink($lockfile);
chdir "/";
exit;
}
}

print LOCKFILE $commithash;

$updater->update();

Loading…
Cancel
Save