Skip to content

Commit

Permalink
cvsserver: anonymous cvs via pserver support
Browse files Browse the repository at this point in the history
git-cvsserver now knows how to do the pserver auth chat when the user
is anonymous. To get it to work, add a line to your inetd.conf like

  cvspserver stream tcp nowait nobody git-cvsserver pserver

(On some inetd implementations you may have to put the pserver parameter twice.)

Commits are blocked. Naively, git-cvsserver assumes non-malicious users. Please
review the code before setting this up on an internet-accessible server.

NOTE: the <nobody> user above will need write access to the .git directory
to maintain the sqlite database. Updating of the sqlite database should be
put in an update hook to avoid this problem, so that it is maintained by
users with write access.
  • Loading branch information
Martin Langhoff committed Mar 4, 2006
1 parent 8bc63c9 commit 91a6bf4
Showing 1 changed file with 34 additions and 0 deletions.
34 changes: 34 additions & 0 deletions git-cvsserver.perl
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,31 @@
my $TEMP_DIR = tempdir( CLEANUP => 1 );
$log->debug("Temporary directory is '$TEMP_DIR'");

# if we are called with a pserver argument,
# deal with the authentication cat before entereing the
# main loop
if (@ARGV && $ARGV[0] eq 'pserver') {
my $line = <STDIN>; chomp $line;
unless( $line eq 'BEGIN AUTH REQUEST') {
die "E Do not understand $line - expecting BEGIN AUTH REQUEST\n";
}
$line = <STDIN>; chomp $line;
req_Root('root', $line) # reuse Root
or die "E Invalid root $line \n";
$line = <STDIN>; chomp $line;
unless ($line eq 'anonymous') {
print "E Only anonymous user allowed via pserver\n";
print "I HATE YOU\n";
}
$line = <STDIN>; chomp $line; # validate the password?
$line = <STDIN>; chomp $line;
unless ($line eq 'END AUTH REQUEST') {
die "E Do not understand $line -- expecting END AUTH REQUEST\n";
}
print "I LOVE YOU\n";
# and now back to our regular programme...
}

# Keep going until the client closes the connection
while (<STDIN>)
{
Expand Down Expand Up @@ -165,6 +190,7 @@ sub req_Root
print "E the repo config file needs a [gitcvs] section added, and the parameter 'enabled' set to 1\n";
print "E \n";
print "error 1 GITCVS emulation disabled\n";
return 0;
}

if ( defined ( $cfg->{gitcvs}{logfile} ) )
Expand All @@ -173,6 +199,8 @@ sub req_Root
} else {
$log->nofile();
}

return 1;
}

# Global_option option \n
Expand Down Expand Up @@ -914,6 +942,12 @@ sub req_ci

$log->info("req_ci : " . ( defined($data) ? $data : "[NULL]" ));

if ( @ARGV && $ARGV[0] eq 'pserver')
{
print "error 1 pserver access cannot commit\n";
exit;
}

if ( -e $state->{CVSROOT} . "/index" )
{
print "error 1 Index already exists in git repo\n";
Expand Down

0 comments on commit 91a6bf4

Please sign in to comment.