} elsif ($qname eq "net" && $qtype eq "NS") {
$packet->header->aa(1);
$packet->push("answer", new Net::DNS::RR("net 300 NS a.root-servers.nil."));
- } elsif ($qname eq "example.net" && $qtype eq "NS") {
+ } elsif ($qname =~ /\.example\.net/ || $qname =~ /^example\.net/) {
$packet->header->aa(1);
- $packet->push("answer", new Net::DNS::RR("example.net 300 NS a.root-servers.nil."));
- } elsif ($qname eq "badcname.example.net" ||
- $qname eq "goodcname.example.net") {
- # Data for CNAME/DNAME filtering. We need to make one-level
- # delegation to avoid automatic acceptance for subdomain aliases
- $packet->push("authority", new Net::DNS::RR("example.net 300 NS ns.example.net"));
+ $packet->push("authority", new Net::DNS::RR("example.net 300 NS ns.example.net."));
$packet->push("additional", new Net::DNS::RR("ns.example.net 300 A 10.53.0.3"));
- } elsif ($qname =~ /^nodata\.example\.net$/i) {
- $packet->header->aa(1);
- } elsif ($qname =~ /^nxdomain\.example\.net$/i) {
- $packet->header->aa(1);
- $packet->header->rcode(NXDOMAIN);
} elsif ($qname =~ /sub\.example\.org/) {
# Data for CNAME/DNAME filtering. The final answers are
# expected to be accepted regardless of the filter setting.
$packet->push("answer",
new Net::DNS::RR($qname .
" 300 CNAME goodcname.example.org"));
+ } elsif ($qname =~ /^nodata\.example\.net$/i) {
+ $packet->header->aa(1);
+ } elsif ($qname =~ /^nxdomain\.example\.net$/i) {
+ $packet->header->aa(1);
+ $packet->header->rcode(NXDOMAIN);
} elsif ($qname eq "cname.sub.example.org") {
$packet->push("answer",
new Net::DNS::RR($qname .
} elsif ($qname eq "www.ok.sub.example.org") {
$packet->push("answer",
new Net::DNS::RR($qname . " 300 A 192.0.2.1"));
+ } elsif ($qname eq "ns.example.net") {
+ $packet->push("answer",
+ new Net::DNS::RR($qname .
+ " 300 A 10.53.0.3"));
} else {
$packet->push("answer", new Net::DNS::RR("www.example.com 300 A 1.2.3.4"));
}
sub handleUDP {
my ($buf) = @_;
- my $request;
+ my $packet;
if ($Net::DNS::VERSION > 0.68) {
- $request = new Net::DNS::Packet(\$buf, 0);
+ $packet = new Net::DNS::Packet(\$buf, 0);
$@ and die $@;
} else {
my $err;
- ($request, $err) = new Net::DNS::Packet(\$buf, 0);
+ ($packet, $err) = new Net::DNS::Packet(\$buf, 0);
$err and die $err;
}
- my @questions = $request->question;
+ my @questions = $packet->question;
my $qname = $questions[0]->qname;
my $qtype = $questions[0]->qtype;
my $qclass = $questions[0]->qclass;
- my $id = $request->header->id;
-
- my $packet = new Net::DNS::Packet();
+ my $id = $packet->header->id;
$packet->header->qr(1);
$packet->header->aa(0);
- $packet->header->id($id);
+ $packet->header->tc(0);
if ($qname eq "truncated.no-questions") {
+ $packet->pop("question");
$packet->header->tc(1);
- } else {
- $packet->header->tc(0);
+ } elsif ($qname eq "not-truncated.no-questions") {
+ $packet->pop("question");
+ } elsif ($qname eq "no-questions" && $qtype eq "NS") {
+ $packet->header->aa(1);
+ $packet->push("answer", new Net::DNS::RR("no-questions. 300 NS ns.no-questions"));
+ } elsif ($qname eq "ns.no-questions" && $qtype eq "A") {
+ $packet->header->aa(1);
+ $packet->push("answer", new Net::DNS::RR("ns.no-questions. 300 A 10.53.0.8"));
}
# Net::DNS versions < 0.68 insert an ./ANY RR into the QUESTION section