diff --git a/SOURCES/perl-5.26.3-Net-Ping-Fix-_resolv-return-value.patch b/SOURCES/perl-5.26.3-Net-Ping-Fix-_resolv-return-value.patch new file mode 100644 index 0000000..af52662 --- /dev/null +++ b/SOURCES/perl-5.26.3-Net-Ping-Fix-_resolv-return-value.patch @@ -0,0 +1,62 @@ +From 47d2c70bde8c0bdc67e85578133338fc63c33f13 Mon Sep 17 00:00:00 2001 +From: Jitka Plesnikova +Date: Thu, 17 Jun 2021 11:41:48 +0200 +Subject: [PATCH 2/2] Fix _resolv return value + +in case of the new warnings. +Thanks to @nlv02636 + +Backported fromn Net-Ping 2.68 +--- + dist/Net-Ping/lib/Net/Ping.pm | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/dist/Net-Ping/lib/Net/Ping.pm b/dist/Net-Ping/lib/Net/Ping.pm +index 9e2497c..87087fc 100644 +--- a/dist/Net-Ping/lib/Net/Ping.pm ++++ b/dist/Net-Ping/lib/Net/Ping.pm +@@ -1794,6 +1794,7 @@ sub _resolv { + # Clean up port + if (defined($h{port}) && (($h{port} !~ /^\d{1,5}$/) || ($h{port} < 1) || ($h{port} > 65535))) { + croak("Invalid port `$h{port}' in `$name'"); ++ return undef; + } + # END - host:port + +@@ -1850,18 +1851,21 @@ sub _resolv { + } else { + (undef, $h{addr_in}, undef, undef) = Socket::unpack_sockaddr_in6 $getaddr[0]->{addr}; + } +- return \%h ++ return \%h; + } else { + carp("getnameinfo($getaddr[0]->{addr}) failed - $err"); ++ return undef; + } + } else { + warn(sprintf("getaddrinfo($h{host},,%s) failed - $err", + $family == AF_INET ? "AF_INET" : "AF_INET6")); ++ return undef; + } + # old way + } else { + if ($family == $AF_INET6) { + croak("Socket >= 1.94 required for IPv6 - found Socket $Socket::VERSION"); ++ return undef; + } + + my @gethost = gethostbyname($h{host}); +@@ -1872,8 +1876,10 @@ sub _resolv { + return \%h + } else { + carp("gethostbyname($h{host}) failed - $^E"); ++ return undef; + } + } ++ return undef; + } + + sub _pack_sockaddr_in($$) { +-- +2.31.1 + diff --git a/SOURCES/perl-5.26.3-Net-Ping-carp-not-croak-on-most-name-lookup-failures.patch b/SOURCES/perl-5.26.3-Net-Ping-carp-not-croak-on-most-name-lookup-failures.patch new file mode 100644 index 0000000..0a9f98b --- /dev/null +++ b/SOURCES/perl-5.26.3-Net-Ping-carp-not-croak-on-most-name-lookup-failures.patch @@ -0,0 +1,99 @@ +From 5a3f94a3f0e21d8e685ede4e851a318578a2151f Mon Sep 17 00:00:00 2001 +From: Jitka Plesnikova +Date: Thu, 17 Jun 2021 11:12:30 +0200 +Subject: [PATCH 1/2] carp, not croak on most name lookup failures + +See RT #124830, a regression. +Return undef instead. + +Backported from Net-Ping 2.67 +--- + dist/Net-Ping/lib/Net/Ping.pm | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/dist/Net-Ping/lib/Net/Ping.pm b/dist/Net-Ping/lib/Net/Ping.pm +index 13cbe81..9e2497c 100644 +--- a/dist/Net-Ping/lib/Net/Ping.pm ++++ b/dist/Net-Ping/lib/Net/Ping.pm +@@ -144,7 +144,7 @@ sub new + if ($self->{'host'}) { + my $host = $self->{'host'}; + my $ip = _resolv($host) +- or croak("could not resolve host $host"); ++ or carp("could not resolve host $host"); + $self->{host} = $ip; + $self->{family} = $ip->{family}; + } +@@ -152,7 +152,7 @@ sub new + if ($self->{bind}) { + my $addr = $self->{bind}; + my $ip = _resolv($addr) +- or croak("could not resolve local addr $addr"); ++ or carp("could not resolve local addr $addr"); + $self->{local_addr} = $ip; + } else { + $self->{local_addr} = undef; # Don't bind by default +@@ -323,7 +323,7 @@ sub bind + ($self->{proto} eq "udp" || $self->{proto} eq "icmp"); + + $ip = $self->_resolv($local_addr); +- croak("nonexistent local address $local_addr") unless defined($ip); ++ carp("nonexistent local address $local_addr") unless defined($ip); + $self->{local_addr} = $ip; + + if (($self->{proto} ne "udp") && +@@ -1129,13 +1129,14 @@ sub open + $self->{family_local} = $self->{family}; + } + +- $ip = $self->_resolv($host); + $timeout = $self->{timeout} unless $timeout; ++ $ip = $self->_resolv($host); + +- if($self->{proto} eq "stream") { +- if(defined($self->{fh}->fileno())) { ++ if ($self->{proto} eq "stream") { ++ if (defined($self->{fh}->fileno())) { + croak("socket is already open"); + } else { ++ return () unless $ip; + $self->tcp_connect($ip, $timeout); + } + } +@@ -1851,12 +1852,11 @@ sub _resolv { + } + return \%h + } else { +- croak("getnameinfo($getaddr[0]->{addr}) failed - $err"); ++ carp("getnameinfo($getaddr[0]->{addr}) failed - $err"); + } + } else { +- my $error = sprintf "getaddrinfo($h{host},,%s) failed - $err", +- ($family == AF_INET) ? "AF_INET" : "AF_INET6"; +- croak("$error"); ++ warn(sprintf("getaddrinfo($h{host},,%s) failed - $err", ++ $family == AF_INET ? "AF_INET" : "AF_INET6")); + } + # old way + } else { +@@ -1871,7 +1871,7 @@ sub _resolv { + $h{family} = AF_INET; + return \%h + } else { +- croak("gethostbyname($h{host}) failed - $^E"); ++ carp("gethostbyname($h{host}) failed - $^E"); + } + } + } +@@ -1913,7 +1913,7 @@ sub _inet_ntoa { + if (defined($address)) { + $ret = $address; + } else { +- croak("getnameinfo($addr) failed - $err"); ++ carp("getnameinfo($addr) failed - $err"); + } + } else { + $ret = inet_ntoa($addr) +-- +2.31.1 + diff --git a/SPECS/perl.spec b/SPECS/perl.spec index 86278d9..4c0f265 100644 --- a/SPECS/perl.spec +++ b/SPECS/perl.spec @@ -81,7 +81,7 @@ License: GPL+ or Artistic Epoch: %{perl_epoch} Version: %{perl_version} # release number must be even higher, because dual-lived modules will be broken otherwise -Release: 419%{?dist} +Release: 420%{?dist} Summary: Practical Extraction and Report Language Url: http://www.perl.org/ Source0: http://www.cpan.org/src/5.0/perl-%{perl_version}.tar.bz2 @@ -306,6 +306,12 @@ Patch93: perl-5.26.3-CVE-2020-10543.patch # for the regex engine Patch94: perl-5.26.3-CVE-2020-10878.patch +# Fix bug #1973030, fixed in Net-Ping 2.68 +# Fixed _resolv return value on failing DNS name lookup +Patch95: perl-5.26.3-Net-Ping-carp-not-croak-on-most-name-lookup-failures.patch +Patch96: perl-5.26.3-Net-Ping-Fix-_resolv-return-value.patch + + # Link XS modules to libperl.so with EU::CBuilder on Linux, bug #960048 Patch200: perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-CBuilder-on-Li.patch @@ -2918,6 +2924,8 @@ Perl extension for Version Objects %patch92 -p1 %patch93 -p1 %patch94 -p1 +%patch95 -p1 +%patch96 -p1 %patch200 -p1 %patch201 -p1 @@ -2925,9 +2933,9 @@ Perl extension for Version Objects # Local patch tracking perl -x patchlevel.h \ 'Fedora Patch1: Removes date check, Fedora/RHEL specific' \ -%ifarch %{multilib_64_archs} \ +%ifarch %{multilib_64_archs} 'Fedora Patch3: support for libdir64' \ -%endif \ +%endif 'Fedora Patch4: use libresolv instead of libbind' \ 'Fedora Patch5: USE_MM_LD_RUN_PATH' \ 'Fedora Patch6: Provide MM::maybe_command independently (bug #1129443)' \ @@ -2977,8 +2985,9 @@ perl -x patchlevel.h \ 'Fedora Patch90: Pass the correct CFLAGS to dtrace' \ 'RHEL Patch91: Fix Time-Local tests to pass after year 2019 (bug #1807120)' \ 'RHEL Patch92: Fix CVE-2020-12723 (GH#16947)' \ - 'RHEL Patch92: Fix CVE-2020-10543' \ - 'RHEL Patch92: Fix CVE-2020-10878' \ + 'RHEL Patch93: Fix CVE-2020-10543' \ + 'RHEL Patch94: Fix CVE-2020-10878' \ + 'RHEL Patch95: Fix Net-Ping _resolv return value on failing DNS name lookup (bug #1973030)' \ 'Fedora Patch200: Link XS modules to libperl.so with EU::CBuilder on Linux' \ 'Fedora Patch201: Link XS modules to libperl.so with EU::MM on Linux' \ %{nil} @@ -5266,6 +5275,9 @@ popd # Old changelog entries are preserved in CVS. %changelog +* Thu Jun 17 2021 Jitka Plesnikova - 4:5.26.3-420 +- Fix _resolv return value in Net-Ping (bug #1973030) + * Wed Jan 06 2021 Jitka Plesnikova - 4:5.26.3-419 - Fix CVE-2020-10543 (bug #1839273) - Fix CVE-2020-10878 (bug #1839276)