From: Alexander Hartmaier Date: Mon, 18 Jan 2016 12:57:10 +0000 (+0100) Subject: fix $c->req->hostname empty for IPv6 clients (RT#75731) X-Git-Tag: v5.90123~5^2~2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=3b1178b01f1d71618f6a52357ec91ab40e2fc5e3 fix $c->req->hostname empty for IPv6 clients (RT#75731) use Socket directly instead of IO::Socket Socket version 1.96 was chosen because of the NIx_NOSERV flag --- diff --git a/Changes b/Changes index 0953b79..039abe0 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,7 @@ # This file documents the revision history for Perl extension Catalyst. + - Fix $c->req->hostname empty for IPv6 clients (RT#75731) + 5.90122 - 2018-11-03 - releasing as stable diff --git a/Makefile.PL b/Makefile.PL index 8289765..8b366c6 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -50,6 +50,7 @@ my %META = ( 'Tree::Simple::Visitor::FindByUID' => 0, 'Try::Tiny' => '0.17', 'Safe::Isa' => 0, + 'Socket' => '1.96', 'Task::Weaken' => 0, 'Text::Balanced' => 0, # core in 5.8.x but mentioned for completeness 'MRO::Compat' => 0, diff --git a/lib/Catalyst/Request.pm b/lib/Catalyst/Request.pm index 52314f3..e937fb1 100644 --- a/lib/Catalyst/Request.pm +++ b/lib/Catalyst/Request.pm @@ -1,6 +1,6 @@ package Catalyst::Request; -use IO::Socket qw[AF_INET inet_aton]; +use Socket qw( getaddrinfo getnameinfo AI_NUMERICHOST NI_NAMEREQD NIx_NOSERV ); use Carp; use utf8; use URI::http; @@ -439,7 +439,21 @@ has hostname => ( lazy => 1, default => sub { my ($self) = @_; - gethostbyaddr( inet_aton( $self->address ), AF_INET ) || $self->address + my ( $err, $sockaddr ) = getaddrinfo( + $self->address, + # no service + '', + { flags => AI_NUMERICHOST } + ); + return $self->address + if $err; + ( $err, my $hostname ) = getnameinfo( + $sockaddr->{addr}, + NI_NAMEREQD, + # we are only interested in the hostname, not the servicename + NIx_NOSERV + ); + return $err ? $self->address : $hostname; }, );