diff -r 0342c09abf97 -r d5337081ed02 dnssec-killkey --- a/dnssec-killkey Thu Aug 05 10:49:36 2010 +0200 +++ b/dnssec-killkey Mon Aug 09 11:45:43 2010 +0200 @@ -3,104 +3,107 @@ use strict; use FindBin; - # liest die Konfiguration ein -my @configs = ("$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf"); +my @configs = ( "$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf" ); my %config; -for (grep {-f} @configs) { - open(CONFIG, $_) or die "Can't open $_: $!\n"; +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" +unless ( seek( CONFIG, 0, 0 ) ) { + die "Can't open config (searched: @configs)\n"; } while () { - chomp; - s/#.*//; - s/\t//g; - s/\s//g; + chomp; + s/#.*//; + s/\t//g; + s/\s//g; - next unless length; - my ($cname, $ccont) = split (/\s*=\s*/, $_,2); - $config{$cname} = $ccont; + next unless length; + my ( $cname, $ccont ) = split( /\s*=\s*/, $_, 2 ); + $config{$cname} = $ccont; } -close (CONFIG); +close(CONFIG); -my $master_dir = $config{master_dir}; +my $master_dir = $config{master_dir}; my $ablauf_zeit = $config{abl_zeit}; my $zone; my @status; my @auto; -chomp (my $now_time=`date +%s`); # aktuelle unixzeit - +chomp( my $now_time = `date +%s` ); # aktuelle unixzeit # prueft zonen aus ARGV und loescht das schluesselmaterial for (@ARGV) { - chomp ($zone = `idn --quiet $_`); - my $zdir = "$master_dir/$zone"; - unless (-e "$master_dir/$zone") { - print "$zone ist keine verwaltete zone \n"; - } else { - if (-e "$zdir/$zone.signed") { unlink "$zdir/$zone.signed"} - if (-e "$zdir/.keycounter") { unlink "$zdir/.keycounter"} - if (-e "$zdir/.index.ksk") { unlink "$zdir/.index.ksk"} - if (-e "$zdir/.index.zsk") { unlink "$zdir/.index.zsk"} - if (-e "$zdir/dsset-$zone.") { unlink "$zdir/dsset-$zone."} - if (-e "$zdir/keyset-$zone.") { unlink "$zdir/keyset-$zone."} - for (`ls $master_dir/$zone/K*[key,private]`){ unlink $_} - } + chomp( $zone = `idn --quiet $_` ); + my $zdir = "$master_dir/$zone"; + unless ( -e "$master_dir/$zone" ) { + print "$zone ist keine verwaltete zone \n"; + } + else { + if ( -e "$zdir/$zone.signed" ) { unlink "$zdir/$zone.signed" } + if ( -e "$zdir/.keycounter" ) { unlink "$zdir/.keycounter" } + if ( -e "$zdir/.index.ksk" ) { unlink "$zdir/.index.ksk" } + if ( -e "$zdir/.index.zsk" ) { unlink "$zdir/.index.zsk" } + if ( -e "$zdir/dsset-$zone." ) { unlink "$zdir/dsset-$zone." } + if ( -e "$zdir/keyset-$zone." ) { unlink "$zdir/keyset-$zone." } + for (`ls $master_dir/$zone/K*[key,private]`) { unlink $_ } + } } # beendet den key-rollover for (<$master_dir/*>) { - $zone = $_; - $zone =~ s#($master_dir/)(.*)#$2#; + $zone = $_; + $zone =~ s#($master_dir/)(.*)#$2#; - my @index = (); - my $index_wc; + my @index = (); + my $index_wc; - # prueft nach der ".index.zsk"-datei und erstellt den zeitpunkt - # an dem das key-rollover endet. - $status[9] - if (-e "$master_dir/$zone/.index.zsk") { - @status = stat("$master_dir/$zone/.index.zsk"); - $status[9] += (3600 * $ablauf_zeit); - } - else { - next; - } + # prueft nach der ".index.zsk"-datei und erstellt den zeitpunkt + # an dem das key-rollover endet. - $status[9] + if ( -e "$master_dir/$zone/.index.zsk" ) { + @status = stat("$master_dir/$zone/.index.zsk"); + $status[9] += ( 3600 * $ablauf_zeit ); + } + else { + next; + } - # prueft ob das key-rollover-ende erreicht ist - unless ($status[9] < $now_time ) { - next; - } + # prueft ob das key-rollover-ende erreicht ist + unless ( $status[9] < $now_time ) { + next; + } - # prueft die anzahl der schluessel in der ".index.zsk" - # loescht alte schluessel - open (INDEX, "$master_dir/$zone/.index.zsk") or die "$master_dir/$zone/.index.zsk: $!\n"; - @index = ; - $index_wc = @index; - close (INDEX); - if ($index_wc > 1) { - open (INDEX, ">$master_dir/$zone/.index.zsk")or die "$master_dir/$zone/.index.zsk: $!\n"; - print INDEX $index[1]; - close (INDEX); - push @auto, $zone; - } + # prueft die anzahl der schluessel in der ".index.zsk" + # loescht alte schluessel + open( INDEX, "$master_dir/$zone/.index.zsk" ) + or die "$master_dir/$zone/.index.zsk: $!\n"; + @index = ; + $index_wc = @index; + close(INDEX); + if ( $index_wc > 1 ) { + open( INDEX, ">$master_dir/$zone/.index.zsk" ) + or die "$master_dir/$zone/.index.zsk: $!\n"; + print INDEX $index[1]; + close(INDEX); + push @auto, $zone; + } - # prueft die anzahl der schluessel in der ".index.ksk" - # loescht alte schluessel - open (INDEX, "$master_dir/$zone/.index.ksk") or die "$master_dir/$zone/.index.ksk: $!\n"; - @index = ; - $index_wc = @index; - close (INDEX); - if ($index_wc > 1) { - open (INDEX, ">$master_dir/$zone/.index.ksk") or die "$master_dir/$zone/.index.ksk: $!\n"; - print INDEX $index[1]; - close (INDEX); - push @auto, $zone; - } + # prueft die anzahl der schluessel in der ".index.ksk" + # loescht alte schluessel + open( INDEX, "$master_dir/$zone/.index.ksk" ) + or die "$master_dir/$zone/.index.ksk: $!\n"; + @index = ; + $index_wc = @index; + close(INDEX); + if ( $index_wc > 1 ) { + open( INDEX, ">$master_dir/$zone/.index.ksk" ) + or die "$master_dir/$zone/.index.ksk: $!\n"; + print INDEX $index[1]; + close(INDEX); + push @auto, $zone; + } } @@ -108,72 +111,76 @@ # unbenoetigte schluessel entfernt und die vorhandenen schluessel in die # zonedatei geschrieben. for (@auto) { - my $zone = $_; - my @old_zone_content = (); - my @new_zone_content = (); - my @keylist = (); - my $file; + my $zone = $_; + my @old_zone_content = (); + my @new_zone_content = (); + my @keylist = (); + my $file; - open (INDEX, "$master_dir/$zone/.index.zsk") or die "$master_dir/$zone/.index.zsk: $!\n"; - @keylist = ; - close (INDEX); + open( INDEX, "$master_dir/$zone/.index.zsk" ) + or die "$master_dir/$zone/.index.zsk: $!\n"; + @keylist = ; + close(INDEX); - open (INDEX, "$master_dir/$zone/.index.ksk") or die "$master_dir/$zone/.index.ksk: $!\n"; - push @keylist, ; - close (INDEX); + open( INDEX, "$master_dir/$zone/.index.ksk" ) + or die "$master_dir/$zone/.index.ksk: $!\n"; + push @keylist, ; + close(INDEX); - open (ZONE, "$master_dir/$zone/$zone") or die "$master_dir/$zone/$zone: $!\n"; - @old_zone_content = ; - close (ZONE); + open( ZONE, "$master_dir/$zone/$zone" ) + or die "$master_dir/$zone/$zone: $!\n"; + @old_zone_content = ; + close(ZONE); - # kuerzt die schluessel-bezeichnung aus der indexdatei auf die - # id um sie besser vergleichen zu koennen. - for (@keylist) { - chomp; - s#K.*\+.*\+(.*)#$1#; - } + # kuerzt die schluessel-bezeichnung aus der indexdatei auf die + # id um sie besser vergleichen zu koennen. + for (@keylist) { + chomp; + s#K.*\+.*\+(.*)#$1#; + } - # filtert alle schluessel aus der zonedatei - # old_zone_content ==> new_zone_content - for (@old_zone_content) { - unless (/IN\sDNSKEY/) { - push @new_zone_content, $_; - } - } + # filtert alle schluessel aus der zonedatei + # old_zone_content ==> new_zone_content + for (@old_zone_content) { + unless (/IN\sDNSKEY/) { + push @new_zone_content, $_; + } + } - # prueft alle schluesseldateien (ksk, zsk) ob sie in der jeweiligen - # indexdatei beschrieben sind. wenn nicht werden sie geloescht. - for (`ls $master_dir/$zone/K*[key,private]`){ - chomp; - $file = $_; - my $rm_count = 1; + # prueft alle schluesseldateien (ksk, zsk) ob sie in der jeweiligen + # indexdatei beschrieben sind. wenn nicht werden sie geloescht. + for (`ls $master_dir/$zone/K*[key,private]`) { + chomp; + $file = $_; + my $rm_count = 1; + + for (@keylist) { - for (@keylist) { + if ( $file =~ /$_/ ) { + $rm_count = 0; - if ($file =~ /$_/) { - $rm_count = 0; + # schluessel die in der indexdatei standen, werden an die + # zonedatei angehangen. + if ( $file =~ /.*key/ ) { + open( KEYFILE, "$file" ) or die "$file: $!\n"; + push @new_zone_content, ; + close(KEYFILE); - # schluessel die in der indexdatei standen, werden an die - # zonedatei angehangen. - if ($file =~ /.*key/) { - open (KEYFILE, "$file") or die "$file: $!\n"; - push @new_zone_content, ; - close (KEYFILE); - - last; - } - } - } + last; + } + } + } - #loescht alle unbenoetigten schluessel - if ($rm_count == 1) { - print `rm -f $file`; - } - } + #loescht alle unbenoetigten schluessel + if ( $rm_count == 1 ) { + print `rm -f $file`; + } + } - open (ZONE, ">$master_dir/$zone/$zone") or die "$master_dir/$zone/$zone: $!\n"; - print ZONE @new_zone_content; - close (ZONE); - - print "$master_dir/$zone/$zone wurde neu erstellt \n"; + open( ZONE, ">$master_dir/$zone/$zone" ) + or die "$master_dir/$zone/$zone: $!\n"; + print ZONE @new_zone_content; + close(ZONE); + + print "$master_dir/$zone/$zone wurde neu erstellt \n"; }