summaryrefslogtreecommitdiff
path: root/git-daemon/git-daemon.in
diff options
context:
space:
mode:
authorIan Jackson <ian@chiark.greenend.org.uk>2010-05-22 19:13:43 +0100
committerIan Jackson <ian@chiark.greenend.org.uk>2010-05-22 19:13:43 +0100
commit70b9d2e0dbecb8fe1e2045a1752465cd35885bb0 (patch)
treed975be3e56a711a6cac087abe6939af9a4226d2c /git-daemon/git-daemon.in
parentd36c5f7baf4f11c7d6765afac2f5fb9449b0e0a7 (diff)
downloaduserv-utils-70b9d2e0dbecb8fe1e2045a1752465cd35885bb0.tar.gz
Changes to make it appear to work on chiark
Diffstat (limited to 'git-daemon/git-daemon.in')
-rwxr-xr-xgit-daemon/git-daemon.in33
1 files changed, 24 insertions, 9 deletions
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: $!";