X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=userv-utils.git;a=blobdiff_plain;f=git-daemon%2Fgit-daemon.in;h=1b1b5402afa6656c2baa226d3638f9193f278ecb;hp=8fe8ca116ab17762260c521a7adf9a611854bf0b;hb=44a77f4851d3c819f9b364018a9695f332758a71;hpb=d36c5f7baf4f11c7d6765afac2f5fb9449b0e0a7 diff --git a/git-daemon/git-daemon.in b/git-daemon/git-daemon.in index 8fe8ca1..1b1b540 100755 --- a/git-daemon/git-daemon.in +++ b/git-daemon/git-daemon.in @@ -13,6 +13,13 @@ use POSIX; use Socket; use Sys::Syslog; +BEGIN { + if ($ARGV[0] =~ s/^-L//) { + my $logfile= shift @ARGV; + open STDERR, ">> $logfile" or die $!; + } +} + sub ntoa { my $sockaddr = shift; return ('(local)') unless defined $sockaddr; @@ -24,6 +31,9 @@ our ($client,$client_addr,$client_port) = ntoa getpeername STDIN; our ($server,$server_addr,$server_port) = ntoa getsockname STDIN; our ($service,$specpath,$spechost); +printf STDERR "%s [$$] %s %s\n", + strftime("%Y-%m-%d %H:%M:%S %Z", localtime), $server, $client; + openlog 'userv-git-daemon', 'pid', 'daemon'; sub fail { syslog 'err', "$client @_"; exit } @@ -52,20 +62,25 @@ unless (($service,$specpath,$spechost) = $line =~ @@READ_URLMAP@@ -fail "No mapping for $uri" unless defined $serve_user; -syslog 'notice', "$client $service $serve_user $uri"; +fail "No global mapping for $uri" unless defined $serve_user; -my ($hn,$ha,$at,$naddrs,@addrs) = gethostbyname $host; -die "hostname/address mismatch ($spechost $server_addr)" unless grep { +my ($hn,$ha,$at,$naddrs,@addrs) = gethostbyname $spechost; +fail "hostname/address mismatch ($spechost $server_addr)" unless grep { $server_addr eq inet_ntoa $_ } @addrs; -my @opts = map "-D$_=${$::{$_}}", - qw(service path host - client client_addr client_port - server server_addr server_port); +our @opts; + +push @opts, "-D$_=${$::{$_}}" + for qw(service specpath spechost + client client_addr client_port + server server_addr server_port); + +fail "no user $serve_user" unless getpwnam($serve_user); + +syslog 'notice', "$client $service $uri $serve_user"; -my @cmd = ('userv', '-t300', @opts, $user, $service); +my @cmd = ('userv', '-t300', @opts, $serve_user, $service); no warnings; # suppress errors to stderr exec @cmd or fail "exec userv: $!";