dnssec-killkey
changeset 38 d50f6874b7ab
parent 37 d3158de72598
child 39 8b46e7c48995
child 43 7e472c559b36
child 45 5dc44dc86f61
--- 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/$_/$_";
-}
-