Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package perl-Net-DNS for openSUSE:Factory checked in at 2023-12-02 17:12:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-Net-DNS (Old) and /work/SRC/openSUSE:Factory/.perl-Net-DNS.new.25432 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Net-DNS" Sat Dec 2 17:12:48 2023 rev:74 rq:1130245 version:1.410.0 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-Net-DNS/perl-Net-DNS.changes 2023-09-29 21:14:01.122711678 +0200 +++ /work/SRC/openSUSE:Factory/.perl-Net-DNS.new.25432/perl-Net-DNS.changes 2023-12-02 17:13:00.088970808 +0100 @@ -1,0 +2,6 @@ +Tue Nov 28 03:08:49 UTC 2023 - Tina Müller <timueller+p...@suse.de> + +- updated to 1.41 + see /usr/share/doc/packages/perl-Net-DNS/Changes + +------------------------------------------------------------------- Old: ---- Net-DNS-1.40.tar.gz New: ---- Net-DNS-1.41.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Net-DNS.spec ++++++ --- /var/tmp/diff_new_pack.8QCXfz/_old 2023-12-02 17:13:00.604989718 +0100 +++ /var/tmp/diff_new_pack.8QCXfz/_new 2023-12-02 17:13:00.604989718 +0100 @@ -18,9 +18,9 @@ %define cpan_name Net-DNS Name: perl-Net-DNS -Version: 1.400.0 +Version: 1.410.0 Release: 0 -%define cpan_version 1.40 +%define cpan_version 1.41 License: MIT Summary: Perl Interface to the Domain Name System URL: https://metacpan.org/release/%{cpan_name} @@ -58,7 +58,7 @@ Requires: perl(PerlIO) >= 1.05 Requires: perl(Scalar::Util) >= 1.19 Requires: perl(Time::Local) >= 1.19 -Provides: perl(Net::DNS) = 1.400.0 +Provides: perl(Net::DNS) = %{version} Provides: perl(Net::DNS::Domain) Provides: perl(Net::DNS::DomainName) Provides: perl(Net::DNS::DomainName1035) ++++++ Net-DNS-1.40.tar.gz -> Net-DNS-1.41.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/Changes new/Net-DNS-1.41/Changes --- old/Net-DNS-1.40/Changes 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/Changes 2023-11-27 14:22:19.000000000 +0100 @@ -1,4 +1,14 @@ -$Id: Changes 1936 2023-08-30 18:05:44Z willem $ -*-text-*- +$Id: Changes 1952 2023-11-27 13:22:08Z willem $ -*-text-*- + + +**** 1.41 Nov 28, 2023 + + Accept inbound Ethernet "Jumbo" UDP packet. + Facilitate decoding of mDNS/SD packets with compressed RDATA. + Update Parameters.pm to resync with IANA registry. + +Fix rt.cpan.org #150550 + Error trying to use Socket macro SO_REUSEPORT in Windows **** 1.40 Aug 30, 2023 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/META.json new/Net-DNS-1.41/META.json --- old/Net-DNS-1.40/META.json 2023-08-30 20:06:01.000000000 +0200 +++ new/Net-DNS-1.41/META.json 2023-11-27 14:22:30.000000000 +0100 @@ -6,7 +6,7 @@ "Michael Fuhr" ], "dynamic_config" : 1, - "generated_by" : "ExtUtils::MakeMaker version 7.64, CPAN::Meta::Converter version 2.150010", + "generated_by" : "ExtUtils::MakeMaker version 7.70, CPAN::Meta::Converter version 2.150010", "license" : [ "mit" ], @@ -71,6 +71,6 @@ } }, "release_status" : "stable", - "version" : "1.40", - "x_serialization_backend" : "JSON::PP version 4.08" + "version" : "1.41", + "x_serialization_backend" : "JSON::PP version 4.16" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/META.yml new/Net-DNS-1.41/META.yml --- old/Net-DNS-1.40/META.yml 2023-08-30 20:06:01.000000000 +0200 +++ new/Net-DNS-1.41/META.yml 2023-11-27 14:22:30.000000000 +0100 @@ -17,7 +17,7 @@ IO::File: '1.14' IO::Socket::IP: '0.38' dynamic_config: 1 -generated_by: 'ExtUtils::MakeMaker version 7.64, CPAN::Meta::Converter version 2.150010' +generated_by: 'ExtUtils::MakeMaker version 7.70, CPAN::Meta::Converter version 2.150010' license: mit meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html @@ -47,5 +47,5 @@ Scalar::Util: '1.19' Time::Local: '1.19' perl: '5.008009' -version: '1.40' +version: '1.41' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/contrib/check_soa new/Net-DNS-1.41/contrib/check_soa --- old/Net-DNS-1.40/contrib/check_soa 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/contrib/check_soa 2023-11-27 14:22:19.000000000 +0100 @@ -3,7 +3,7 @@ use strict; use warnings; -my $VERSION = (qw$LastChangedRevision: 1811 $)[1]; +my $VERSION = (qw$LastChangedRevision: 1944 $)[1]; =head1 NAME @@ -114,7 +114,7 @@ =head1 COPYRIGHT -(c) 2003-2011 Dick Franks E<lt>rwfranks[...]acm.orgE<gt> +(c)2003-2011,2014 Dick Franks E<lt>rwfranks[...]acm.orgE<gt> All rights reserved. @@ -150,12 +150,6 @@ =cut -use constant UTF8 => scalar eval { ## not UTF-EBCDIC [see UTR#16 3.6] - require Encode; - Encode::encode_utf8( chr(182) ) eq pack( 'H*', 'C2B6' ); -}; - - my $self = $0; # script my $options = 'dnstv'; # options @@ -171,9 +165,7 @@ END -my ( $target, @nameserver ) = @ARGV; - -my $domain = UTF8 && $target =~ /[^\000-\177]/ ? Encode::decode_utf8($target) : $target; +my ( $domain, @nameserver ) = @ARGV; require Net::DNS; @@ -201,16 +193,10 @@ $resolver->nameservers(@nameserver) or die $resolver->string; -my $question = Net::DNS::Question->new($domain); # invert IP address/prefix -my $name = lc $question->qname; -my $NetDNSrev = &Net::DNS::version; -die "\tFeature not supported by Net::DNS $NetDNSrev\n" if $name =~ m#[:/\s]|\.\d+$#; +my $zone = find_zonecut($domain); # (also inverts IP address/prefix) -my $packet = $resolver->send( "_nx_.$name", 'CNAME' ) or die $resolver->errorstring; -my ($zone) = map { lc( $_->name ) } $packet->authority; - -my @ns = ( $zone or $name eq '.' ) ? NS($zone) : (); # find NS serving name -die "\nno such zone: $name\n\n", $resolver->string unless @ns; # game over +my @ns = ( $zone ne '.' ) ? NS($zone) : (); # find NS serving zone +die "\ninvalid: $domain\n\n", $resolver->string unless @ns; # game over my @nsname = grep { $_ ne $zone } map { $_->nsdname } @ns; # extract server names from NS records @@ -273,7 +259,7 @@ $resolver->usevc(1); # no longer ok to query ANY over UDP $resolver->nameservers(@server); -displayRR( $name, 'ANY' ); +displayRR( $domain, 'ANY' ); print "----\n"; @@ -521,20 +507,28 @@ } +sub find_zonecut { + my $name = shift; + require Net::DNS::Resolver::Recurse; + my $resolver = Net::DNS::Resolver::Recurse->new(); + my $response = $resolver->send( $name, 'NULL' ) || die $resolver->errorstring; + my ($cut) = map { $_->name } $response->authority; + return $cut || die "failed to find zone cut for $name"; +} + + sub ordered { ## irreflexive 32-bit partial ordering - use integer; - my ( $l, $r ) = @_; + my ( $n1, $n2 ) = @_; - return defined $r unless defined $l; # ( undef, any ) - return 0 unless defined $r; # ( any, undef ) + return 0 unless defined $n2; # ( any, undef ) + return 1 unless defined $n1; # ( undef, any ) - # unwise to assume 32-bit arithmetic, or that integer overflow goes unpunished - if ( $l < 0 ) { # translate $a<0 region - $l = ( $l ^ 0x80000000 ) & 0xFFFFFFFF; # 0 <= $l < 2**31 - $r = ( $r ^ 0x80000000 ) & 0xFFFFFFFF; # -2**31 <= $r < 2**32 - } + # unwise to assume 64-bit arithmetic, or that 32-bit integer overflow goes unpunished + use integer; # fold, leaving $n2 non-negative + $n1 = ( $n1 & 0xFFFFFFFF ) ^ ( $n2 & 0x80000000 ); # -2**31 <= $n1 < 2**32 + $n2 = ( $n2 & 0x7FFFFFFF ); # 0 <= $n2 < 2**31 - return $l < $r ? ( $l > ( $r - 0x80000000 ) ) : ( $b < ( $l - 0x80000000 ) ); + return $n1 < $n2 ? ( $n1 > ( $n2 - 0x80000000 ) ) : ( $n2 < ( $n1 - 0x80000000 ) ); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/contrib/find_zonecut new/Net-DNS-1.41/contrib/find_zonecut --- old/Net-DNS-1.40/contrib/find_zonecut 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/contrib/find_zonecut 2023-11-27 14:22:19.000000000 +0100 @@ -3,7 +3,7 @@ use strict; use warnings; -my $VERSION = (qw$LastChangedRevision: 1811 $)[1] || 0.01; +my $VERSION = (qw$LastChangedRevision: 1944 $)[1]; =head1 NAME @@ -24,15 +24,15 @@ use Net::DNS; -my $resolver = Net::DNS::Resolver->new(); - print find_zonecut(shift), "\n"; -sub find_zonecut { ## Copyright (c)2014 Dick Franks - my $name = shift; - my $reply = $resolver->send( "*.$name", 'NULL' ) || die $resolver->errorstring; - my ($cut) = map { $_->name } $reply->authority; +sub find_zonecut { + my $name = shift; + require Net::DNS::Resolver::Recurse; + my $resolver = Net::DNS::Resolver::Recurse->new(); + my $response = $resolver->send( $name, 'NULL' ) || die $resolver->errorstring; + my ($cut) = map { $_->name } $response->authority; return $cut || die "failed to find zone cut for $name"; } @@ -41,7 +41,7 @@ =head1 COPYRIGHT -(c)2014 Dick Franks E<lt>rwfranks[...]acm.orgE<gt> +(c)2014 Dick Franks E<lt>rwfranks[...]acm.orgE<gt> All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS/Nameserver.pm new/Net-DNS-1.41/lib/Net/DNS/Nameserver.pm --- old/Net-DNS-1.40/lib/Net/DNS/Nameserver.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS/Nameserver.pm 2023-11-27 14:22:19.000000000 +0100 @@ -3,7 +3,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: Nameserver.pm 1925 2023-05-31 11:58:59Z willem $)[2]; +our $VERSION = (qw$Id: Nameserver.pm 1949 2023-11-27 11:51:17Z willem $)[2]; =head1 NAME @@ -44,8 +44,10 @@ use Net::DNS; use Net::DNS::ZoneFile; -use IO::Socket::IP 0.38; use IO::Select; +use IO::Socket::IP 0.38; +use IO::Socket; +use Socket; use constant USE_POSIX => defined eval 'use POSIX ":sys_wait_h"; 1'; ## no critic @@ -54,6 +56,17 @@ use constant PACKETSZ => 512; +use constant SOCKOPT => eval { + my @sockopt; + push @sockopt, eval '[SOL_SOCKET, SO_REUSEADDR]'; ## no critic + push @sockopt, eval '[SOL_SOCKET, SO_REUSEPORT]'; ## no critic + + my $pretest = sub { # check that options safe to use + return eval { IO::Socket::IP->new( Proto => "udp", Sockopts => [shift], Type => SOCK_DGRAM ) } + }; + return grep { &$pretest($_) } @sockopt; # without any guarantee that they work! +}; + #------------------------------------------------------------------------------ # Constructor. @@ -409,8 +422,8 @@ return $pid; ## parent } - # else ... ## child - $coderef->(); + # else ... + $coderef->(); ## child exit; } @@ -459,8 +472,7 @@ my $socket = IO::Socket::IP->new( LocalAddr => $ip, LocalPort => $port, - ReuseAddr => 1, - ReusePort => 1, + Sockopt => [SOCKOPT], Proto => "tcp", Listen => SOMAXCONN, Type => SOCK_STREAM @@ -500,8 +512,7 @@ my $socket = IO::Socket::IP->new( LocalAddr => $ip, LocalPort => $port, - ReuseAddr => 1, - ReusePort => 1, + Sockopt => [SOCKOPT], Proto => "udp", Type => SOCK_DGRAM ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS/Packet.pm new/Net-DNS-1.41/lib/Net/DNS/Packet.pm --- old/Net-DNS-1.40/lib/Net/DNS/Packet.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS/Packet.pm 2023-11-27 14:22:19.000000000 +0100 @@ -3,7 +3,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: Packet.pm 1925 2023-05-31 11:58:59Z willem $)[2]; +our $VERSION = (qw$Id: Packet.pm 1947 2023-11-23 09:40:45Z willem $)[2]; =head1 NAME @@ -398,9 +398,10 @@ my $header = $self->header; my $opcode = $header->opcode; + my $packet = $header->qr ? 'Response' : 'Query'; my $server = $self->{replyfrom}; my $length = $self->{replysize}; - my $origin = $server ? ";; Response received from $server ($length octets)\n" : ""; + my $origin = $server ? ";; $packet received from [$server] $length octets\n" : ""; my @record = ( "$origin;; HEADER SECTION", $header->string ); if ( $opcode eq 'DSO' ) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS/Parameters.pm new/Net-DNS-1.41/lib/Net/DNS/Parameters.pm --- old/Net-DNS-1.40/lib/Net/DNS/Parameters.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS/Parameters.pm 2023-11-27 14:22:19.000000000 +0100 @@ -3,13 +3,13 @@ ################################################ ## ## Domain Name System (DNS) Parameters -## (last updated 2023-04-28) +## (last updated 2023-11-08) ## ################################################ use strict; use warnings; -our $VERSION = (qw$Id: Parameters.pm 1921 2023-05-08 18:39:59Z willem $)[2]; +our $VERSION = (qw$Id: Parameters.pm 1945 2023-11-22 08:02:31Z willem $)[2]; use integer; use Carp; @@ -112,8 +112,8 @@ OPENPGPKEY => 61, # RFC7929 CSYNC => 62, # RFC7477 ZONEMD => 63, # RFC8976 - SVCB => 64, # RFC-ietf-dnsop-svcb-https-12 - HTTPS => 65, # RFC-ietf-dnsop-svcb-https-12 + SVCB => 64, # RFC9460 + HTTPS => 65, # RFC9460 SPF => 99, # RFC7208 UINFO => 100, # IANA-Reserved UID => 101, # IANA-Reserved @@ -137,6 +137,7 @@ AVC => 258, # DOA => 259, # draft-durand-doa-over-dns AMTRELAY => 260, # RFC8777 + RESINFO => 261, # draft-ietf-add-resolver-info-06 TA => 32768, # http://cameo.library.cmu.edu/ http://www.watson.org/~weiler/INI1999-19.pdf DLV => 32769, # RFC8749 RFC4431 ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS/RR/AFSDB.pm new/Net-DNS-1.41/lib/Net/DNS/RR/AFSDB.pm --- old/Net-DNS-1.40/lib/Net/DNS/RR/AFSDB.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS/RR/AFSDB.pm 2023-11-27 14:22:19.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: AFSDB.pm 1898 2023-02-15 14:27:22Z willem $)[2]; +our $VERSION = (qw$Id: AFSDB.pm 1945 2023-11-22 08:02:31Z willem $)[2]; use base qw(Net::DNS::RR); @@ -19,10 +19,10 @@ sub _decode_rdata { ## decode rdata from wire-format octet string - my ( $self, $data, $offset ) = @_; + my ( $self, $data, $offset, @opaque ) = @_; $self->{subtype} = unpack "\@$offset n", $$data; - $self->{hostname} = Net::DNS::DomainName2535->decode( $data, $offset + 2 ); + $self->{hostname} = Net::DNS::DomainName2535->decode( $data, $offset + 2, @opaque ); return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS/RR/HTTPS.pm new/Net-DNS-1.41/lib/Net/DNS/RR/HTTPS.pm --- old/Net-DNS-1.40/lib/Net/DNS/RR/HTTPS.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS/RR/HTTPS.pm 2023-11-27 14:22:19.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: HTTPS.pm 1896 2023-01-30 12:59:25Z willem $)[2]; +our $VERSION = (qw$Id: HTTPS.pm 1945 2023-11-22 08:02:31Z willem $)[2]; use base qw(Net::DNS::RR::SVCB); @@ -76,4 +76,6 @@ L<perl> L<Net::DNS> L<Net::DNS::RR> L<Net::DNS::RR::SVCB> +L<RFC9460|https://tools.ietf.org/html/rfc9460> + =cut diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS/RR/KX.pm new/Net-DNS-1.41/lib/Net/DNS/RR/KX.pm --- old/Net-DNS-1.40/lib/Net/DNS/RR/KX.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS/RR/KX.pm 2023-11-27 14:22:19.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: KX.pm 1898 2023-02-15 14:27:22Z willem $)[2]; +our $VERSION = (qw$Id: KX.pm 1945 2023-11-22 08:02:31Z willem $)[2]; use base qw(Net::DNS::RR); @@ -19,10 +19,10 @@ sub _decode_rdata { ## decode rdata from wire-format octet string - my ( $self, $data, $offset ) = @_; + my ( $self, $data, $offset, @opaque ) = @_; $self->{preference} = unpack( "\@$offset n", $$data ); - $self->{exchange} = Net::DNS::DomainName2535->decode( $data, $offset + 2 ); + $self->{exchange} = Net::DNS::DomainName2535->decode( $data, $offset + 2, @opaque ); return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS/RR/MX.pm new/Net-DNS-1.41/lib/Net/DNS/RR/MX.pm --- old/Net-DNS-1.40/lib/Net/DNS/RR/MX.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS/RR/MX.pm 2023-11-27 14:22:19.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: MX.pm 1896 2023-01-30 12:59:25Z willem $)[2]; +our $VERSION = (qw$Id: MX.pm 1945 2023-11-22 08:02:31Z willem $)[2]; use base qw(Net::DNS::RR); @@ -19,8 +19,7 @@ sub _decode_rdata { ## decode rdata from wire-format octet string - my ( $self, @argument ) = @_; - my ( $data, $offset, @opaque ) = @argument; + my ( $self, $data, $offset, @opaque ) = @_; $self->{preference} = unpack( "\@$offset n", $$data ); $self->{exchange} = Net::DNS::DomainName1035->decode( $data, $offset + 2, @opaque ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS/RR/NSEC.pm new/Net-DNS-1.41/lib/Net/DNS/RR/NSEC.pm --- old/Net-DNS-1.40/lib/Net/DNS/RR/NSEC.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS/RR/NSEC.pm 2023-11-27 14:22:19.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: NSEC.pm 1896 2023-01-30 12:59:25Z willem $)[2]; +our $VERSION = (qw$Id: NSEC.pm 1945 2023-11-22 08:02:31Z willem $)[2]; use base qw(Net::DNS::RR); @@ -20,10 +20,10 @@ sub _decode_rdata { ## decode rdata from wire-format octet string - my ( $self, $data, $offset ) = @_; + my ( $self, $data, $offset, @opaque ) = @_; my $limit = $offset + $self->{rdlength}; - ( $self->{nxtdname}, $offset ) = Net::DNS::DomainName->decode( $data, $offset ); + ( $self->{nxtdname}, $offset ) = Net::DNS::DomainName->decode( $data, $offset, @opaque ); $self->{typebm} = substr $$data, $offset, $limit - $offset; return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS/RR/PX.pm new/Net-DNS-1.41/lib/Net/DNS/RR/PX.pm --- old/Net-DNS-1.40/lib/Net/DNS/RR/PX.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS/RR/PX.pm 2023-11-27 14:22:19.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: PX.pm 1898 2023-02-15 14:27:22Z willem $)[2]; +our $VERSION = (qw$Id: PX.pm 1945 2023-11-22 08:02:31Z willem $)[2]; use base qw(Net::DNS::RR); @@ -19,11 +19,11 @@ sub _decode_rdata { ## decode rdata from wire-format octet string - my ( $self, $data, $offset ) = @_; + my ( $self, $data, $offset, @opaque ) = @_; $self->{preference} = unpack( "\@$offset n", $$data ); - ( $self->{map822}, $offset ) = Net::DNS::DomainName2535->decode( $data, $offset + 2 ); - ( $self->{mapx400}, $offset ) = Net::DNS::DomainName2535->decode( $data, $offset ); + ( $self->{map822}, $offset ) = Net::DNS::DomainName2535->decode( $data, $offset + 2, @opaque ); + ( $self->{mapx400}, $offset ) = Net::DNS::DomainName2535->decode( $data, $offset, @opaque ); return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS/RR/RP.pm new/Net-DNS-1.41/lib/Net/DNS/RR/RP.pm --- old/Net-DNS-1.40/lib/Net/DNS/RR/RP.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS/RR/RP.pm 2023-11-27 14:22:19.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: RP.pm 1898 2023-02-15 14:27:22Z willem $)[2]; +our $VERSION = (qw$Id: RP.pm 1945 2023-11-22 08:02:31Z willem $)[2]; use base qw(Net::DNS::RR); @@ -20,10 +20,10 @@ sub _decode_rdata { ## decode rdata from wire-format octet string - my ( $self, $data, $offset ) = @_; + my ( $self, $data, $offset, @opaque ) = @_; - ( $self->{mbox}, $offset ) = Net::DNS::Mailbox2535->decode( $data, $offset ); - $self->{txtdname} = Net::DNS::DomainName2535->decode( $data, $offset ); + ( $self->{mbox}, $offset ) = Net::DNS::Mailbox2535->decode( $data, $offset, @opaque ); + $self->{txtdname} = Net::DNS::DomainName2535->decode( $data, $offset, @opaque ); return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS/RR/RT.pm new/Net-DNS-1.41/lib/Net/DNS/RR/RT.pm --- old/Net-DNS-1.40/lib/Net/DNS/RR/RT.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS/RR/RT.pm 2023-11-27 14:22:19.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: RT.pm 1898 2023-02-15 14:27:22Z willem $)[2]; +our $VERSION = (qw$Id: RT.pm 1945 2023-11-22 08:02:31Z willem $)[2]; use base qw(Net::DNS::RR); @@ -19,10 +19,10 @@ sub _decode_rdata { ## decode rdata from wire-format octet string - my ( $self, $data, $offset ) = @_; + my ( $self, $data, $offset, @opaque ) = @_; $self->{preference} = unpack( "\@$offset n", $$data ); - $self->{intermediate} = Net::DNS::DomainName2535->decode( $data, $offset + 2 ); + $self->{intermediate} = Net::DNS::DomainName2535->decode( $data, $offset + 2, @opaque ); return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS/RR/SOA.pm new/Net-DNS-1.41/lib/Net/DNS/RR/SOA.pm --- old/Net-DNS-1.40/lib/Net/DNS/RR/SOA.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS/RR/SOA.pm 2023-11-27 14:22:19.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: SOA.pm 1931 2023-08-23 13:14:15Z willem $)[2]; +our $VERSION = (qw$Id: SOA.pm 1945 2023-11-22 08:02:31Z willem $)[2]; use base qw(Net::DNS::RR); @@ -20,10 +20,9 @@ sub _decode_rdata { ## decode rdata from wire-format octet string - my ( $self, @argument ) = @_; - my ( $data, $offset, @opaque ) = @argument; + my ( $self, $data, $offset, @opaque ) = @_; - ( $self->{mname}, $offset ) = Net::DNS::DomainName1035->decode(@argument); + ( $self->{mname}, $offset ) = Net::DNS::DomainName1035->decode( $data, $offset, @opaque ); ( $self->{rname}, $offset ) = Net::DNS::Mailbox1035->decode( $data, $offset, @opaque ); @{$self}{qw(serial refresh retry expire minimum)} = unpack "\@$offset N5", $$data; return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS/RR/SRV.pm new/Net-DNS-1.41/lib/Net/DNS/RR/SRV.pm --- old/Net-DNS-1.40/lib/Net/DNS/RR/SRV.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS/RR/SRV.pm 2023-11-27 14:22:19.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: SRV.pm 1898 2023-02-15 14:27:22Z willem $)[2]; +our $VERSION = (qw$Id: SRV.pm 1945 2023-11-22 08:02:31Z willem $)[2]; use base qw(Net::DNS::RR); @@ -19,11 +19,11 @@ sub _decode_rdata { ## decode rdata from wire-format octet string - my ( $self, $data, $offset ) = @_; + my ( $self, $data, $offset, @opaque ) = @_; @{$self}{qw(priority weight port)} = unpack( "\@$offset n3", $$data ); - $self->{target} = Net::DNS::DomainName2535->decode( $data, $offset + 6 ); + $self->{target} = Net::DNS::DomainName2535->decode( $data, $offset + 6, @opaque ); return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS/RR/SVCB.pm new/Net-DNS-1.41/lib/Net/DNS/RR/SVCB.pm --- old/Net-DNS-1.40/lib/Net/DNS/RR/SVCB.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS/RR/SVCB.pm 2023-11-27 14:22:19.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: SVCB.pm 1930 2023-08-21 14:10:10Z willem $)[2]; +our $VERSION = (qw$Id: SVCB.pm 1945 2023-11-22 08:02:31Z willem $)[2]; use base qw(Net::DNS::RR); @@ -35,22 +35,19 @@ sub _decode_rdata { ## decode rdata from wire-format octet string - my ( $self, $data, $offset ) = @_; + my ( $self, $data, $offset, @opaque ) = @_; - my $rdata = substr $$data, $offset, $self->{rdlength}; - $self->{SvcPriority} = unpack( 'n', $rdata ); - - my $index; - ( $self->{TargetName}, $index ) = Net::DNS::DomainName->decode( \$rdata, 2 ); + my $limit = $offset + $self->{rdlength}; + $self->{SvcPriority} = unpack( "\@$offset n", $$data ); + ( $self->{TargetName}, $offset ) = Net::DNS::DomainName->decode( $data, $offset + 2, @opaque ); my $params = $self->{SvcParams} = []; - my $limit = length($rdata) - 3; - while ( $index < $limit ) { - my ( $key, $size ) = unpack( "\@$index n2", $rdata ); - push @$params, ( $key, substr $rdata, $index + 4, $size ); - $index += ( $size + 4 ); + while ( $offset < $limit ) { + my ( $key, $size ) = unpack( "\@$offset n2", $$data ); + push @$params, ( $key, substr $$data, $offset + 4, $size ); + $offset += ( $size + 4 ); } - die $self->type . ': corrupt RDATA' unless $index == length($rdata); + die $self->type . ': corrupt RDATA' unless $offset == $limit; return; } @@ -255,7 +252,7 @@ s/\\,/\\044/g; # disguise (RFC1035) escaped comma die <<"QQ" if /\\092,|\\092\\092/; SVCB: Please use standard RFC1035 escapes - draft-ietf-dnsop-svcb-https double-escape nonsense not implemented + RFC9460 double-escape nonsense not implemented QQ return _presentation( map { Net::DNS::Text->new($_)->encode() } split /,/ ); } @@ -350,7 +347,7 @@ $string = $rr->port(); # \004\210 $rr->key3($string); -Constructor methods for mnemonic SvcParams defined in draft-ietf-dnsop-svcb-https. +Constructor methods for mnemonic SvcParams prescribed by RFC9460. When invoked without arguments, the methods return the presentation format value for the underlying key. The behaviour with undefined arguments is not specified. @@ -399,8 +396,7 @@ =head1 SEE ALSO L<perl> L<Net::DNS> L<Net::DNS::RR> -draft-ietf-dnsop-svcb-https, -L<RFC1035|https://tools.ietf.org/html/rfc1035> +L<RFC9460|https://tools.ietf.org/html/rfc9460> L<Service Parameter Keys|https://www.iana.org/assignments/dns-svcb> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS/Resolver/Base.pm new/Net-DNS-1.41/lib/Net/DNS/Resolver/Base.pm --- old/Net-DNS-1.40/lib/Net/DNS/Resolver/Base.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS/Resolver/Base.pm 2023-11-27 14:22:19.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: Base.pm 1930 2023-08-21 14:10:10Z willem $)[2]; +our $VERSION = (qw$Id: Base.pm 1947 2023-11-23 09:40:45Z willem $)[2]; # @@ -443,13 +443,13 @@ $self->errorstring($!); my $buffer = _read_tcp($socket); - $self->{replyfrom} = $ip; - $self->_diag( 'reply from', "[$ip]", length($buffer), 'bytes' ); + my $peer = $self->{replyfrom} = $socket->peerhost; + $self->_diag( 'packet from', "[$peer]", length($buffer), 'octets' ); my $reply = Net::DNS::Packet->decode( \$buffer, $self->{debug} ); $self->errorstring($@); next unless $self->_accept_reply( $reply, $query ); - $reply->from($ip); + $reply->from($peer); if ( $self->{tsig_rr} && !$reply->verify($query) ) { $self->errorstring( $reply->verifyerr ); @@ -509,10 +509,10 @@ my $reply; while ( my ($socket) = $select->can_read($timeout) ) { - my $peer = $self->{replyfrom} = $socket->peerhost; + my $buffer = _read_udp($socket); - my $buffer = _read_udp( $socket, $self->_packetsz ); - $self->_diag( "reply from [$peer]", length($buffer), 'bytes' ); + my $peer = $self->{replyfrom} = $socket->peerhost; + $self->_diag( "packet from [$peer]", length($buffer), 'octets' ); my $packet = Net::DNS::Packet->decode( \$buffer, $self->{debug} ); $self->errorstring($@); @@ -621,15 +621,16 @@ my ( $expire, $query, $read ) = @$appendix; return if ref($read); - return time() <= $expire unless IO::Select->new($handle)->can_read(0); + return time() < $expire unless IO::Select->new($handle)->can_read(0); return unless $query; # SpamAssassin 3.4.1 workaround - return if $self->{igntc}; return unless $handle->socktype() == SOCK_DGRAM; my $ans = $self->_bgread($handle); + $$appendix[0] = time(); $$appendix[2] = [$ans]; return unless $ans; + return if $self->{igntc}; return unless $ans->header->tc; $self->_diag('packet truncated: retrying using TCP'); @@ -661,20 +662,17 @@ my ( $expire, $query, $read ) = @$appendix; return shift(@$read) if ref($read); - my $select = IO::Select->new($handle); - unless ( $select->can_read(0) ) { - $self->errorstring('timed out'); - return; - } - - my $peer = $self->{replyfrom} = $handle->peerhost; + return unless IO::Select->new($handle)->can_read(0); my $dgram = $handle->socktype() == SOCK_DGRAM; - my $buffer = $dgram ? _read_udp( $handle, $self->_packetsz ) : _read_tcp($handle); - $self->_diag( "reply from [$peer]", length($buffer), 'bytes' ); + my $buffer = $dgram ? _read_udp($handle) : _read_tcp($handle); + + my $peer = $self->{replyfrom} = $handle->peerhost; + $self->_diag( "packet from [$peer]", length($buffer), 'octets' ); my $reply = Net::DNS::Packet->decode( \$buffer, $self->{debug} ); $self->errorstring($@); + return unless $self->_accept_reply( $reply, $query ); $reply->from($peer); @@ -692,7 +690,7 @@ my $header = $reply->header; return unless $header->qr; - return if $query && $header->id != $query->header->id; + return if $query && ( $header->id != $query->header->id ); return $self->errorstring( $header->rcode ); # historical quirk } @@ -746,7 +744,7 @@ my ( $self, @argument ) = @_; # uncoverable pod $self->_deprecate('prefer $iterator = $self->axfr(...)'); my $iterator = $self->axfr(@argument); - ( $self->{axfr_iter} ) = grep {defined} ( $iterator, sub {} ); + ( $self->{axfr_iter} ) = grep {defined} ( $iterator, sub { } ); return defined($iterator); } @@ -838,18 +836,18 @@ # -# Usage: $data = _read_udp($socket, $length); +# Usage: $data = _read_udp($socket); # sub _read_udp { my $socket = shift; my $buffer = ''; - $socket->recv( $buffer, shift ); + $socket->recv( $buffer, 9000 ); ## payload limit for Ethernet "Jumbo" packet return $buffer; } sub _create_tcp_socket { - my ( $self, $ip ) = @_; + my ( $self, $ip, @sockopt ) = @_; my $socket; my $sock_key = "TCP[$ip]"; @@ -867,6 +865,7 @@ PeerPort => $self->{port}, Proto => 'tcp', Timeout => $self->{tcp_timeout}, + @sockopt ) if USE_SOCKET_IP; @@ -878,6 +877,7 @@ PeerPort => $self->{port}, Proto => 'tcp', Timeout => $self->{tcp_timeout}, + @sockopt ) unless $ip6_addr; } @@ -888,7 +888,7 @@ sub _create_udp_socket { - my ( $self, $ip ) = @_; + my ( $self, $ip, @sockopt ) = @_; my $socket; my $sock_key = "UDP[$ip]"; @@ -899,7 +899,8 @@ LocalAddr => $ip6_addr ? $self->{srcaddr6} : $self->{srcaddr4}, LocalPort => $self->{srcport}, Proto => 'udp', - Type => SOCK_DGRAM + Type => SOCK_DGRAM, + @sockopt ) if USE_SOCKET_IP; @@ -908,7 +909,8 @@ LocalAddr => $self->{srcaddr4}, LocalPort => $self->{srcport} || undef, Proto => 'udp', - Type => SOCK_DGRAM + Type => SOCK_DGRAM, + @sockopt ) unless $ip6_addr; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/lib/Net/DNS.pm new/Net-DNS-1.41/lib/Net/DNS.pm --- old/Net-DNS-1.40/lib/Net/DNS.pm 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/lib/Net/DNS.pm 2023-11-27 14:22:19.000000000 +0100 @@ -4,9 +4,9 @@ use warnings; our $VERSION; -$VERSION = '1.40'; +$VERSION = '1.41'; $VERSION = eval {$VERSION}; -our $SVNVERSION = (qw$Id: DNS.pm 1936 2023-08-30 18:05:44Z willem $)[2]; +our $SVNVERSION = (qw$Id: DNS.pm 1951 2023-11-27 13:20:59Z willem $)[2]; =head1 NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/t/04-packet.t new/Net-DNS-1.41/t/04-packet.t --- old/Net-DNS-1.40/t/04-packet.t 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/t/04-packet.t 2023-11-27 14:22:19.000000000 +0100 @@ -1,10 +1,10 @@ #!/usr/bin/perl -# $Id: 04-packet.t 1910 2023-03-30 19:16:30Z willem $ -*-perl-*- +# $Id: 04-packet.t 1947 2023-11-23 09:40:45Z willem $ -*-perl-*- # use strict; use warnings; -use Test::More tests => 102; +use Test::More tests => 103; use TestToolkit; @@ -168,6 +168,7 @@ for my $packet ( Net::DNS::Packet->new('example.com') ) { my $reply = $packet->reply(); ## check $packet->reply() ok( $reply->isa('Net::DNS::Packet'), '$packet->reply() returns packet' ); + like( $reply->string, '/HEADER/', 'reply->string() represents packet' ); my $udpmax = 2048; $packet->edns->udpsize($udpmax); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/t/08-IPv4.t new/Net-DNS-1.41/t/08-IPv4.t --- old/Net-DNS-1.40/t/08-IPv4.t 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/t/08-IPv4.t 2023-11-27 14:22:19.000000000 +0100 @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $Id: 08-IPv4.t 1930 2023-08-21 14:10:10Z willem $ -*-perl-*- +# $Id: 08-IPv4.t 1945 2023-11-22 08:02:31Z willem $ -*-perl-*- # use strict; @@ -409,19 +409,19 @@ } -{ ## exercise error path in bgbusy() and _bgread() - my $resolver = Net::DNS::Resolver->new( nameservers => $IP, udp_timeout => 0 ); +{ ## exercise error path in bgbusy() and bgread() + my $resolver = Net::DNS::Resolver->new( nameservers => $IP, udp_timeout => 5 ); + my $original = $resolver->_make_query_packet(qw(net-dns.org SOA)); + my $mismatch = $resolver->_make_query_packet(qw(net-dns.org SOA)); + my $handle = $resolver->_bgsend_udp( $original, $mismatch->data ); + ok( !$resolver->bgread($handle), 'bgread() id mismatch' ); - ok( !$resolver->bgread(undef), '_bgread() undefined handle' ); + ok( !$resolver->bgread(undef), 'bgread() undefined handle' ); - my $packet = $resolver->_make_query_packet(qw(net-dns.org SOA)); - my $broken = bless {%$packet, id => 0xffff ^ $packet->header->id}, ref($packet); - my $handle = $resolver->_bgsend_udp( $packet, $broken->data ); - ok( !$resolver->bgread($handle), '_bgread() no reply' ); - - ok( !$resolver->bgread( ref($handle)->new ), '_bgread() timeout' ); + ok( !$resolver->bgread( ref($handle)->new ), 'bgread() timeout' ); $resolver->tcp_timeout(10); + my $packet = $resolver->_make_query_packet(qw(net-dns.org SOA)); my $socket = $resolver->_bgsend_tcp( $packet, $packet->data ); while ( $resolver->bgbusy($socket) ) { sleep 1 } my $discard; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.40/t/08-IPv6.t new/Net-DNS-1.41/t/08-IPv6.t --- old/Net-DNS-1.40/t/08-IPv6.t 2023-08-30 20:05:53.000000000 +0200 +++ new/Net-DNS-1.41/t/08-IPv6.t 2023-11-27 14:22:19.000000000 +0100 @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $Id: 08-IPv6.t 1930 2023-08-21 14:10:10Z willem $ -*-perl-*- +# $Id: 08-IPv6.t 1945 2023-11-22 08:02:31Z willem $ -*-perl-*- # use strict; @@ -412,19 +412,19 @@ } -{ ## exercise error path in bgbusy() and _bgread() - my $resolver = Net::DNS::Resolver->new( nameservers => $IP, udp_timeout => 0 ); +{ ## exercise error path in bgbusy() and bgread() + my $resolver = Net::DNS::Resolver->new( nameservers => $IP, udp_timeout => 5 ); + my $original = $resolver->_make_query_packet(qw(net-dns.org SOA)); + my $mismatch = $resolver->_make_query_packet(qw(net-dns.org SOA)); + my $handle = $resolver->_bgsend_udp( $original, $mismatch->data ); + ok( !$resolver->bgread($handle), 'bgread() id mismatch' ); - ok( !$resolver->bgread(undef), '_bgread() undefined handle' ); + ok( !$resolver->bgread(undef), 'bgread() undefined handle' ); - my $packet = $resolver->_make_query_packet(qw(net-dns.org SOA)); - my $broken = bless {%$packet, id => 0xffff ^ $packet->header->id}, ref($packet); - my $handle = $resolver->_bgsend_udp( $packet, $broken->data ); - ok( !$resolver->bgread($handle), '_bgread() no reply' ); - - ok( !$resolver->bgread( ref($handle)->new ), '_bgread() timeout' ); + ok( !$resolver->bgread( ref($handle)->new ), 'bgread() timeout' ); $resolver->tcp_timeout(10); + my $packet = $resolver->_make_query_packet(qw(net-dns.org SOA)); my $socket = $resolver->_bgsend_tcp( $packet, $packet->data ); while ( $resolver->bgbusy($socket) ) { sleep 1 } my $discard;