diff -r d50f6874b7ab -r 7e472c559b36 zone-ls.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zone-ls.pl Tue Dec 21 14:03:18 2010 +0100 @@ -0,0 +1,100 @@ +#! /usr/bin/perl + +use strict; +use warnings; +use File::Basename; +use FindBin; + +# liest die Konfiguration ein +my @configs = ("$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf"); +my %config; + +for (grep { -f } @configs) { + open(CONFIG, $_) or die "Can't open $_: $!\n"; +} + +unless (seek(CONFIG, 0, 0)) { + die "Can't open config (searched: @configs)\n"; +} + +while () { + chomp; + s/#.*//; + s/\t//g; + s/\s//g; + next unless length; + my ($cname, $ccont) = split(/\s*=\s*/, $_, 2); + $config{$cname} = $ccont; +} +close(CONFIG); + +my $master_dir = $config{master_dir}; +my $zone; +my ($info_zsk, $info_ksk, $info_kc, $info_end, $info_status); + +unless (-d $master_dir and -r $master_dir) { + die "$master_dir: $!\n"; +} + +printf "%-35s %-8s %1s/%1s %3s %7s\n", "Domain", "Status", "ZSK", "KSK", + "Used", "Sig-end"; + +for my $dir (glob "$master_dir/*") { + + $zone = basename($dir); + + # prueft mit dig nach der zone + $info_status = "OK"; + for (`dig \@localhost $zone`) { + if (/root-servers/) { + $info_status = "FAILED"; + last; + } + } + + if (not -f "$dir/.index.zsk") { + $info_zsk = $info_ksk = $info_kc = 0; + $info_end = "-"; + next; + } + + # prueft wie viele zsks genutzt werden + close(FILE); + open(FILE, $_ = "<$dir/.index.zsk") or die "Can't open $_: $!\n"; + () = ; + $info_zsk = $.; + + # prueft wie viele ksks genutzt werden + close(FILE); + open(FILE, $_ = "<$dir/.index.ksk") or die "Can't open $_: $!\n"; + () = ; + $info_ksk = $.; + + # prueft wie oft die schluessel zum signieren genutzt wurden + open(FILE, $_ = "<$dir/.keycounter") or die "Can't open $_: $!\n"; + chomp($info_kc = ); + + # prueft das ablaufdatum + if (!-f "$dir/$zone.signed") { + $info_end = "-"; + next; + } + + open(FILE, $_ = "<$dir/$zone.signed") or die "Can't open $_: $!\n"; + while () { + $info_end = "$+{day}.$+{mon}.$+{year} $+{hour}:$+{min}" + if /RSIG.*SOA.*\s + (?\d\d\d\d) + (?\d\d) + (?\d\d) + (?\d\d) + (?\d\d)\d+\s\(/ix; + } + +} +continue { + printf "%-35s %-8s %1d/%1d %5d %19s\n", $zone, $info_status, $info_zsk, + $info_ksk, $info_kc, + $info_end; +} +