ud-fingerserv: fix logging when using ipv6 and inetd
[mirror/userdir-ldap.git] / ud-fingerserv
index ecabadd..14444a7 100755 (executable)
@@ -3,16 +3,18 @@
 
 # (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;
@@ -101,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]");
   }