]> mj.ucw.cz Git - nsc-5.git/blob - bin/chkdel
Newer versions of GNU m4 require `-D' before file arguments.
[nsc-5.git] / bin / chkdel
1 #!/usr/bin/perl -w
2 #
3 #       ChkDel -- A simple script for checking of domain delegations
4 #
5 #       (c) 1999--2003 Martin Mares <mj@ucw.cz>
6 #
7
8 use strict;
9 use warnings;
10
11 # The canonical name of our server
12 my $our_server = "jabberwock.ucw.cz";
13
14 # Any recursive nameserver outside our network
15 my $outside_ns = "ns.gts.cz";
16
17 use Net::DNS::Resolver;
18
19 my $res = new Net::DNS::Resolver;
20 $res->nameservers($outside_ns);
21 $res->defnames(0);
22 $res->dnsrch(0);
23 $res->debug(0);
24 $res->recurse(1);
25
26 my $d = @ARGV ? $ARGV[0] : 'cf/domains';
27 my @list = `m4 m4/list.m4 $d`;
28
29 foreach $_ (@list) {
30         chomp;
31         my $dom = $_;
32         $dom eq "localhost" && next;
33         #print "$dom\n";
34         my $q = $res->send($dom, "NS", "IN") or do {
35                 print "$dom: ", $res->errorstring, "\n";
36                 next;
37         };
38         my $hdr = $q->header;
39         $hdr->tc and do {
40                 print "$dom: Truncated response\n";
41                 next;
42         };
43         my $rc = $hdr->rcode;
44         $rc eq "NXDOMAIN" and do {
45                 print "$dom: Doesn't exist\n";
46                 next;
47         };
48         $rc eq "NOERROR" or do {
49                 print "$dom: Error $rc\n";
50                 next;
51         };
52         $hdr->ancount or do {
53                 print "$dom: Empty answer\n";
54                 next;
55         };
56         my $f = 0;
57         foreach my $r ($q->answer) {
58                 if ($r->class eq "IN" && $r->type eq "NS" && $r->nsdname eq $our_server) {
59                         $f = 1;
60                         last;
61                 }
62         }
63         $f or do {
64                 print "$dom: Lame delegation\n";
65                 next;
66         };
67 }