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 2026-01-26 10:44:41 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-Net-DNS (Old) and /work/SRC/openSUSE:Factory/.perl-Net-DNS.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Net-DNS" Mon Jan 26 10:44:41 2026 rev:83 rq:1328816 version:1.540.0 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-Net-DNS/perl-Net-DNS.changes 2025-10-10 17:08:21.126722656 +0200 +++ /work/SRC/openSUSE:Factory/.perl-Net-DNS.new.1928/perl-Net-DNS.changes 2026-01-26 10:56:47.844156827 +0100 @@ -1,0 +2,6 @@ +Sat Jan 17 05:38:56 UTC 2026 - Tina Müller <[email protected]> + +- updated to 1.540.0 (1.54) + see /usr/share/doc/packages/perl-Net-DNS/Changes + +------------------------------------------------------------------- Old: ---- Net-DNS-1.53.tar.gz New: ---- Net-DNS-1.54.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Net-DNS.spec ++++++ --- /var/tmp/diff_new_pack.0emTtB/_old 2026-01-26 10:56:59.628650174 +0100 +++ /var/tmp/diff_new_pack.0emTtB/_new 2026-01-26 10:56:59.632650342 +0100 @@ -1,7 +1,7 @@ # # spec file for package perl-Net-DNS # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,10 +18,10 @@ %define cpan_name Net-DNS Name: perl-Net-DNS -Version: 1.530.0 +Version: 1.540.0 Release: 0 -# 1.53 -> normalize -> 1.530.0 -%define cpan_version 1.53 +# 1.54 -> normalize -> 1.540.0 +%define cpan_version 1.54 License: MIT Summary: Perl Interface to the Domain Name System URL: https://metacpan.org/release/%{cpan_name} @@ -77,13 +77,13 @@ Provides: perl(Net::DNS::DomainName) = 2005.0.0 Provides: perl(Net::DNS::DomainName1035) Provides: perl(Net::DNS::DomainName2535) -Provides: perl(Net::DNS::Header) = 2002.0.0 +Provides: perl(Net::DNS::Header) = 2042.0.0 Provides: perl(Net::DNS::Mailbox) = 2002.0.0 Provides: perl(Net::DNS::Mailbox1035) Provides: perl(Net::DNS::Mailbox2535) Provides: perl(Net::DNS::Nameserver) = 2002.0.0 Provides: perl(Net::DNS::Packet) = 2003.0.0 -Provides: perl(Net::DNS::Parameters) = 2021.0.0 +Provides: perl(Net::DNS::Parameters) = 2043.0.0 Provides: perl(Net::DNS::Question) = 2002.0.0 Provides: perl(Net::DNS::RR) = 2037.0.0 Provides: perl(Net::DNS::RR::A) = 2003.0.0 @@ -95,14 +95,15 @@ Provides: perl(Net::DNS::RR::CAA) = 2003.0.0 Provides: perl(Net::DNS::RR::CDNSKEY) = 2003.0.0 Provides: perl(Net::DNS::RR::CDS) = 2003.0.0 -Provides: perl(Net::DNS::RR::CERT) = 2002.0.0 +Provides: perl(Net::DNS::RR::CERT) = 2042.0.0 Provides: perl(Net::DNS::RR::CNAME) = 2003.0.0 Provides: perl(Net::DNS::RR::CSYNC) = 2003.0.0 -Provides: perl(Net::DNS::RR::DELEG) = 2039.0.0 +Provides: perl(Net::DNS::RR::DELEG) = 2043.0.0 +Provides: perl(Net::DNS::RR::DELEGI) = 2043.0.0 Provides: perl(Net::DNS::RR::DHCID) = 2003.0.0 Provides: perl(Net::DNS::RR::DNAME) = 2003.0.0 -Provides: perl(Net::DNS::RR::DNSKEY) = 2003.0.0 -Provides: perl(Net::DNS::RR::DS) = 2003.0.0 +Provides: perl(Net::DNS::RR::DNSKEY) = 2042.0.0 +Provides: perl(Net::DNS::RR::DS) = 2042.0.0 Provides: perl(Net::DNS::RR::DSYNC) = 2003.0.0 Provides: perl(Net::DNS::RR::EUI48) = 2003.0.0 Provides: perl(Net::DNS::RR::EUI64) = 2003.0.0 @@ -150,15 +151,15 @@ Provides: perl(Net::DNS::RR::PX) = 2003.0.0 Provides: perl(Net::DNS::RR::RESINFO) = 2003.0.0 Provides: perl(Net::DNS::RR::RP) = 2002.0.0 -Provides: perl(Net::DNS::RR::RRSIG) = 2003.0.0 +Provides: perl(Net::DNS::RR::RRSIG) = 2042.0.0 Provides: perl(Net::DNS::RR::RT) = 2003.0.0 -Provides: perl(Net::DNS::RR::SIG) = 2003.0.0 +Provides: perl(Net::DNS::RR::SIG) = 2042.0.0 Provides: perl(Net::DNS::RR::SMIMEA) = 2003.0.0 Provides: perl(Net::DNS::RR::SOA) = 2002.0.0 Provides: perl(Net::DNS::RR::SPF) = 2003.0.0 Provides: perl(Net::DNS::RR::SRV) = 2003.0.0 Provides: perl(Net::DNS::RR::SSHFP) = 2003.0.0 -Provides: perl(Net::DNS::RR::SVCB) = 2037.0.0 +Provides: perl(Net::DNS::RR::SVCB) = 2043.0.0 Provides: perl(Net::DNS::RR::TKEY) = 2035.0.0 Provides: perl(Net::DNS::RR::TLSA) = 2003.0.0 Provides: perl(Net::DNS::RR::TSIG) = 2003.0.0 @@ -175,7 +176,7 @@ Provides: perl(Net::DNS::Resolver::cygwin) = 2002.0.0 Provides: perl(Net::DNS::Resolver::os2) = 2007.0.0 Provides: perl(Net::DNS::Resolver::os390) = 2007.0.0 -Provides: perl(Net::DNS::Text) = 2002.0.0 +Provides: perl(Net::DNS::Text) = 2043.0.0 Provides: perl(Net::DNS::Update) = 2017.0.0 Provides: perl(Net::DNS::ZoneFile) = 2002.0.0 Provides: perl(Net::DNS::ZoneFile::Generator) ++++++ Net-DNS-1.53.tar.gz -> Net-DNS-1.54.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/Changes new/Net-DNS-1.54/Changes --- old/Net-DNS-1.53/Changes 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/Changes 2026-01-16 13:30:38.000000000 +0100 @@ -1,4 +1,12 @@ -$Id: Changes 2041 2025-08-29 12:11:41Z willem $ -*-text-*- +$Id: Changes 2045 2026-01-16 12:30:12Z willem $ -*-text-*- + + +**** 1.54 Jan 16, 2026 + + Resync with IANA DNS parameters registry. + Resync with IANA DNSSEC algorithms registry. + Implement DELEGI as derived subtype of DELEG RR. + Backport DELEG parser to SVCB. **** 1.53 Aug 29, 2025 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/MANIFEST new/Net-DNS-1.54/MANIFEST --- old/Net-DNS-1.53/MANIFEST 2025-08-29 14:17:59.000000000 +0200 +++ new/Net-DNS-1.54/MANIFEST 2026-01-16 13:30:53.000000000 +0100 @@ -45,6 +45,7 @@ lib/Net/DNS/RR/CNAME.pm lib/Net/DNS/RR/CSYNC.pm lib/Net/DNS/RR/DELEG.pm +lib/Net/DNS/RR/DELEGI.pm lib/Net/DNS/RR/DHCID.pm lib/Net/DNS/RR/DNAME.pm lib/Net/DNS/RR/DNSKEY.pm diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/META.json new/Net-DNS-1.54/META.json --- old/Net-DNS-1.53/META.json 2025-08-29 14:17:59.000000000 +0200 +++ new/Net-DNS-1.54/META.json 2026-01-16 13:30:53.000000000 +0100 @@ -79,6 +79,6 @@ } }, "release_status" : "stable", - "version" : "1.53", + "version" : "1.54", "x_serialization_backend" : "JSON::PP version 4.16" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/META.yml new/Net-DNS-1.54/META.yml --- old/Net-DNS-1.53/META.yml 2025-08-29 14:17:59.000000000 +0200 +++ new/Net-DNS-1.54/META.yml 2026-01-16 13:30:52.000000000 +0100 @@ -55,5 +55,5 @@ perl: '5.008009' strict: '1.03' warnings: '1.0501' -version: '1.53' +version: '1.54' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/lib/Net/DNS/Header.pm new/Net-DNS-1.54/lib/Net/DNS/Header.pm --- old/Net-DNS-1.53/lib/Net/DNS/Header.pm 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/lib/Net/DNS/Header.pm 2026-01-16 13:30:38.000000000 +0100 @@ -3,7 +3,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: Header.pm 2002 2025-01-07 09:57:46Z willem $)[2]; +our $VERSION = (qw$Id: Header.pm 2042 2025-12-24 10:23:11Z willem $)[2]; =head1 NAME @@ -86,11 +86,12 @@ my $cd = $self->cd; my $do = $self->do; my $co = $self->co; + my $de = $self->de; return <<"QQ"; ;; id = $dispid ;; qr = $qr aa = $aa tc = $tc rd = $rd opcode = $opcode ;; ra = $ra z = $zz ad = $ad cd = $cd rcode = $rcode -;; do = $do co = $co +;; do = $do co = $co de = $de ;; qdcount = $qd ancount = $an ;; nscount = $ns arcount = $ar QQ @@ -376,7 +377,7 @@ =head1 EDNS Protocol Extensions -=head2 do, co +=head2 do, co, de print "DNSSEC_OK flag was ", $packet->header->do ? "not" : "", "set\n"; $packet->header->do(1); @@ -395,6 +396,11 @@ return $self->_ednsflag( 0x4000, @value ); } +sub de { + my ( $self, @value ) = @_; + return $self->_ednsflag( 0x2000, @value ); +} + =head2 Extended rcode diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/lib/Net/DNS/Parameters.pm new/Net-DNS-1.54/lib/Net/DNS/Parameters.pm --- old/Net-DNS-1.53/lib/Net/DNS/Parameters.pm 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/lib/Net/DNS/Parameters.pm 2026-01-16 13:30:38.000000000 +0100 @@ -3,13 +3,13 @@ ################################################ ## ## Domain Name System (DNS) Parameters -## (last updated 2025-07-01) +## (last updated 2025-12-29) ## ################################################ use strict; use warnings; -our $VERSION = (qw$Id: Parameters.pm 2021 2025-07-04 13:00:27Z willem $)[2]; +our $VERSION = (qw$Id: Parameters.pm 2043 2026-01-14 13:35:59Z willem $)[2]; use integer; use Carp; @@ -50,7 +50,9 @@ # Registry: Resource Record (RR) TYPEs my @typebyname = ( - DELEG => 65432, # draft-ietf-deleg + DELEG => 65432, # draft-ietf-deleg-02 + DELEG => 61440, # draft-ietf-deleg-03 + DELEGI => 65433, # draft-ietf-deleg-03 A => 1, # RFC1035 NS => 2, # RFC1035 MD => 3, # RFC1035 @@ -115,9 +117,9 @@ ZONEMD => 63, # RFC8976 SVCB => 64, # RFC9460 HTTPS => 65, # RFC9460 - DSYNC => 66, # RFC-ietf-dnsop-generalized-notify-09 - HHIT => 67, # draft-ietf-drip-registries-28 - BRID => 68, # draft-ietf-drip-registries-28 + DSYNC => 66, # RFC9859 + HHIT => 67, # RFC9886 + BRID => 68, # RFC9886 SPF => 99, # RFC7208 UINFO => 100, # IANA-Reserved UID => 101, # IANA-Reserved @@ -129,7 +131,7 @@ LP => 107, # RFC6742 EUI48 => 108, # RFC7043 EUI64 => 109, # RFC7043 - NXNAME => 128, # RFC-ietf-dnsop-compact-denial-of-existence-07 + NXNAME => 128, # RFC9824 TKEY => 249, # RFC2930 TSIG => 250, # RFC8945 IXFR => 251, # RFC1995 @@ -244,7 +246,7 @@ # Registry: EDNS Header Flags (16 bits) my @ednsflagbyname = ( DO => 0x8000, # RFC4035 RFC3225 RFC6840 - CO => 0x4000, # RFC-ietf-dnsop-compact-denial-of-existence-07 + CO => 0x4000, # RFC9824 ); push @ednsflagbyname, map { /^\d/ ? $_ : lc($_) } @ednsflagbyname; our %ednsflagbyname = @ednsflagbyname; @@ -297,7 +299,7 @@ 27 => 'Unsupported NSEC3 Iterations Value', # RFC9276 28 => 'Unable to conform to policy', # draft-homburg-dnsop-codcp-00 29 => 'Synthesized', # https://github.com/PowerDNS/pdns/pull/12334 - 30 => 'Invalid Query Type', # RFC-ietf-dnsop-compact-denial-of-existence-07 + 30 => 'Invalid Query Type', # RFC9824 ); our %dnserrorbyval = @dnserrorbyval; @@ -416,8 +418,8 @@ sub _typespec { my $generate = defined wantarray; return EXTLANG ? eval <<'END' : ''; ## no critic - my ($node) = @_; ## draft-levine-dnsextlang - my $instance = Net::DNS::Extlang->new(); + my ($node) = @_; + my $instance = Net::DNS::Extlang->new(); ## draft-levine-dnsextlang my $basename = $instance->domain || return ''; require Net::DNS::Resolver; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/lib/Net/DNS/RR/CERT.pm new/Net-DNS-1.54/lib/Net/DNS/RR/CERT.pm --- old/Net-DNS-1.53/lib/Net/DNS/RR/CERT.pm 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/lib/Net/DNS/RR/CERT.pm 2026-01-16 13:30:38.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: CERT.pm 2002 2025-01-07 09:57:46Z willem $)[2]; +our $VERSION = (qw$Id: CERT.pm 2042 2025-12-24 10:23:11Z willem $)[2]; use base qw(Net::DNS::RR); @@ -141,8 +141,8 @@ 'ECDSAP384SHA384' => 14, # [RFC6605] 'ED25519' => 15, # [RFC8080] 'ED448' => 16, # [RFC8080] - 'SM2SM3' => 17, # [RFC-cuiling-dnsop-sm2-alg-15] - 'ECC-GOST12' => 23, # [RFC-makarenko-gost2012-dnssec-05] + 'SM2SM3' => 17, # [RFC9563] + 'ECC-GOST12' => 23, # [RFC9558] 'INDIRECT' => 252, # [RFC4034] 'PRIVATEDNS' => 253, # [RFC4034] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/lib/Net/DNS/RR/DELEG.pm new/Net-DNS-1.54/lib/Net/DNS/RR/DELEG.pm --- old/Net-DNS-1.53/lib/Net/DNS/RR/DELEG.pm 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/lib/Net/DNS/RR/DELEG.pm 2026-01-16 13:30:38.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: DELEG.pm 2039 2025-08-26 09:01:09Z willem $)[2]; +our $VERSION = (qw$Id: DELEG.pm 2043 2026-01-14 13:35:59Z willem $)[2]; use base qw(Net::DNS::RR); @@ -18,13 +18,16 @@ use Net::DNS::RR::A; use Net::DNS::RR::AAAA; use Net::DNS::DomainName; +use Net::DNS::Text; -my %keyname = ( - 1 => 'server-ip4', - 2 => 'server-ip6', +my %keybycode = ( + 0 => 'mandatory', + 1 => 'server-ipv4', + 2 => 'server-ipv6', 3 => 'server-name', - 4 => 'include-name', + 4 => 'include-delegi', ); +my %keybyname = reverse %keybycode; sub _decode_rdata { ## decode rdata from wire-format octet string @@ -69,13 +72,13 @@ while (@parameters) { my $key = shift @parameters; my $val = shift @parameters; - if ( my $name = $keyname{$key} ) { + if ( my $name = $keybycode{$key} ) { my @val = grep {length} $self->$name; my @rhs = grep {length} join ',', @val; push @rdata, join '=', $name, @rhs; } else { - my @hex = unpack 'H*', $val; - $self->_annotation(qq[unexpected key$key="@hex"]); + my $txt = Net::DNS::Text->decode( \$val, 0, length $val ); + push @rdata, join '=', "key$key", $txt->string; } } @@ -87,16 +90,17 @@ my ( $self, @argument ) = @_; while ( local $_ = shift @argument ) { - my @value; - m/^[^=]+=?(.*)$/; - for ( my $rhs = /=$/ ? shift @argument : $1 ) { - s/^"(.*)"$/$1/; # strip enclosing quotes + m/^([^=]+)(=?)(.*)$/; + my $key = $1; + my $val = length($3) ? $3 : $2 ? shift @argument : ''; + if (/^key\d+/) { + $self->$key($val); + } else { + local $_ = $val; + s/^"([^"]*)"$/$1/s; # strip enclosing quotes s/\\,/\\044/g; # disguise escaped comma - push @value, length() ? split /,/ : (); + $self->$key( split /,/ ); } - - m/^([^=]+)/; # extract identifier - $self->$1(@value); } return; } @@ -106,50 +110,72 @@ my $self = shift; my ($paramref) = grep {defined} $self->{parameters}, []; - my %paramhash = @$paramref; - if ( defined $paramhash{3} ) { - die( $self->type . qq[: invalid $keyname{3}] ) - unless unpack 'xa*', $paramhash{3}; + my %parameter = @$paramref; + + if ( defined $parameter{0} ) { + my %unique; + foreach ( grep { !$unique{$_}++ } unpack 'n*', $parameter{0} ) { + die( $self->type . qq[: unexpected "key0" in mandatory list] ) if $unique{0}; + die( $self->type . qq[: duplicate "key$_" in mandatory list] ) if --$unique{$_}; + die( $self->type . qq[: mandatory "key$_" not present] ) unless defined $parameter{$_}; + } + } + + foreach ( 3, 4 ) { + next unless defined $parameter{$_}; + next if length( $parameter{$_} ) > 1; + die( $self->type . qq[: invalid $keybycode{$_}] ); } - if ( defined $paramhash{4} ) { - die( $self->type . qq[: invalid $keyname{4}] ) - unless unpack 'xa*', delete $paramhash{4}; - die( $self->type . qq[: parameter conflicts with $keyname{4}] ) - if scalar keys %paramhash; + if ( defined $parameter{4} ) { + die( $self->type . qq[: parameter conflicts with $keybycode{4}] ) + if scalar( keys %parameter ) > 1; } return; } -sub server_ip4 { ## server-ip4=192.0.2.53 +sub mandatory { ## mandatory=key1,server-name,... + my ( $self, @value ) = @_; # uncoverable pod + my @list = map { $keybyname{lc $_} || $_ } @value; + my @keys = map { /(\d+)$/ ? $1 : die( $self->type . qq[: unexpected "$_"] ) } @list; + return $self->_parameter( 0, _integer16( sort { $a <=> $b } @keys ) ) if @keys; + my $packed = $self->_parameter(0); + return _list( defined($packed) ? map {"key$_"} unpack 'n*', $packed : return ); +} + +sub server_ipv4 { ## server-ipv4=192.0.2.53 my ( $self, @value ) = @_; return $self->_parameter( 1, _address4(@value) ) if @value; my $packed = $self->_parameter(1) || return; my @iplist = unpack 'a4' x ( length($packed) / 4 ), $packed; - return map { Net::DNS::RR::A::address( {address => $_} ) } @iplist; + return _list( map { Net::DNS::RR::A::address( {address => $_} ) } @iplist ); } -sub server_ip6 { ## server-ip6=2001:DB8::53 +sub server_ipv6 { ## server-ipv6=2001:DB8::53 my ( $self, @value ) = @_; return $self->_parameter( 2, _address6(@value) ) if @value; my $packed = $self->_parameter(2) || return; my @iplist = unpack 'a16' x ( length($packed) / 16 ), $packed; - return map { Net::DNS::RR::AAAA::address_short( {address => $_} ) } @iplist; + return _list( map { Net::DNS::RR::AAAA::address_short( {address => $_} ) } @iplist ); } sub server_name { ## server-name=nameserver.example my ( $self, @value ) = @_; return $self->_parameter( 3, _domain(@value) ) if @value; my $packed = $self->_parameter(3) || return; - return Net::DNS::DomainName->decode( \$packed )->fqdn; + my $index = 0; + ( $value[++$#value], $index ) = Net::DNS::DomainName->decode( \$packed, $index ) while $index < length $packed; + return _list( map { $_->fqdn } @value ); } -sub include_name { ## include-name=devolved.example +sub include_delegi { ## include-delegi=devolved.example my ( $self, @value ) = @_; return $self->_parameter( 4, _domain(@value) ) if @value; my $packed = $self->_parameter(4) || return; - return Net::DNS::DomainName->decode( \$packed )->fqdn; + my $index = 0; + ( $value[++$#value], $index ) = Net::DNS::DomainName->decode( \$packed, $index ) while $index < length $packed; + return _list( map { $_->fqdn } @value ); } @@ -170,8 +196,11 @@ my $super = "SUPER::$method"; return $self->$super(@argument) unless $method =~ /^key[0]*(\d+)$/i; - die( $self->type . qq[: unsupported $method(...)] ) if @argument; - return $self->_parameter($1); + my $key = $1; + return $self->_parameter($key) unless @argument; + my $first = shift @argument; + my $value = defined $first ? Net::DNS::Text->new($first)->raw : $first; + return $self->_parameter( $key, $value, @argument ); } @@ -183,10 +212,9 @@ if ( scalar @argument ) { my $arg = shift @argument; # key($value); - my $tag = $keyname{$key} || ''; delete $parameter{$key} unless defined $arg; - die( $self->type . qq[: duplicate parameter $tag] ) if defined $parameter{$key}; - die( $self->type . qq[: unexpected $tag value] ) if scalar @argument; + die( $self->type . qq[: duplicate parameter key$key] ) if defined $parameter{$key}; + die( $self->type . qq[: unexpected key$key value] ) if scalar @argument; delete $self->{rdata}; $parameter{$key} = $arg if defined $arg; $self->{parameters} = [map { ( $_, $parameter{$_} ) } sort { $a <=> $b } keys %parameter]; @@ -201,6 +229,11 @@ return scalar(@arg) > 1 ? join( '', @arg ) : @arg; } +sub _list { ## context-dependent list or single value + my @arg = @_; + return wantarray ? @arg : shift @arg; +} + sub _address4 { my @arg = @_; return _concatenate( map { Net::DNS::RR::A::address( {}, $_ ) } @arg ); @@ -213,7 +246,12 @@ sub _domain { my @arg = @_; - return map { Net::DNS::DomainName->new($_)->encode() } @arg; + return _concatenate( map { Net::DNS::DomainName->new($_)->encode() } @arg ); +} + +sub _integer16 { + my @arg = @_; + return _concatenate( map { pack( 'n', $_ ) } @arg ); } @@ -247,14 +285,14 @@ =head1 SYNOPSIS use Net::DNS; - $rr = Net::DNS::RR->new('zone DELEG server-ip4=192.0.2.1 ...'); - $rr = Net::DNS::RR->new('zone DELEG server-ip6=2001:db8::53 ...'); + $rr = Net::DNS::RR->new('zone DELEG server-ipv4=192.0.2.1 ...'); + $rr = Net::DNS::RR->new('zone DELEG server-ipv6=2001:db8::53 ...'); $rr = Net::DNS::RR->new('zone DELEG server-name=nameserver.example ...'); - $rr = Net::DNS::RR->new('zone DELEG include-name=devolved.example'); + $rr = Net::DNS::RR->new('zone DELEG include-delegi=devolved.example'); =head1 DESCRIPTION -The DNS DELEG resource record set, wherever it appears, advertises the +The DNS DELEG resource record set, wherever it appears, designates the authoritative nameservers and transport parameters to be used to resolve queries for data at the owner name or any subordinate thereof. @@ -271,18 +309,18 @@ other unpredictable behaviour. -=head2 server_ip4 +=head2 server_ipv4 - eg.example. DELEG server-ip4=192.0.2.1,... - @ip = $rr->server_ip4; + eg.example. DELEG server-ipv4=192.0.2.1,... + @ip = $rr->server_ipv4; Sets or gets a list of IP addresses. -=head2 server_ip6 +=head2 server_ipv6 - eg.example. DELEG server-ip6=2001:db8::53,... - @ip = $rr->server_ip6; + eg.example. DELEG server-ipv6=2001:db8::53,... + @ip = $rr->server_ipv6; Sets or gets a list of IP addresses. @@ -297,10 +335,10 @@ Returns the nameserver domain name or the undefined value if not specified. -=head2 include_name +=head2 include_delegi - eg.example. DELEG include-name=devolved.example. - $destination = $rr->include_name; + eg.example. DELEG include-delegi=devolved.example. + $destination = $rr->include_delegi; Specifies the location of a devolved nameserver configuration. @@ -338,6 +376,6 @@ =head1 SEE ALSO L<perl> L<Net::DNS> L<Net::DNS::RR> -draft-ietf-deleg-02 +draft-ietf-deleg-06 =cut diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/lib/Net/DNS/RR/DELEGI.pm new/Net-DNS-1.54/lib/Net/DNS/RR/DELEGI.pm --- old/Net-DNS-1.53/lib/Net/DNS/RR/DELEGI.pm 1970-01-01 01:00:00.000000000 +0100 +++ new/Net-DNS-1.54/lib/Net/DNS/RR/DELEGI.pm 2026-01-16 13:30:38.000000000 +0100 @@ -0,0 +1,77 @@ +package Net::DNS::RR::DELEGI; + +use strict; +use warnings; +our $VERSION = (qw$Id: DELEGI.pm 2043 2026-01-14 13:35:59Z willem $)[2]; + +use base qw(Net::DNS::RR::DELEG); + + +=head1 NAME + +Net::DNS::RR::DELEGI - DNS DELEGI resource record + +=cut + + +1; +__END__ + + +=head1 SYNOPSIS + + use Net::DNS; + +=head1 DESCRIPTION + +Extensible DNS delegation information. + +This is a clone of the DELEG record and inherits all properties of +the Net::DNS::RR::DELEG class. + +Please see the L<Net::DNS::RR::DELEG> documentation for details. + +=head1 METHODS + +The available methods are those inherited from the base class augmented +by the type-specific methods defined in this package. + +Use of undocumented package features or direct access to internal data +structures is discouraged and could result in program termination or +other unpredictable behaviour. + + + +=head1 COPYRIGHT + +Copyright (c)2026 Dick Franks. + +All rights reserved. + +Package template (c)2009,2012 O.M.Kolkman and R.W.Franks. + + +=head1 LICENSE + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the original copyright notices appear in all copies and that both +copyright notice and this permission notice appear in supporting +documentation, and that the name of the author not be used in advertising +or publicity pertaining to distribution of the software without specific +prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + +=head1 SEE ALSO + +L<perl> L<Net::DNS> L<Net::DNS::RR> + +=cut diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/lib/Net/DNS/RR/DNSKEY.pm new/Net-DNS-1.54/lib/Net/DNS/RR/DNSKEY.pm --- old/Net-DNS-1.53/lib/Net/DNS/RR/DNSKEY.pm 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/lib/Net/DNS/RR/DNSKEY.pm 2026-01-16 13:30:38.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: DNSKEY.pm 2003 2025-01-21 12:06:06Z willem $)[2]; +our $VERSION = (qw$Id: DNSKEY.pm 2042 2025-12-24 10:23:11Z willem $)[2]; use base qw(Net::DNS::RR); @@ -103,6 +103,17 @@ } +sub adt { + my ( $self, @value ) = @_; + if ( scalar @value ) { + for ( $self->{flags} |= 0x0002 ) { + $_ ^= 0x0002 unless shift @value; + } + } + return $self->{flags} & 0x0002; +} + + sub sep { my ( $self, @value ) = @_; if ( scalar @value ) { @@ -237,8 +248,8 @@ 'ECDSAP384SHA384' => 14, # [RFC6605] 'ED25519' => 15, # [RFC8080] 'ED448' => 16, # [RFC8080] - 'SM2SM3' => 17, # [RFC-cuiling-dnsop-sm2-alg-15] - 'ECC-GOST12' => 23, # [RFC-makarenko-gost2012-dnssec-05] + 'SM2SM3' => 17, # [RFC9563] + 'ECC-GOST12' => 23, # [RFC9558] 'INDIRECT' => 252, # [RFC4034] 'PRIVATEDNS' => 253, # [RFC4034] @@ -328,6 +339,20 @@ =back +=over 4 + +=item adt + + $rr->adt(1); + + if ( $rr->adt ) { + ... + } + +Authoritative Delegation Types (ADT) flag. + +=back + =over 4 =item sep diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/lib/Net/DNS/RR/DS.pm new/Net-DNS-1.54/lib/Net/DNS/RR/DS.pm --- old/Net-DNS-1.53/lib/Net/DNS/RR/DS.pm 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/lib/Net/DNS/RR/DS.pm 2026-01-16 13:30:38.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: DS.pm 2003 2025-01-21 12:06:06Z willem $)[2]; +our $VERSION = (qw$Id: DS.pm 2042 2025-12-24 10:23:11Z willem $)[2]; use base qw(Net::DNS::RR); @@ -174,8 +174,8 @@ 'SHA-256' => 2, # [RFC4509] 'GOST-R-34.11-94' => 3, # [RFC5933] 'SHA-384' => 4, # [RFC6605] - 'GOST-R-34.11-2012' => 5, # [RFC-makarenko-gost2012-dnssec-05] - 'SM3' => 6, # [RFC-cuiling-dnsop-sm2-alg-15] + 'GOST-R-34.11-2012' => 5, # [RFC9558] + 'SM3' => 6, # [RFC9563] ); my @digestalias = ( 'SHA' => 1 ); @@ -221,8 +221,8 @@ 'ECDSAP384SHA384' => 14, # [RFC6605] 'ED25519' => 15, # [RFC8080] 'ED448' => 16, # [RFC8080] - 'SM2SM3' => 17, # [RFC-cuiling-dnsop-sm2-alg-15] - 'ECC-GOST12' => 23, # [RFC-makarenko-gost2012-dnssec-05] + 'SM2SM3' => 17, # [RFC9563] + 'ECC-GOST12' => 23, # [RFC9558] 'INDIRECT' => 252, # [RFC4034] 'PRIVATEDNS' => 253, # [RFC4034] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/lib/Net/DNS/RR/RRSIG.pm new/Net-DNS-1.54/lib/Net/DNS/RR/RRSIG.pm --- old/Net-DNS-1.53/lib/Net/DNS/RR/RRSIG.pm 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/lib/Net/DNS/RR/RRSIG.pm 2026-01-16 13:30:38.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: RRSIG.pm 2003 2025-01-21 12:06:06Z willem $)[2]; +our $VERSION = (qw$Id: RRSIG.pm 2042 2025-12-24 10:23:11Z willem $)[2]; use base qw(Net::DNS::RR); @@ -29,20 +29,22 @@ ## IMPORTANT: MUST NOT include crypto packages in metadata (strong crypto prohibited in many territories) use constant DNSSEC => defined $INC{'Net/DNS/SEC.pm'}; ## Discover how we got here, without exposing any crypto -my @index; +my @algorithms; +my @deprecated; if (DNSSEC) { - foreach my $class ( map {"Net::DNS::SEC::$_"} qw(Private RSA DSA ECDSA EdDSA Digest SM2) ) { - my @algorithms = eval join '', qw(r e q u i r e), " $class; ${class}::_index()"; ## no critic - push @index, map { ( $_ => $class ) } @algorithms; + foreach my $class ( map {"Net::DNS::SEC::$_"} qw(Private DSA RSA ECDSA EdDSA Digest SM2) ) { + my @index = eval join '', qw(r e q u i r e), " $class; ${class}::_index()"; ## no critic + push @algorithms, map { ( $_ => $class ) } @index; + push @deprecated, eval "${class}::_deprecate()"; ## no critic } - croak 'Net::DNS::SEC version not supported' unless scalar(@index); + croak 'Net::DNS::SEC version not supported' unless scalar(@algorithms); } -my %DNSSEC_verify = @index; -my %DNSSEC_siggen = @index; +my %DNSSEC_verify = @algorithms; +my %DNSSEC_siggen = @algorithms; -my @deprecated = ( 1, 3, 6, 12 ); # RFC8624 -delete @DNSSEC_siggen{@deprecated}; +delete @DNSSEC_verify{@deprecated}; ## DNSSEC status per RFC9904 +delete @DNSSEC_siggen{map { abs($_) } @deprecated}; my @field = qw(typecovered algorithm labels orgttl sigexpiration siginception keytag); @@ -349,8 +351,8 @@ 'ECDSAP384SHA384' => 14, # [RFC6605] 'ED25519' => 15, # [RFC8080] 'ED448' => 16, # [RFC8080] - 'SM2SM3' => 17, # [RFC-cuiling-dnsop-sm2-alg-15] - 'ECC-GOST12' => 23, # [RFC-makarenko-gost2012-dnssec-05] + 'SM2SM3' => 17, # [RFC9563] + 'ECC-GOST12' => 23, # [RFC9558] 'INDIRECT' => 252, # [RFC4034] 'PRIVATEDNS' => 253, # [RFC4034] @@ -570,8 +572,8 @@ use Net::DNS::SEC; $sigrr = Net::DNS::RR::RRSIG->create( \@rrset, $keypath, - sigex => 20241230010101, - sigin => 20241201010101 + sigex => 20251230010101, + sigin => 20251201010101 ); $sigrr->verify( \@rrset, $keyrr ) || die $sigrr->vrfyerrstr; @@ -696,8 +698,8 @@ $sigrr = Net::DNS::RR::RRSIG->create( \@rrsetref, $keypath, - sigex => 20241230010101, - sigin => 20241201010101 + sigex => 20251230010101, + sigin => 20251201010101 ); $sigrr->print; @@ -723,8 +725,8 @@ The optional remaining arguments consist of ( name => value ) pairs as follows: - sigex => 20241230010101, # signature expiration - sigin => 20241201010101, # signature inception + sigex => 20251230010101, # signature expiration + sigin => 20251201010101, # signature inception sigval => 30, # validity window (days) ttl => 3600 @@ -799,9 +801,6 @@ Dick Franks added support for elliptic curve and Edwards curve algorithms. -Mike McCauley created the Crypt::OpenSSL::ECDSA perl extension module -specifically for this development. - =head1 COPYRIGHT @@ -809,7 +808,7 @@ Copyright (c)2007-2008 NLnet Labs, Olaf M. Kolkman -Portions Copyright (c)2014 Dick Franks +Portions Copyright (c)2014,2025 Dick Franks All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/lib/Net/DNS/RR/SIG.pm new/Net-DNS-1.54/lib/Net/DNS/RR/SIG.pm --- old/Net-DNS-1.53/lib/Net/DNS/RR/SIG.pm 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/lib/Net/DNS/RR/SIG.pm 2026-01-16 13:30:38.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: SIG.pm 2003 2025-01-21 12:06:06Z willem $)[2]; +our $VERSION = (qw$Id: SIG.pm 2042 2025-12-24 10:23:11Z willem $)[2]; use base qw(Net::DNS::RR); @@ -29,17 +29,19 @@ ## IMPORTANT: MUST NOT include crypto packages in metadata (strong crypto prohibited in many territories) use constant DNSSEC => defined $INC{'Net/DNS/SEC.pm'}; ## Discover how we got here, without exposing any crypto -my @index; +my @algorithms; +my @deprecated; if (DNSSEC) { - foreach my $class ( map {"Net::DNS::SEC::$_"} qw(Private RSA DSA ECDSA EdDSA Digest SM2) ) { - my @algorithms = eval join '', qw(r e q u i r e), " $class; ${class}::_index()"; ## no critic - push @index, map { ( $_ => $class ) } @algorithms; + foreach my $class ( map {"Net::DNS::SEC::$_"} qw(Private DSA RSA ECDSA EdDSA Digest SM2) ) { + my @index = eval join '', qw(r e q u i r e), " $class; ${class}::_index()"; ## no critic + push @algorithms, map { ( $_ => $class ) } @index; + push @deprecated, eval "${class}::_deprecate()"; ## no critic } - croak 'Net::DNS::SEC version not supported' unless scalar(@index); + croak 'Net::DNS::SEC version not supported' unless scalar(@algorithms); } -my %DNSSEC_verify = @index; -my %DNSSEC_siggen = @index; +my %DNSSEC_verify = @algorithms; +my %DNSSEC_siggen = @algorithms; my @field = qw(typecovered algorithm labels orgttl sigexpiration siginception keytag); @@ -349,8 +351,8 @@ 'ECDSAP384SHA384' => 14, # [RFC6605] 'ED25519' => 15, # [RFC8080] 'ED448' => 16, # [RFC8080] - 'SM2SM3' => 17, # [RFC-cuiling-dnsop-sm2-alg-15] - 'ECC-GOST12' => 23, # [RFC-makarenko-gost2012-dnssec-05] + 'SM2SM3' => 17, # [RFC9563] + 'ECC-GOST12' => 23, # [RFC9558] 'INDIRECT' => 252, # [RFC4034] 'PRIVATEDNS' => 253, # [RFC4034] @@ -676,8 +678,8 @@ The optional remaining arguments consist of ( name => value ) pairs as follows: - sigin => 20241201010101, # signature inception - sigex => 20241201011101, # signature expiration + sigin => 20251201010101, # signature inception + sigex => 20251201011101, # signature expiration sigval => 10, # validity window (minutes) The sigin and sigex values may be specified as Perl time values or as @@ -749,6 +751,8 @@ T.J. Mather provided support for the DSA algorithm. +Dick Franks added support for elliptic curve and Edwards curve algorithms. + =head1 COPYRIGHT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/lib/Net/DNS/RR/SVCB.pm new/Net-DNS-1.54/lib/Net/DNS/RR/SVCB.pm --- old/Net-DNS-1.53/lib/Net/DNS/RR/SVCB.pm 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/lib/Net/DNS/RR/SVCB.pm 2026-01-16 13:30:38.000000000 +0100 @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: SVCB.pm 2037 2025-08-18 14:39:32Z willem $)[2]; +our $VERSION = (qw$Id: SVCB.pm 2043 2026-01-14 13:35:59Z willem $)[2]; use base qw(Net::DNS::RR); @@ -112,29 +112,21 @@ $self->svcpriority( shift @argument ); $self->targetname( shift @argument ); - local $SIG{__WARN__} = sub { die @_ }; - while ( my $svcparam = shift @argument ) { - for ($svcparam) { - my @value; - if (/^key\d+$/i) { - push @value, ''; - } elsif (/^key\d+=(.*)$/i) { - local $_ = length($1) ? $1 : shift @argument; - s/^"([^"]*)"$/$1/; # strip enclosing quotes - push @value, $_; - } elsif (/^[^=]+=(.*)$/) { - local $_ = length($1) ? $1 : shift @argument; - die <<"Amen" if /\\092[,\\]/; + while ( local $_ = shift @argument ) { + m/^([^=]+)(=?)(.*)$/; + my $key = $1; + my $val = length($3) ? $3 : $2 ? shift @argument : ''; + if (/^key\d+/) { + $self->$key($val); + } else { + local $_ = $val; + die <<'RIP' if /\\092[,\\]/; SVCB: Please use standard RFC1035 escapes RFC9460 double-escape insanity not implemented -Amen - s/^"([^"]*)"$/$1/; # strip enclosing quotes - s/\\,/\\044/g; # disguise (RFC1035) escaped comma - push @value, split /,/; - } - - m/^([^=]+)/; # extract identifier - $self->$1(@value); +RIP + s/^"([^"]*)"$/$1/s; # strip enclosing quotes + s/\\,/\\044/g; # disguise (RFC1035) escaped comma + $self->$key( split /,/ ); } } return; @@ -188,7 +180,7 @@ sub mandatory { ## mandatory=key1,port,... my ( $self, @value ) = @_; - my @list = map { $keybyname{lc $_} || $_ } map { split /,/ } @value; + my @list = map { $keybyname{lc $_} || $_ } @value; my @keys = map { /(\d+)$/ ? $1 : die( $self->type . qq[: unexpected "$_"] ) } @list; return $self->_SvcParam( 0, _integer16( sort { $a <=> $b } @keys ) ); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/lib/Net/DNS/Text.pm new/Net-DNS-1.54/lib/Net/DNS/Text.pm --- old/Net-DNS-1.53/lib/Net/DNS/Text.pm 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/lib/Net/DNS/Text.pm 2026-01-16 13:30:38.000000000 +0100 @@ -3,7 +3,7 @@ use strict; use warnings; -our $VERSION = (qw$Id: Text.pm 2002 2025-01-07 09:57:46Z willem $)[2]; +our $VERSION = (qw$Id: Text.pm 2043 2026-01-14 13:35:59Z willem $)[2]; =head1 NAME @@ -185,7 +185,7 @@ my @s = map { split '', $_ } @$self; # escape special and ASCII non-printable my $s = _decode_utf8( join '', map { $escape{$_} } @s ); - return $s =~ /[ \t\n\r\f(),;]|^$/ ? qq("$s") : $s; # quote special characters and empty string + return $s =~ /[ \t\n\r\f();]|^$/ ? qq("$s") : $s; # quote special characters and empty string } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/lib/Net/DNS.pm new/Net-DNS-1.54/lib/Net/DNS.pm --- old/Net-DNS-1.53/lib/Net/DNS.pm 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/lib/Net/DNS.pm 2026-01-16 13:30:38.000000000 +0100 @@ -4,9 +4,9 @@ use warnings; our $VERSION; -$VERSION = '1.53'; +$VERSION = '1.54'; $VERSION = eval {$VERSION}; -our $SVNVERSION = (qw$Id: DNS.pm 2041 2025-08-29 12:11:41Z willem $)[2]; +our $SVNVERSION = (qw$Id: DNS.pm 2045 2026-01-16 12:30:12Z willem $)[2]; =head1 NAME @@ -320,7 +320,7 @@ $update = Net::DNS::Update->new( 'example.com' ); $update->push( prereq => nxrrset('example.com. AAAA') ); - $update->push( update => rr_add('example.com. 86400 AAAA 2001::DB8::F00') ); + $update->push( update => rr_add('example.com. 86400 AAAA 2001:DB8::F00') ); =head2 yxrrset diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/t/03-parameters.t new/Net-DNS-1.54/t/03-parameters.t --- old/Net-DNS-1.53/t/03-parameters.t 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/t/03-parameters.t 2026-01-16 13:30:38.000000000 +0100 @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $Id: 03-parameters.t 1921 2023-05-08 18:39:59Z willem $ -*-perl-*- +# $Id: 03-parameters.t 2042 2025-12-24 10:23:11Z willem $ -*-perl-*- # use strict; @@ -26,8 +26,8 @@ foreach ( sort { $a <=> $b } 65535, keys %Net::DNS::Parameters::typebyval ) { my $name = typebyval($_); ## check type conversion functions - my $code = eval { typebyname($name) }; - is( $code, $_, "typebyname($name)" ); + my $code = eval { typebyname($name) }; ## NB: codes may be aliased + is( typebyval($code), $name, "typebyname($name)" ); } is( typebyname('*'), typebyname('ANY'), "typebyname(*)" ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/t/05-DELEG.t new/Net-DNS-1.54/t/05-DELEG.t --- old/Net-DNS-1.53/t/05-DELEG.t 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/t/05-DELEG.t 2026-01-16 13:30:38.000000000 +0100 @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $Id: 05-DELEG.t 2039 2025-08-26 09:01:09Z willem $ -*-perl-*- +# $Id: 05-DELEG.t 2043 2026-01-14 13:35:59Z willem $ -*-perl-*- # use strict; @@ -13,7 +13,7 @@ unless ( $] > 5.018001 ) or ( $] < 5.018 ); -plan tests => 48; +plan tests => 47; my $type = 'DELEG'; @@ -22,64 +22,60 @@ ok( $typecode, "$type RR type code = $typecode" ); -for my $rr ( Net::DNS::RR->new( my $record = 'example. DELEG' ) ) { - ok( $rr, "new DELEG RR: $record" ); - is( $rr->server_ip4, undef, 'server_ip4 undefined' ); - is( $rr->server_ip6, undef, 'server_ip6 undefined' ); - is( $rr->server_name, undef, 'server_name undefined' ); - is( $rr->include_name, undef, 'include_name undefined' ); - is( $rr->rdata, '', 'empty rdata' ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type" ) ) { + ok( $rr, "parse RR: $record" ); + is( $rr->rdata, '', 'empty rdata' ); + is( $rr->mandatory, undef, 'mandatory undefined' ); + is( $rr->server_ipv4, undef, 'server_ipv4 undefined' ); + is( $rr->server_ipv6, undef, 'server_ipv6 undefined' ); + is( $rr->server_name, undef, 'server_name undefined' ); + is( $rr->include_delegi, undef, 'include_delegi undefined' ); ok( $rr->string, 'presentation format string' ); ok( $rr->generic, 'RFC3597 generic format' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. DELEG server-ip4=192.0.2.1,192.0.2.2' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type server-ipv4=192.0.2.1,192.0.2.2" ) ) { + ok( $rr, "parse RR: $record" ); ok( defined $rr->key1(), 'correct parameter key defined' ); - my @list = eval { $rr->server_ip4 }; - ok( scalar @list, '$rr->server_ip4 returns address list' ); - is( $rr->include_name, undef, 'include_name undefined' ); + my @list = eval { $rr->server_ipv4 }; + is( scalar(@list), 2, '$rr->server_ipv4 returns address list' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. DELEG server-ip6=2001:db8::1' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type server-ipv6=2001:db8::1,2001:db8::2" ) ) { + ok( $rr, "parse RR: $record" ); ok( defined $rr->key2(), 'correct parameter key defined' ); - my @list = eval { $rr->server_ip6 }; - ok( scalar @list, '$rr->server_ip6 returns address list' ); - is( $rr->include_name, undef, 'include_name undefined' ); + my @list = eval { $rr->server_ipv6 }; + is( scalar(@list), 2, '$rr->server_ipv6 returns address list' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. DELEG server-name=nameserver.example' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type server-name=nameserver.example" ) ) { + ok( $rr, "parse RR: $record" ); ok( defined $rr->key3(), 'correct parameter key defined' ); - is( $rr->server_name, 'nameserver.example.', '$rr->server_name returns domain name' ); - is( $rr->include_name, undef, 'include_name undefined' ); + is( $rr->server_name, 'nameserver.example.', '$rr->server_name returns domain name' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. DELEG include-name="devolved.example"' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = qq(example. $type include-delegi="devolved.example") ) ) { + ok( $rr, "parse RR: $record" ); ok( defined $rr->key4(), 'correct parameter key defined' ); - is( $rr->include_name, 'devolved.example.', '$rr->include_name returns domain name' ); - is( $rr->server_name, undef, 'server_name undefined' ); - is( $rr->server_ip4, undef, 'server_ip4 undefined' ); - is( $rr->server_ip6, undef, 'server_ip6 undefined' ); + is( $rr->include_delegi, 'devolved.example.', '$rr->include_delegi returns domain name' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. 0 IN DELEG' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. 0 IN $type" ) ) { + ok( $rr, "parse RR: $record" ); is( $rr->rdata, '', 'empty rdata' ); - ok( $rr->server_ip4('192.0.2.1'), 'server_ip4 write access method' ); - ok( $rr->server_ip6('2001:db8::53'), 'server_ip6 write access method' ); - ok( $rr->server_name('nameserver.example.'), 'server_name write access method' ); - ok( $rr->include_name('devolved.example.'), 'include_name write access method' ); - ok( $rr->rdata, 'non-empty rdata' ); - ok( $rr->encode, 'wire-format octet string' ); - ok( !$rr->_parameter( 4, undef ), 'delete include_name parameter' ); - ok( $rr->_parameter( 65500, '!' ), 'unexpected parameter' ); - ok( $rr->string, 'presentation format string' ); - ok( $rr->generic, 'RFC3597 generic format' ); + ok( $rr->mandatory( 1, 2, 3 ), 'mandatory write access method' ); + ok( $rr->server_ipv4('192.0.2.1'), 'server_ipv4 write access method' ); + ok( $rr->server_ipv6('2001:db8::53'), 'server_ipv6 write access method' ); + ok( $rr->server_name('nameserver.example.'), 'server_name write access method' ); + ok( $rr->include_delegi('devolved.example.'), 'include_delegi write access method' ); + ok( $rr->rdata, 'non-empty rdata' ); + ok( $rr->encode, 'wire-format octet string' ); + ok( !$rr->key65500(undef), 'delete parameter' ); + ok( $rr->_parameter( 65500, '!' ), 'unexpected parameter' ); + ok( $rr->string, 'presentation format string' ); + ok( $rr->generic, 'RFC3597 generic format' ); my $encoded = $rr->encode; my $decoded = ref($rr)->decode( \$encoded ); is( $decoded->generic, $rr->generic, 'encode/decode transparent' ); @@ -89,13 +85,16 @@ } -exception( 'duplicated parameter', sub { Net::DNS::RR->new('example. DELEG include-name=x include-name=y') } ); -exception( 'incompatible parameter', sub { Net::DNS::RR->new('example. DELEG include-name=x server-name=y') } ); -exception( 'invalid argument', sub { Net::DNS::RR->new('example. DELEG include-name=.') } ); -exception( 'invalid argument', sub { Net::DNS::RR->new('example. DELEG server-name=.') } ); -exception( 'unexpected arguments', sub { Net::DNS::RR->new('example. DELEG server-name=x,y') } ); -exception( 'unsupported parameter', sub { Net::DNS::RR->new('example. DELEG')->key65500('') } ); -exception( 'unrecognised parameter', sub { Net::DNS::RR->new('example. DELEG bogus') } ); +exception( 'duplicated parameter', sub { Net::DNS::RR->new("example. $type include-delegi=x include-delegi=y") } ); +exception( 'incompatible parameter', sub { Net::DNS::RR->new("example. $type include-delegi=x server-name=y") } ); +exception( 'invalid argument', sub { Net::DNS::RR->new("example. $type include-delegi=.") } ); +exception( 'invalid argument', sub { Net::DNS::RR->new("example. $type server-name=.") } ); +exception( 'unexpected argument', sub { Net::DNS::RR->new("example. $type")->key65500(qw(X Y)) } ); +exception( 'unrecognised parameter', sub { Net::DNS::RR->new("example. $type bogus") } ); +exception( 'mandatory key0 in list', sub { Net::DNS::RR->new("example. $type mandatory=server-ipv4,key0") } ); +exception( 'mandatory key repeated', sub { Net::DNS::RR->new("example. $type mandatory=key1,key1") } ); +exception( 'mandatory key required', sub { Net::DNS::RR->new("example. $type mandatory=key2,key3 key2=X") } ); +exception( 'mandatory key unknown', sub { Net::DNS::RR->new("example. $type mandatory=bogus") } ); exit; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/t/05-DNSKEY.t new/Net-DNS-1.54/t/05-DNSKEY.t --- old/Net-DNS-1.53/t/05-DNSKEY.t 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/t/05-DNSKEY.t 2026-01-16 13:30:38.000000000 +0100 @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $Id: 05-DNSKEY.t 1910 2023-03-30 19:16:30Z willem $ -*-perl-*- +# $Id: 05-DNSKEY.t 2042 2025-12-24 10:23:11Z willem $ -*-perl-*- # use strict; @@ -19,7 +19,7 @@ exit; } -plan tests => 49; +plan tests => 53; my $name = 'DNSKEY.example'; @@ -87,6 +87,7 @@ toggle( $rr, 'zone', 1, 0, 1, 0 ); toggle( $rr, 'revoke', 0, 1, 0, 1 ); + toggle( $rr, 'adt', 1, 0, 1, 0 ); toggle( $rr, 'sep', 1, 0, 1, 0 ); my $class = ref($rr); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Net-DNS-1.53/t/05-SVCB.t new/Net-DNS-1.54/t/05-SVCB.t --- old/Net-DNS-1.53/t/05-SVCB.t 2025-08-29 14:17:53.000000000 +0200 +++ new/Net-DNS-1.54/t/05-SVCB.t 2026-01-16 13:30:38.000000000 +0100 @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $Id: 05-SVCB.t 2035 2025-08-14 11:49:15Z willem $ -*-perl-*- +# $Id: 05-SVCB.t 2043 2026-01-14 13:35:59Z willem $ -*-perl-*- # use strict; @@ -25,8 +25,8 @@ ok( $typecode, "$type RR type code = $typecode" ); -for my $rr ( Net::DNS::RR->new( my $record = 'example. SVCB' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type" ) ) { + ok( $rr, "parse RR: $record" ); foreach my $parameter ( qw(SvcPriority TargetName), @keys, @also ) { is( $rr->$parameter, undef, "$parameter undefined" ); } @@ -34,77 +34,77 @@ ok( $rr->string, 'presentation format string' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. SVCB 0 target.example.' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type 0 target.example." ) ) { + ok( $rr, "parse RR: $record" ); ok( $rr->TargetName, 'TargetName defined' ); is( $rr->SvcPriority, 0, 'SvcPriority zero' ); ok( $rr->string, 'presentation format string' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. SVCB 1 target.example.' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type 1 target.example." ) ) { + ok( $rr, "parse RR: $record" ); ok( $rr->TargetName, 'TargetName defined' ); is( $rr->SvcPriority, 1, 'SvcPriority non-zero' ); ok( $rr->string, 'presentation format string' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. SVCB 1 .' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type 1 ." ) ) { + ok( $rr, "parse RR: $record" ); is( $rr->TargetName, $rr->owner, 'TargetName defined' ); ok( $rr->string, 'presentation format string' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. SVCB 1 . mandatory=alpn alpn=h2,h3' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type 1 . mandatory=alpn alpn=h2,h3" ) ) { + ok( $rr, "parse RR: $record" ); ok( defined $rr->key0(), 'correct SvcParameter key defined' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. SVCB 1 . alpn=h2,h3 no-default-alpn' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type 1 . alpn=h2,h3 no-default-alpn" ) ) { + ok( $rr, "parse RR: $record" ); ok( defined $rr->key1(), 'correct SvcParameter key defined' ); ok( defined $rr->no_default_alpn, '$rr->no_default_alpn true' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. SVCB 1 . port=53' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type 1 . port=53" ) ) { + ok( $rr, "parse RR: $record" ); ok( defined $rr->key3(), 'correct SvcParameter key defined' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. SVCB 1 . ipv4hint=192.0.2.1' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type 1 . ipv4hint=192.0.2.1" ) ) { + ok( $rr, "parse RR: $record" ); ok( defined $rr->key4(), 'correct SvcParameter key defined' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. SVCB 1 . ech=Base64format' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type 1 . ech=Base64format" ) ) { + ok( $rr, "parse RR: $record" ); ok( defined $rr->key5(), 'correct SvcParameter key defined' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. SVCB 1 . ipv6hint=192.0.2.1' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type 1 . ipv6hint=192.0.2.1" ) ) { + ok( $rr, "parse RR: $record" ); ok( defined $rr->key6(), 'correct SvcParameter key defined' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. SVCB 1 . dohpath=/dns-query{?dns}' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type 1 . dohpath=/dns-query{?dns}" ) ) { + ok( $rr, "parse RR: $record" ); ok( defined $rr->key7(), 'correct SvcParameter key defined' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. SVCB 1 . ohttp=0 ohttp=1' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type 1 . ohttp=0 ohttp=1" ) ) { + ok( $rr, "parse RR: $record" ); ok( defined $rr->key8(), 'correct SvcParameter key defined' ); } -for my $rr ( Net::DNS::RR->new( my $record = 'example. SVCB 1 . tls-supported-groups=29,23' ) ) { - ok( $rr, "new DELEG RR: $record" ); +for my $rr ( Net::DNS::RR->new( my $record = "example. $type 1 . tls-supported-groups=29,23" ) ) { + ok( $rr, "parse RR: $record" ); ok( defined $rr->key9(), 'correct SvcParameter key defined' ); } -Net::DNS::RR->new(<<'END')->print; -example.com. SVCB 16 foo.example.org. ( mandatory=alpn alpn=h2,h3-19 +Net::DNS::RR->new(<<"END")->print; +example.com. $type 16 foo.example.org. ( mandatory=alpn alpn=h2,h3-19 no-default-alpn port=1234 ipv4hint=192.0.2.1 ech=AEP+DQA/BAAgACCW2/dfOBZAtQU55/py/BlhdRdaauPAkrERAUwppoeSEgAEAAEAAQAQY2QxLnRlc3QuZGVmby5pZQAA ipv6hint=2001:db8::1 @@ -115,7 +115,7 @@ END -for my $rr ( Net::DNS::RR->new('example. SVCB 1 . ') ) { +for my $rr ( Net::DNS::RR->new("example. $type 1 . ") ) { my $l0 = length $rr->encode; $rr->port(53); is( length( $rr->encode ), $l0 + 6, 'insert SvcParams key' ); ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.0emTtB/_old 2026-01-26 10:56:59.860659887 +0100 +++ /var/tmp/diff_new_pack.0emTtB/_new 2026-01-26 10:56:59.868660222 +0100 @@ -1,6 +1,6 @@ -mtime: 1759844047 -commit: aace4744ba00af87361c382e970c828f08ec8c814c67b7cd926fb3ba85432843 +mtime: 1768628337 +commit: 0a882a98b9b11b76d79dc077d120ddf7e7580ae29d1676a13f78d685ecc763a3 url: https://src.opensuse.org/perl/perl-Net-DNS.git -revision: aace4744ba00af87361c382e970c828f08ec8c814c67b7cd926fb3ba85432843 +revision: 0a882a98b9b11b76d79dc077d120ddf7e7580ae29d1676a13f78d685ecc763a3 projectscmsync: https://src.opensuse.org/perl/_ObsPrj ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-01-22 09:30:27.000000000 +0100 @@ -0,0 +1 @@ +.osc
