diff options
author | Petter Reinholdtsen <pere@hungry.com> | 2007-12-02 17:24:58 +0000 |
---|---|---|
committer | Petter Reinholdtsen <pere@hungry.com> | 2007-12-02 17:24:58 +0000 |
commit | fd4f771b65e8f23b50fa45f357f0d9e181c82b84 (patch) | |
tree | 8bb3b6a644110fadee4d63f7f1333cd275fd5905 /sitesummary-collector.cgi | |
parent | c469022db1c9ae932fa95cd45613f670281a8255 (diff) | |
download | sitesummary-fd4f771b65e8f23b50fa45f357f0d9e181c82b84.tar.gz sitesummary-fd4f771b65e8f23b50fa45f357f0d9e181c82b84.tar.bz2 sitesummary-fd4f771b65e8f23b50fa45f357f0d9e181c82b84.tar.xz |
* Prefer REMOTE_ADDR over the output from gethostbyaddr() in
get_peername, to avoid "Bad arg length" problem.
Diffstat (limited to 'sitesummary-collector.cgi')
-rw-r--r-- | sitesummary-collector.cgi | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/sitesummary-collector.cgi b/sitesummary-collector.cgi index 68ab091..199f4cc 100644 --- a/sitesummary-collector.cgi +++ b/sitesummary-collector.cgi @@ -144,16 +144,15 @@ sub get_peerinfo { my $sockethandle = shift; 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 + if ($ENV{'REMOTE_ADDR'}) { # CGI variable $peeripaddr = $ENV{'REMOTE_ADDR'}; $peeripaddr =~ m/(\d+).(\d+).(\d+).(\d+)/; # Untaint $peeripaddr = "$1.$2.$3.$4"; $peername = gethostbyaddr($peeripaddr, AF_INET); + } elsif (my $sockaddr = getpeername($sockethandle)) { + my $peerport; + ($peerport, $peeripaddr) = sockaddr_in($sockaddr); + $peername = gethostbyaddr($peeripaddr, AF_INET); } else { # Running on the command line, use test host $peeripaddr = "127.0.0.1"; |