dnssec-killkey
changeset 22 7229d1c95ea8
parent 21 6715f8f9d04c
child 25 c02caf4e0eb6
equal deleted inserted replaced
21:6715f8f9d04c 22:7229d1c95ea8
     1 #!/usr/bin/perl -w
     1 #!/usr/bin/perl -w
     2 
     2 
     3 use strict;
     3 use strict;
     4 
     4 
     5 my $master_dir="/etc/bind/master";	# ordner fuer die einzelnen zonedateiordner
     5 my %config;
     6 my $ablauf_zeit="1";			# zeit fuer den key-rollover in h
     6 open (CONFIG, "dnstools.conf");
       
     7 while (<CONFIG>) {
       
     8         chomp;
       
     9         s/#.*//;
       
    10         s/\t//g;
       
    11         s/\s//g;
       
    12 
       
    13         next unless length;
       
    14         my ($cname, $ccont) = split (/\s*=\s*/, $_,2);
       
    15         $config{$cname} = $ccont;
       
    16 }
       
    17 close (CONFIG);
       
    18 
       
    19 my $master_dir = $config{master_dir};
       
    20 my $ablauf_zeit = $config{abl_zeit};
     7 my $zone;
    21 my $zone;
     8 my @status;
    22 my @status;
     9 my @auto;
    23 my @auto;
    10 chomp (my $now_time=`date +%s`);	# aktuelle unixzeit
    24 chomp (my $now_time=`date +%s`);	# aktuelle unixzeit
    11 
    25 
    13 for (@ARGV) {
    27 for (@ARGV) {
    14         chomp ($zone = `idn --quiet $_`);
    28         chomp ($zone = `idn --quiet $_`);
    15 	my $zdir = "$master_dir/$zone";
    29 	my $zdir = "$master_dir/$zone";
    16         if (-e "$master_dir/$zone") {
    30         if (-e "$master_dir/$zone") {
    17 
    31 
    18 		if (-e "$zdir/$zone.signed") { `rm $zdir/$zone.signed`}
    32 		if (-e "$zdir/$zone.signed") { unlink $zdir/$zone.signed}
    19 		if (-e "$zdir/.keycounter") { `rm $zdir/.keycounter`}
    33 		if (-e "$zdir/.keycounter") { unlink $zdir/.keycounter}
    20 		if (-e "$zdir/.index.ksk") { `rm $zdir/.index.ksk`}
    34 		if (-e "$zdir/.index.ksk") { unlink $zdir/.index.ksk}
    21 		if (-e "$zdir/.index.zsk") { `rm $zdir/.index.zsk`}
    35 		if (-e "$zdir/.index.zsk") { unlink $zdir/.index.zsk}
    22 		if (-e "$zdir/dsset-$zone.") { `rm $zdir/dsset-$zone.`}
    36 		if (-e "$zdir/dsset-$zone.") { unlink $zdir/dsset-$zone.}
    23 		if (-e "$zdir/keyset-$zone.") { `rm $zdir/keyset-$zone.`}
    37 		if (-e "$zdir/keyset-$zone.") { unlink $zdir/keyset-$zone.}
    24 
    38 
    25 		foreach (`ls $master_dir/$zone/K*[key,private]`){ `rm $_`}
    39 		for (`ls $master_dir/$zone/K*[key,private]`){ unlink $_}
    26 
    40 
    27         } else {
    41         } else {
    28                 print "$zone ist keine verwaltete zone \n";
    42                 print "$zone ist keine verwaltete zone \n";
    29         }
    43         }
    30 }
    44 }
    78 }
    92 }
    79 
    93 
    80 # nach abgeschlossenem key-rollover werden fuer die entsprechende zone
    94 # nach abgeschlossenem key-rollover werden fuer die entsprechende zone
    81 # unbenoetigte schluessel entfernt und die vorhandenen schluessel in die
    95 # unbenoetigte schluessel entfernt und die vorhandenen schluessel in die
    82 # zonedatei geschrieben.
    96 # zonedatei geschrieben.
    83 foreach (@auto) {
    97 for (@auto) {
    84 	my $zone = $_;
    98 	my $zone = $_;
    85 	my @old_zone_content = ();
    99 	my @old_zone_content = ();
    86 	my @new_zone_content = ();
   100 	my @new_zone_content = ();
    87 	my @keylist = ();
   101 	my @keylist = ();
    88 	my $file;
   102 	my $file;
    99 	@old_zone_content = <ZONE>;
   113 	@old_zone_content = <ZONE>;
   100 	close (ZONE);
   114 	close (ZONE);
   101 
   115 
   102 	# kuerzt die schluessel-bezeichnung aus der indexdatei auf die
   116 	# kuerzt die schluessel-bezeichnung aus der indexdatei auf die
   103 	# id um sie besser vergleichen zu koennen.
   117 	# id um sie besser vergleichen zu koennen.
   104 	foreach (@keylist) {
   118 	for (@keylist) {
   105 		chomp;
   119 		chomp;
   106 		s#K.*\+.*\+(.*)#$1#;
   120 		s#K.*\+.*\+(.*)#$1#;
   107 	}
   121 	}
   108 
   122 
   109 	# filtert alle schluessel aus der zonedatei
   123 	# filtert alle schluessel aus der zonedatei
   110 	# old_zone_content ==> new_zone_content
   124 	# old_zone_content ==> new_zone_content
   111 	foreach (@old_zone_content) {
   125 	for (@old_zone_content) {
   112 		unless (/IN\sDNSKEY/) {
   126 		unless (/IN\sDNSKEY/) {
   113 			push @new_zone_content, $_;
   127 			push @new_zone_content, $_;
   114 		}
   128 		}
   115 	}
   129 	}
   116 
   130 
   117 	# prueft alle schluesseldateien (ksk, zsk) ob sie in der jeweiligen
   131 	# prueft alle schluesseldateien (ksk, zsk) ob sie in der jeweiligen
   118 	# indexdatei beschrieben sind. wenn nicht werden sie geloescht.
   132 	# indexdatei beschrieben sind. wenn nicht werden sie geloescht.
   119 	foreach (`ls $master_dir/$zone/K*[key,private]`){
   133 	for (`ls $master_dir/$zone/K*[key,private]`){
   120 		chomp;
   134 		chomp;
   121 		$file = $_;
   135 		$file = $_;
   122 		my $rm_count = 1;
   136 		my $rm_count = 1;
   123 
   137 
   124 		foreach (@keylist) {
   138 		for (@keylist) {
   125 
   139 
   126 			if ($file =~ /$_/) {
   140 			if ($file =~ /$_/) {
   127 				$rm_count = 0;
   141 				$rm_count = 0;
   128 
   142 
   129 				# schluessel die in der indexdatei standen, werden an die
   143 				# schluessel die in der indexdatei standen, werden an die