X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=ud-fingerserv;h=14444a7f13b2ba461981a1feff25dd84eb3b6305;hb=refs%2Fheads%2Ffordsa;hp=42b82393a750e2854d3ed4d70820bb0c0e2035bf;hpb=340801790a3e8d042149a48d4eff19dc863dff0a;p=mirror%2Fuserdir-ldap.git diff --git a/ud-fingerserv b/ud-fingerserv index 42b8239..14444a7 100755 --- a/ud-fingerserv +++ b/ud-fingerserv @@ -3,16 +3,18 @@ # (c) 1999 Randolph Chung. Licensed under the GPL. # (c) 2004 Martin Schulze. Licensed under the GPL. +# Copyright (c) 2008 Peter Palfrader use lib '/var/www/userdir-ldap/'; #use lib '/home/randolph/projects/userdir-ldap/web'; use strict vars; use IO::Handle; use IO::Socket; +use Socket qw(:addrinfo); use POSIX qw(:sys_wait_h); use Getopt::Std; use Util; -use Net::LDAP qw(:all); +use Net::LDAP; # Global settings... my %config = &Util::ReadConfigFile; @@ -43,9 +45,9 @@ $SIG{CHLD} = \&Reaper; &help if (defined($opts{h})); my $logfh; -unless ($opt{i} || $opt{f}) { - die "Need logfile unless running foreground\n" unless (defined($opt{l})); - open ($logfh, $opt{l}) or die "Can't open logfile: $!\n"; +unless ($opts{i} || $opts{f}) { + die "Need logfile unless running foreground\n" unless (defined($opts{l})); + open ($logfh, $opts{l}) or die "Can't open logfile: $!\n"; } else { $logfh = \*STDOUT; } @@ -61,9 +63,12 @@ if (!$use_inetd) { chdir '/' or die "Can't chdir to /: $!"; open STDIN, '/dev/null' or die "Can't read /dev/null: $!"; open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!"; - defined(my $pid = fork) or die "Can't fork: $!"; + my $pid; + defined($pid = fork) or die "Can't fork: $!"; exit if $pid; setsid or die "Can't start a new session: $!"; + defined($pid = fork) or die "Can't fork: $!"; + exit if $pid; open STDERR, '>&STDOUT' or die "Can't dup stdout: $!"; } @@ -73,7 +78,7 @@ if (!$use_inetd) { Listen => SOMAXCONN, Reuse => 1); - mydie "Cannot listen on finger port" unless $server; + mydie("Cannot listen on finger port") unless $server; &log("[Server listening for connections]"); my ($pid, $client, $hostinfo); @@ -81,7 +86,7 @@ if (!$use_inetd) { while ($client = $server->accept()) { &log("Forking to handle client request") if (defined($opts{v})); next if $pid = fork; # parent - mydie "fork: $!" unless defined $pid; + mydie("fork: $!") unless defined $pid; # child $client->autoflush(1); @@ -98,8 +103,8 @@ if (!$use_inetd) { &log("inetd mode"); my $sockaddr = getpeername(STDIN); if ($sockaddr) { - my ($port, $addr) = unpack_sockaddr_in(getpeername(STDIN)); - &log(sprintf("[Connect from %s (%s)]", gethostbyaddr($addr, AF_INET), inet_ntoa($addr))); + my ($err, $hostname, $servicename) = getnameinfo($sockaddr, NI_NUMERICHOST|NI_NUMERICSERV); + &log(sprintf("[Connect from %s:%s]", $hostname, $servicename)); } else { &log("[Connect via terminal]"); }