diff --git a/regress/Nsd.pm b/regress/Nsd.pm index 2562dfe..214146a 100644 --- a/regress/Nsd.pm +++ b/regress/Nsd.pm @@ -21,6 +21,7 @@ package Nsd; use parent 'Proc'; use Carp; use File::Basename; +use Socket; use Sys::Hostname; sub new { @@ -44,6 +45,14 @@ sub new { print $fh "# test $test\n"; print $fh "server:\n"; print $fh " chroot: \"\"\n"; + if ($self->{listen}{domain} && $self->{listen}{domain} == AF_INET) { + print $fh " do-ip4: yes\n"; + print $fh " do-ip6: no\n"; + } + if ($self->{listen}{domain} && $self->{listen}{domain} == AF_INET6) { + print $fh " do-ip4: no\n"; + print $fh " do-ip6: yes\n"; + } print $fh " ip-address: $self->{addr}\n"; print $fh " pidfile: \"\"\n"; print $fh " port: $self->{port}\n"; diff --git a/regress/args-nsd.pl b/regress/args-nsd.pl index 99ebeee..2536174 100644 --- a/regress/args-nsd.pl +++ b/regress/args-nsd.pl @@ -6,22 +6,30 @@ # Read IP addresses from pf table with pfctl. # Check that pfresolved added IPv4 and IPv6 addresses. # Check that pf table contains all IPv4 and IPv6 addresses. +# Check that IPv4 127.0.0.1 socket was used. use strict; use warnings; +use Socket; our %args = ( nsd => { + listen => { domain => AF_INET, addr => "127.0.0.1" }, record_list => [ "foo IN A 192.0.2.1", "bar IN AAAA 2001:DB8::1", "foobar IN A 192.0.2.2", "foobar IN AAAA 2001:DB8::2", ], + loggrep => { + qr/listen on ip-address 127.0.0.1\@\d+ \(udp\)/ => 1, + qr/listen on ip-address [0-9A-Fa-f:]+\@\d+ / => 0, + }, }, pfresolved => { address_list => [ map { "$_.regress." } qw(foo bar foobar) ], loggrep => { + qr/-r 127.0.0.1\@\d+/ => 1, qr{added: 192.0.2.1/32,} => 1, qr{added: 2001:db8::1/128,} => 1, qr{added: 192.0.2.2/32,} => 1, diff --git a/regress/args-nsd6.pl b/regress/args-nsd6.pl new file mode 100644 index 0000000..4b68835 --- /dev/null +++ b/regress/args-nsd6.pl @@ -0,0 +1,48 @@ +# Create zone file with A and AAAA records in zone regress. +# Start nsd with zone file listening on ::1. +# Write hosts of regress zone into pfresolved config. +# Start pfresolved with nsd as resolver. +# Wait until pfresolved creates table regress-pfresolved. +# Read IP addresses from pf table with pfctl. +# Check that pfresolved added IPv4 and IPv6 addresses. +# Check that pf table contains all IPv4 and IPv6 addresses. +# Check that IPv6 ::1 socket was used. + +use strict; +use warnings; +use Socket; + +our %args = ( + nsd => { + listen => { domain => AF_INET6, addr => "::1" }, + record_list => [ + "foo IN A 192.0.2.1", + "bar IN AAAA 2001:DB8::1", + "foobar IN A 192.0.2.2", + "foobar IN AAAA 2001:DB8::2", + ], + loggrep => { + qr/listen on ip-address [0-9.]\@\d+ / => 0, + qr/listen on ip-address ::1\@\d+ \(udp\) / => 1, + }, + }, + pfresolved => { + address_list => [ map { "$_.regress." } qw(foo bar foobar) ], + loggrep => { + qr/-r ::1\@\d+/ => 1, + qr{added: 192.0.2.1/32,} => 1, + qr{added: 2001:db8::1/128,} => 1, + qr{added: 192.0.2.2/32,} => 1, + qr{added: 2001:db8::2/128,} => 1, + }, + }, + pfctl => { + updated => [4, 1], + loggrep => { + qr/^ 192.0.2.[12]$/ => 2, + qr/^ 2001:db8::[12]$/ => 2, + }, + }, +); + +1;