# (c) 1999 Randolph Chung. Licensed under the GPL. <tausq@debian.org>
# (c) 2004 Martin Schulze. Licensed under the GPL. <joey@debian.org>
+# Copyright (c) 2008 Peter Palfrader <peter@palfrader.org>
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;
&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;
}
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);
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);
&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]");
}