zone-ls.pl
changeset 43 7e472c559b36
parent 41 3c10c45c6a59
child 44 8b487ebf8d99
equal deleted inserted replaced
38:d50f6874b7ab 43:7e472c559b36
       
     1 #! /usr/bin/perl
       
     2 
       
     3 use strict;
       
     4 use warnings;
       
     5 use File::Basename;
       
     6 use FindBin;
       
     7 
       
     8 # liest die Konfiguration ein
       
     9 my @configs = ("$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf");
       
    10 my %config;
       
    11 
       
    12 for (grep { -f } @configs) {
       
    13     open(CONFIG, $_) or die "Can't open $_: $!\n";
       
    14 }
       
    15 
       
    16 unless (seek(CONFIG, 0, 0)) {
       
    17     die "Can't open config (searched: @configs)\n";
       
    18 }
       
    19 
       
    20 while (<CONFIG>) {
       
    21     chomp;
       
    22     s/#.*//;
       
    23     s/\t//g;
       
    24     s/\s//g;
       
    25     next unless length;
       
    26     my ($cname, $ccont) = split(/\s*=\s*/, $_, 2);
       
    27     $config{$cname} = $ccont;
       
    28 }
       
    29 close(CONFIG);
       
    30 
       
    31 my $master_dir = $config{master_dir};
       
    32 my $zone;
       
    33 my ($info_zsk, $info_ksk, $info_kc, $info_end, $info_status);
       
    34 
       
    35 unless (-d $master_dir and -r $master_dir) {
       
    36     die "$master_dir: $!\n";
       
    37 }
       
    38 
       
    39 printf "%-35s %-8s %1s/%1s %3s %7s\n", "Domain", "Status", "ZSK", "KSK",
       
    40   "Used", "Sig-end";
       
    41 
       
    42 for my $dir (glob "$master_dir/*") {
       
    43 
       
    44     $zone = basename($dir);
       
    45 
       
    46     # prueft mit dig nach der zone
       
    47     $info_status = "OK";
       
    48     for (`dig \@localhost $zone`) {
       
    49         if (/root-servers/) {
       
    50             $info_status = "FAILED";
       
    51             last;
       
    52         }
       
    53     }
       
    54 
       
    55     if (not -f "$dir/.index.zsk") {
       
    56         $info_zsk = $info_ksk = $info_kc = 0;
       
    57         $info_end = "-";
       
    58         next;
       
    59     }
       
    60 
       
    61     # prueft wie viele zsks genutzt werden
       
    62     close(FILE);
       
    63     open(FILE, $_ = "<$dir/.index.zsk") or die "Can't open $_: $!\n";
       
    64     () = <FILE>;
       
    65     $info_zsk = $.;
       
    66 
       
    67     # prueft wie viele ksks genutzt werden
       
    68     close(FILE);
       
    69     open(FILE, $_ = "<$dir/.index.ksk") or die "Can't open $_: $!\n";
       
    70     () = <FILE>;
       
    71     $info_ksk = $.;
       
    72 
       
    73     # prueft wie oft die schluessel zum signieren genutzt wurden
       
    74     open(FILE, $_ = "<$dir/.keycounter") or die "Can't open $_: $!\n";
       
    75     chomp($info_kc = <FILE>);
       
    76 
       
    77     # prueft das ablaufdatum
       
    78     if (!-f "$dir/$zone.signed") {
       
    79         $info_end = "-";
       
    80         next;
       
    81     }
       
    82 
       
    83     open(FILE, $_ = "<$dir/$zone.signed") or die "Can't open $_: $!\n";
       
    84     while (<FILE>) {
       
    85         $info_end = "$+{day}.$+{mon}.$+{year} $+{hour}:$+{min}"
       
    86           if /RSIG.*SOA.*\s
       
    87 			(?<year>\d\d\d\d)
       
    88 			(?<mon>\d\d)
       
    89 			(?<day>\d\d)
       
    90 			(?<hour>\d\d)
       
    91 			(?<min>\d\d)\d+\s\(/ix;
       
    92     }
       
    93 
       
    94 }
       
    95 continue {
       
    96     printf "%-35s %-8s %1d/%1d %5d %19s\n", $zone, $info_status, $info_zsk,
       
    97       $info_ksk, $info_kc,
       
    98       $info_end;
       
    99 }
       
   100