]> mj.ucw.cz Git - nsc-5.git/blob - bin/chkdel
Added chkdel.
[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 Martin Mares <mj@ucw.cz>
6 #
7
8 use lib "/home/mj/perl/lib/site_perl";
9
10 $our_server = "server1.gts.cz";
11 $outside_ns = "ns.eunet.cz";
12
13 use Net::DNS::Resolver;
14
15 $res = new Net::DNS::Resolver;
16 $res->nameservers($outside_ns);
17 $res->defnames(0);
18 $res->dnsrch(0);
19 $res->debug(0);
20 $res->recurse(1);
21
22 @list = @ARGV ? `cat $ARGV[0]` : `m4 cf/domains`;
23
24 foreach $_ (@list) {
25         if (/^PRIMARY\((\S+)\)/) { $dom = $1; }
26         elsif (/^SECONDARY\((\S+)\s*,/) { $dom = $1; }
27         else { next; }
28         $dom eq "localhost" && next;
29 #       print "$dom\n";
30         my $q = $res->send($dom, "NS", "IN") or do {
31                 print "$dom: ", $res->errorstring, "\n";
32                 next;
33         };
34         my $hdr = $q->header;
35         $hdr->tc and do {
36                 print "$dom: Truncated response\n";
37                 next;
38         };
39         my $rc = $hdr->rcode;
40         $rc eq "NXDOMAIN" and do {
41                 print "$dom: Doesn't exist\n";
42                 next;
43         };
44         $rc eq "NOERROR" or do {
45                 print "$dom: Error $rc\n";
46                 next;
47         };
48         $hdr->ancount or do {
49                 print "$dom: Empty answer\n";
50                 next;
51         };
52         $f = 0;
53         foreach my $r ($q->answer) {
54                 if ($r->class eq "IN" && $r->type eq "NS" && $r->nsdname eq $our_server) {
55                         $f = 1;
56                         last;
57                 }
58         }
59         $f or do {
60                 print "$dom: Lame delegation\n";
61                 next;
62         };
63 }