From 2a761acedf6091a398738452bac50c0288b8ec20 Mon Sep 17 00:00:00 2001 From: Alexandre Pion Date: Wed, 28 Sep 2022 12:23:17 +0200 Subject: [PATCH 1/6] Replace tabulation with spaces --- lib/Zonemaster/Engine/Nameserver.pm | 10 +++++----- lib/Zonemaster/Engine/Packet.pm | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/Zonemaster/Engine/Nameserver.pm b/lib/Zonemaster/Engine/Nameserver.pm index c8e55417f..7fb181091 100644 --- a/lib/Zonemaster/Engine/Nameserver.pm +++ b/lib/Zonemaster/Engine/Nameserver.pm @@ -461,19 +461,19 @@ sub _query { $pkt->set_edns_present(); $pkt->edns_version($href->{edns_details}{version}); } - if ( defined $href->{edns_details} and defined $href->{edns_details}{z} ) { + if ( defined $href->{edns_details} and defined $href->{edns_details}{z} ) { $pkt->set_edns_present(); $pkt->edns_z($href->{edns_details}{z}); } - if ( defined $href->{edns_details} and defined $href->{edns_details}{do} ) { + if ( defined $href->{edns_details} and defined $href->{edns_details}{do} ) { $pkt->set_edns_present(); $pkt->do($href->{edns_details}{do}); } - if ( defined $href->{edns_details} and defined $href->{edns_details}{udp_size} ) { + if ( defined $href->{edns_details} and defined $href->{edns_details}{udp_size} ) { $pkt->set_edns_present(); $pkt->edns_size($href->{edns_details}{udp_size}); } - if ( defined $href->{edns_details} and defined $href->{edns_details}{extended_rcode} ) { + if ( defined $href->{edns_details} and defined $href->{edns_details}{extended_rcode} ) { $pkt->set_edns_present(); $pkt->edns_rcode($href->{edns_details}{extended_rcode}); } @@ -481,7 +481,7 @@ sub _query { $pkt->set_edns_present(); $pkt->edns_data($href->{edns_details}{data}); } - $res = eval { $self->dns->query_with_pkt( $pkt ) }; + $res = eval { $self->dns->query_with_pkt( $pkt ) }; } else { $res = eval { $self->dns->query( "$name", $type, $href->{class} ) }; diff --git a/lib/Zonemaster/Engine/Packet.pm b/lib/Zonemaster/Engine/Packet.pm index a03f7b066..bb353698e 100644 --- a/lib/Zonemaster/Engine/Packet.pm +++ b/lib/Zonemaster/Engine/Packet.pm @@ -18,7 +18,7 @@ has 'packet' => ( rcode aa ra - tc + tc question answer authority From a0f90d08a135529c813f312addcf6490a6a68607 Mon Sep 17 00:00:00 2001 From: Alexandre Pion Date: Wed, 28 Sep 2022 12:23:50 +0200 Subject: [PATCH 2/6] Refactoring: use the "query_with_pkt()" method --- lib/Zonemaster/Engine/Nameserver.pm | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/Zonemaster/Engine/Nameserver.pm b/lib/Zonemaster/Engine/Nameserver.pm index 7fb181091..c4d709de9 100644 --- a/lib/Zonemaster/Engine/Nameserver.pm +++ b/lib/Zonemaster/Engine/Nameserver.pm @@ -455,8 +455,8 @@ sub _query { ); } else { + my $pkt = Zonemaster::LDNS::Packet->new("$name", $type, $href->{class} ); if ( $edns_special_case ) { - my $pkt = Zonemaster::LDNS::Packet->new("$name", $type, $href->{class} ); if ( defined $href->{edns_details} and defined $href->{edns_details}{version} and $href->{edns_details}{version} != 0 ) { $pkt->set_edns_present(); $pkt->edns_version($href->{edns_details}{version}); @@ -481,11 +481,10 @@ sub _query { $pkt->set_edns_present(); $pkt->edns_data($href->{edns_details}{data}); } - $res = eval { $self->dns->query_with_pkt( $pkt ) }; - } - else { - $res = eval { $self->dns->query( "$name", $type, $href->{class} ) }; } + + $res = eval { $self->dns->query_with_pkt( $pkt ) }; + if ( $@ ) { my $msg = "$@"; my $trailing_info = " at ".__FILE__; From dac921fa43281aec6f454b1f01e1c986e1aa6072 Mon Sep 17 00:00:00 2001 From: Alexandre Pion Date: Wed, 28 Sep 2022 12:12:01 +0200 Subject: [PATCH 3/6] Display libldns version on DEBUG --- lib/Zonemaster/Engine/Test.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Zonemaster/Engine/Test.pm b/lib/Zonemaster/Engine/Test.pm index db4c337a8..4338ce2c4 100644 --- a/lib/Zonemaster/Engine/Test.pm +++ b/lib/Zonemaster/Engine/Test.pm @@ -42,6 +42,7 @@ BEGIN { sub _log_versions { info( GLOBAL_VERSION => { version => Zonemaster::Engine->VERSION } ); + info( DEPENDENCY_VERSION => { name => 'libldns', version => Zonemaster::LDNS::lib_version() } ); info( DEPENDENCY_VERSION => { name => 'Zonemaster::LDNS', version => $Zonemaster::LDNS::VERSION } ); info( DEPENDENCY_VERSION => { name => 'IO::Socket::INET6', version => $IO::Socket::INET6::VERSION } ); info( DEPENDENCY_VERSION => { name => 'Moose', version => $Moose::VERSION } ); From 194fa0050a8fa3cc711de2c93fd36fafaa79ee19 Mon Sep 17 00:00:00 2001 From: Alexandre Pion Date: Wed, 28 Sep 2022 12:28:27 +0200 Subject: [PATCH 4/6] Always send EDNS option NSID --- lib/Zonemaster/Engine/Nameserver.pm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/Zonemaster/Engine/Nameserver.pm b/lib/Zonemaster/Engine/Nameserver.pm index c4d709de9..f9c9a3e9e 100644 --- a/lib/Zonemaster/Engine/Nameserver.pm +++ b/lib/Zonemaster/Engine/Nameserver.pm @@ -483,6 +483,8 @@ sub _query { } } + eval { $pkt->nsid; }; + $res = eval { $self->dns->query_with_pkt( $pkt ) }; if ( $@ ) { From fd3e0bd57737f7abb70cf4cca1e5d359cbea7472 Mon Sep 17 00:00:00 2001 From: Alexandre Pion Date: Wed, 28 Sep 2022 12:42:14 +0200 Subject: [PATCH 5/6] Store NSID value within Nameserver object --- lib/Zonemaster/Engine/Nameserver.pm | 6 ++++++ lib/Zonemaster/Engine/Packet.pm | 1 + 2 files changed, 7 insertions(+) diff --git a/lib/Zonemaster/Engine/Nameserver.pm b/lib/Zonemaster/Engine/Nameserver.pm index f9c9a3e9e..b5a8cc471 100644 --- a/lib/Zonemaster/Engine/Nameserver.pm +++ b/lib/Zonemaster/Engine/Nameserver.pm @@ -32,6 +32,7 @@ use overload has 'name' => ( is => 'ro' ); has 'address' => ( is => 'ro' ); +has 'nsid' => ( is => 'rw' ); has 'dns' => ( is => 'ro' ); has 'cache' => ( is => 'ro' ); @@ -340,6 +341,8 @@ sub query { Zonemaster::Engine->logger->add( CACHED_RETURN => { packet => ( $p ? $p->string : 'undef' ) } ); + eval { $self->{nsid} = $p->get_nsid(); }; + return $p; } ## end sub query @@ -531,6 +534,9 @@ sub _query { sub string { my ( $self ) = @_; + if ( defined $self->nsid ) { + return $self->name->string . q{/} . $self->address->short . q{/} . $self->nsid; + } return $self->name->string . q{/} . $self->address->short; } diff --git a/lib/Zonemaster/Engine/Packet.pm b/lib/Zonemaster/Engine/Packet.pm index bb353698e..f98cb1467 100644 --- a/lib/Zonemaster/Engine/Packet.pm +++ b/lib/Zonemaster/Engine/Packet.pm @@ -39,6 +39,7 @@ has 'packet' => ( querytime do opcode + get_nsid ) ] ); From 4bf5b9e453d33ae3a7da1440a536a15d2c606bb6 Mon Sep 17 00:00:00 2001 From: Alexandre Pion Date: Tue, 4 Oct 2022 19:38:49 +0200 Subject: [PATCH 6/6] Make NSID an option --- lib/Zonemaster/Engine/Nameserver.pm | 8 ++++++-- lib/Zonemaster/Engine/Profile.pm | 7 +++++++ share/profile.json | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/Zonemaster/Engine/Nameserver.pm b/lib/Zonemaster/Engine/Nameserver.pm index b5a8cc471..4bf73d9ce 100644 --- a/lib/Zonemaster/Engine/Nameserver.pm +++ b/lib/Zonemaster/Engine/Nameserver.pm @@ -341,7 +341,9 @@ sub query { Zonemaster::Engine->logger->add( CACHED_RETURN => { packet => ( $p ? $p->string : 'undef' ) } ); - eval { $self->{nsid} = $p->get_nsid(); }; + if ( Zonemaster::Engine::Profile->effective->get( q{nsid} ) ) { + eval { $self->{nsid} = $p->get_nsid(); }; + } return $p; } ## end sub query @@ -486,7 +488,9 @@ sub _query { } } - eval { $pkt->nsid; }; + if ( Zonemaster::Engine::Profile->effective->get( q{nsid} ) ) { + eval { $pkt->nsid; }; + } $res = eval { $self->dns->query_with_pkt( $pkt ) }; diff --git a/lib/Zonemaster/Engine/Profile.pm b/lib/Zonemaster/Engine/Profile.pm index 9efea6cbb..3ce04748f 100644 --- a/lib/Zonemaster/Engine/Profile.pm +++ b/lib/Zonemaster/Engine/Profile.pm @@ -72,6 +72,9 @@ my %profile_properties_details = ( q{no_network} => { type => q{Bool} }, + q{nsid} => { + type => q{Bool} + }, q{asnroots} => { type => q{ArrayRef}, test => sub { @@ -647,6 +650,10 @@ A boolean. If true, network traffic is forbidden. Default false. Use when you want to be sure that any data is only taken from a preloaded cache. +=head2 nsid + +A boolean. If true, sets the EDNS option NSID in queries. Default false. + =head2 asnroots (DEPRECATED) An arrayref of domain names. Default C<["asnlookup.zonemaster.net", diff --git a/share/profile.json b/share/profile.json index 105a870c1..2c3496ae7 100644 --- a/share/profile.json +++ b/share/profile.json @@ -11,6 +11,7 @@ "ipv6" : true }, "no_network" : false, + "nsid": true, "resolver" : { "defaults" : { "debug" : false,