aboutsummaryrefslogtreecommitdiffstats
path: root/sitesummary-collector.cgi
diff options
context:
space:
mode:
authorPetter Reinholdtsen <pere@hungry.com>2007-12-02 17:24:58 +0000
committerPetter Reinholdtsen <pere@hungry.com>2007-12-02 17:24:58 +0000
commitfd4f771b65e8f23b50fa45f357f0d9e181c82b84 (patch)
tree8bb3b6a644110fadee4d63f7f1333cd275fd5905 /sitesummary-collector.cgi
parentc469022db1c9ae932fa95cd45613f670281a8255 (diff)
downloadsitesummary-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.cgi11
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";