diff options
author | Petter Reinholdtsen <pere@hungry.com> | 2007-11-24 10:29:36 +0000 |
---|---|---|
committer | Petter Reinholdtsen <pere@hungry.com> | 2007-11-24 10:29:36 +0000 |
commit | 77331571cb543d4da009fd76806f2b55c85efba4 (patch) | |
tree | 23a4c56427677c37e928f9abc1eaae61bae9650f /sitesummary-collector.cgi | |
parent | 335020fc8ff86527da7df31c4f40dbbaf9d97b77 (diff) | |
download | sitesummary-77331571cb543d4da009fd76806f2b55c85efba4.tar.gz sitesummary-77331571cb543d4da009fd76806f2b55c85efba4.tar.bz2 sitesummary-77331571cb543d4da009fd76806f2b55c85efba4.tar.xz |
* Fix peername code in the collector.
Diffstat (limited to 'sitesummary-collector.cgi')
-rw-r--r-- | sitesummary-collector.cgi | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/sitesummary-collector.cgi b/sitesummary-collector.cgi index 70bca7c..1028190 100644 --- a/sitesummary-collector.cgi +++ b/sitesummary-collector.cgi @@ -10,6 +10,7 @@ use strict; use CGI; use POSIX qw(strftime); use Socket; +use Sys::Syslog; my $basedir = "/var/lib/sitesummary"; my $handlerdir = "/usr/lib/sitesummary/handler.d"; @@ -17,6 +18,9 @@ my $handlerdir = "/usr/lib/sitesummary/handler.d"; $ENV{PATH} = "/bin:/usr/bin"; print "Content-Type: text/plain\n\n"; + +my ($peeripaddr, $peername) = get_peerinfo(\*STDIN); + if (exists $ENV{REQUEST_METHOD} && $ENV{REQUEST_METHOD} ne "POST") { print "Sitesummary HTTP-POST submission URL\n"; @@ -62,7 +66,6 @@ Unsupported submission method. EOF } -my ($peeripaddr, $peername) = get_peerinfo(\*STDIN); my $timestamp = strftime("%Y-%m-%dT%H:%M:%S", gmtime()); if ($filename =~ m/.tar.gz$/) { @@ -76,7 +79,7 @@ if ($filename =~ m/.tar.gz$/) { # XXX Come up with some unique file name. my $savefile = "$basedir/tmpstorage/$peeripaddr-$timestamp-$$-$filename"; -open(SITESUMMARY, ">$savefile") or die "Unable to write to $savefile"; +open(SITESUMMARY, ">", $savefile) or die "Unable to write to $savefile"; print SITESUMMARY @entry; close SITESUMMARY; @@ -139,25 +142,26 @@ sub process_entry { sub get_peerinfo { my $sockethandle = shift; - - # XXX Return something while this function do not work. - return ("127.0.0.1", "localhost"); - - # XXX The call to sockaddr_in trigger "Bad arg length for - # Socket::unpack_sockaddr_in, length is 2, should be 16 at - # /usr/lib/perl/5.8/Socket.pm line 198." No idea why. - my ($peerport, $peeripaddr) = sockaddr_in(getpeername($sockethandle)); - if ($peerport) { - my $peername = gethostbyaddr($peeripaddr, AF_INET); - - if ("" eq $peername) { - syslog('warning', "client without DNS entry connected from \[$peeripaddr\]"); - $peername = "$peeripaddr"; - } + my ($peeripaddr, $peername) = ("", ""); + + my $sockaddr = getpeername($sockethandle); + if ($sockaddr) { + my $peerport; + ($peerport, $peeripaddr) = sockaddr_in($sockaddr); + $peername = gethostbyaddr($peeripaddr, AF_INET); + } elsif ($ENV{'REMOTE_ADDR'}) { # CGI variable + $peeripaddr = $ENV{'REMOTE_ADDR'}; + $peername = gethostbyaddr($peeripaddr, AF_INET); } else { # Running on the command line, use test host $peeripaddr = "127.0.0.1"; $peername = "localhost"; } + if ("" eq $peername) { + syslog('warning', "%s", "client without DNS entry connected from \[$peeripaddr\]"); + $peername = "$peeripaddr"; + } + $peeripaddr =~ m/(\d+).(\d+).(\d+).(\d+)/; # Untaint + $peeripaddr = "$1.$2.$3.$4"; return ($peeripaddr, $peername); } |