From dcb97950fcb7ee2a736d22f7e1f84d2a75c53986 Mon Sep 17 00:00:00 2001 From: Guillaume Bougard Date: Thu, 26 Sep 2019 16:33:39 +0200 Subject: [PATCH] fix: fix HTTP server IPv6 support as HTTP::Daemon module now supports IPv6 natively This fixes HTTP server not answering issue on MacOS --- Changes | 3 +++ lib/FusionInventory/Agent/HTTP/Server.pm | 15 +++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Changes b/Changes index dfefa8388c..cecc80d908 100644 --- a/Changes +++ b/Changes @@ -2,6 +2,9 @@ Revision history for FusionInventory agent 2.5.2 not released yet +core: +* fix HTTP server IPv6 support as HTTP::Daemon module now supports IPv6 natively + inventory: * unix: fix last log user after a reboot * added Samsung monitor serial support for models: B1940MR, B1940W, S22A450BW, diff --git a/lib/FusionInventory/Agent/HTTP/Server.pm b/lib/FusionInventory/Agent/HTTP/Server.pm index f125d9982a..ccab85e7e6 100644 --- a/lib/FusionInventory/Agent/HTTP/Server.pm +++ b/lib/FusionInventory/Agent/HTTP/Server.pm @@ -12,6 +12,7 @@ use Net::IP; use Text::Template; use File::Glob; use URI; +use Socket qw(IN6ADDR_ANY inet_ntop); use FusionInventory::Agent::Version; use FusionInventory::Agent::Logger; @@ -586,8 +587,11 @@ sub handleRequests { next; } - my (undef, $iaddr) = sockaddr_in($socket); - my $clientIp = inet_ntoa($iaddr); + my $family = sockaddr_family($socket); + my $iaddr = $family == AF_INET ? unpack_sockaddr_in($socket) : + $family == AF_INET6 ? unpack_sockaddr_in6($socket) : + INADDR_ANY; + my $clientIp = inet_ntop($family, $iaddr); my $request = $client->get_request(); $self->_handle_plugins($client, $request, $clientIp, $self->{listeners}->{$port}->{plugins}); } @@ -601,8 +605,11 @@ sub handleRequests { return; } - my (undef, $iaddr) = sockaddr_in($socket); - my $clientIp = inet_ntoa($iaddr); + my $family = sockaddr_family($socket); + my $iaddr = $family == AF_INET ? unpack_sockaddr_in($socket) : + $family == AF_INET6 ? unpack_sockaddr_in6($socket) : + INADDR_ANY; + my $clientIp = inet_ntop($family, $iaddr); my $request = $client->get_request(); $self->_handle($client, $request, $clientIp);