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