aboutsummaryrefslogtreecommitdiffstats
path: root/sitesummary-collector.cgi
diff options
context:
space:
mode:
authorPetter Reinholdtsen <pere@hungry.com>2007-11-24 10:29:36 +0000
committerPetter Reinholdtsen <pere@hungry.com>2007-11-24 10:29:36 +0000
commit77331571cb543d4da009fd76806f2b55c85efba4 (patch)
tree23a4c56427677c37e928f9abc1eaae61bae9650f /sitesummary-collector.cgi
parent335020fc8ff86527da7df31c4f40dbbaf9d97b77 (diff)
downloadsitesummary-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.cgi38
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);
}