--- a/dnssec-killkey Thu Dec 02 16:46:17 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,254 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-use FindBin;
-
-sub del_double {
- my %all;
- grep { $all{$_} = 0 } @_;
- return ( keys %all );
-}
-
-# 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 (<CONFIG>) {
- 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 $ablauf_zeit = $config{abl_zeit};
-my $zone;
-my @status;
-my @auto;
-my @manu;
-my @old_zone_content;
-my @new_zone_content;
-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";
- my $ep = 0;
-
- unless ( -e "$master_dir/$zone" ) {
- print "$zone ist keine verwaltete zone \n";
- }
- else {
- if ( -e "$zdir/$zone.signed" ) {
- unlink "$zdir/$zone.signed" and $ep = 1 }
- if ( -e "$zdir/.keycounter" ) {
- unlink "$zdir/.keycounter" and $ep = 1 }
- if ( -e "$zdir/.index.ksk" ) {
- unlink "$zdir/.index.ksk" and $ep = 1 }
- if ( -e "$zdir/.index.zsk" ) {
- unlink "$zdir/.index.zsk" and $ep = 1 }
- if ( -e "$zdir/dsset-$zone." ) {
- unlink "$zdir/dsset-$zone." and $ep = 1 }
- if ( -e "$zdir/keyset-$zone." ) {
- unlink "$zdir/keyset-$zone." and $ep = 1 }
-
- for (`ls $master_dir/$zone/K*[key,private]`) {
- unlink $_ and $ep = 1
- }
-
- if ($ep == 1) {
- print "$zone: keys removed\n";
- }
-
- open( ZONE, "$master_dir/$zone/$zone" )
- or die "$master_dir/$zone/$zone: $!\n";
- @old_zone_content = <ZONE>;
- close(ZONE);
-
- for (@old_zone_content) {
- unless (/dnssec-(ksk|zsk)/) {
- push @new_zone_content, $_;
- }
- }
-
- open( ZONE, ">$master_dir/$zone/$zone" )
- or die "$master_dir/$zone/$zone: $!\n";
- print ZONE @new_zone_content;
- close(ZONE);
-
- push @manu, $zone;
- }
-}
-
-# beendet den key-rollover
-for (<$master_dir/*>) {
- $zone = $_;
- $zone =~ s#($master_dir/)(.*)#$2#;
-
- 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 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>;
- $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>;
- $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;
- }
-
-}
-
-# nach abgeschlossenem key-rollover werden fuer die entsprechende zone
-# unbenoetigte schluessel entfernt und die vorhandenen schluessel in die
-# zonedatei geschrieben.
-for ( &del_double(@auto) ) {
- my $zone = $_;
- my @old_zone_content = ();
- my @new_zone_content = ();
- my @kkeylist = ();
- my @zkeylist = ();
- my $file;
-
- open( INDEX, "$master_dir/$zone/.index.zsk" )
- or die "$master_dir/$zone/.index.zsk: $!\n";
- @zkeylist = <INDEX>;
- close(INDEX);
-
- open( INDEX, "$master_dir/$zone/.index.ksk" )
- or die "$master_dir/$zone/.index.ksk: $!\n";
- @kkeylist = <INDEX>;
- close(INDEX);
-
- open( ZONE, "$master_dir/$zone/$zone" )
- or die "$master_dir/$zone/$zone: $!\n";
- @old_zone_content = <ZONE>;
- close(ZONE);
-
- # kuerzt die schluessel-bezeichnung aus der indexdatei auf die
- # id um sie besser vergleichen zu koennen.
- for ( @kkeylist, @zkeylist ) {
- chomp;
- s#K.*\+.*\+(.*)#$1#;
- }
-
- # filtert alle schluessel aus der zonedatei
- # old_zone_content ==> new_zone_content
- for (@old_zone_content) {
- unless (/dnssec-(ksk|zsk)/) {
- 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;
-
- for (@zkeylist) {
-
- if ( $file =~ /$_/ ) {
- $rm_count = 0;
-
- # schluessel die in der indexdatei standen, werden an die
- # zonedatei angehangen.
- if ( $file =~ /.*key/ ) {
-
- $file =~ s#/.*/(K.*)#$1#;
- push @new_zone_content,
- "\$INCLUDE \"$file\"\t\t; dnssec-zsk\n";
-
- last;
- }
- }
- }
- for (@kkeylist) {
-
- if ( $file =~ /$_/ ) {
- $rm_count = 0;
-
- # schluessel die in der indexdatei standen, werden an die
- # zonedatei angehangen.
- if ( $file =~ /.*key/ ) {
-
- $file =~ s#/.*/(K.*)#$1#;
- push @new_zone_content,
- "\$INCLUDE \"$file\"\t\t; dnssec-ksk\n";
-
- last;
- }
- }
- }
-
- #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";
-}
-
-# "toucht" alle zonen damit der serial erhoht wird und die
-# zone neu signiert wird
-for ( &del_double( @auto, @manu ) ) {
- system "touch $master_dir/$_/$_";
-}
-