zone-ls
changeset 46 de6761ce0d5b
parent 45 5dc44dc86f61
parent 43 7e472c559b36
child 47 31f29baca131
equal deleted inserted replaced
45:5dc44dc86f61 46:de6761ce0d5b
     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