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;
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 }
@@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: $!";