--rm should work now
authorMatthias Förste <foerste@schlittermann.de>
Wed, 29 Jun 2011 10:33:32 +0200
changeset 142 ae564015b7b0
parent 141 c5584821b795
child 143 c26b5fa3f646
--rm should work now
sbin/dnssec-keytool
--- a/sbin/dnssec-keytool	Wed Jun 29 10:28:06 2011 +0200
+++ b/sbin/dnssec-keytool	Wed Jun 29 10:33:32 2011 +0200
@@ -13,7 +13,7 @@
 
 my $ME = basename $0;
 
-sub rm_keys($@);
+sub rm_keys(@);
 sub check_zone($@);
 sub create_key($@);
 sub create_ksk(@);
@@ -68,57 +68,53 @@
         when ("zsk")   { exit create_zsk(@zones) };
         when ("ksk")   { exit create_ksk(@zones) };
         #when ("check") { exit check_zone(@zones) };
-        #when ("rm")    { exit rm_keys(@zones) };
+        when ("rm")    { exit rm_keys(@zones) };
 	default		{ die "not implemented\n" };
     };
+
 }
 
-sub rm_keys ($@) {
-
-    # deletes all the keys were handed over -rm in argv
-    my ($master_dir, @zone) = @_;
+sub rm_keys (@) {
 
-    for (@zone) {
-        my $zone = $_;
+    my @zones = @_;
+    my $master_dir = "$cf{master_dir}";
 
-        my $zpf = "$master_dir/$zone";
+    for my $zone (@zones) {
+
+        my $dir = "$master_dir/$zone";
         my $ep  = 0;
 
-        if (-e "$zpf/$zone.signed") {
-            unlink "$zpf/$zone.signed" and $ep = 1;
-        }
-        if (-e "$zpf/.keycounter") {
-            unlink "$zpf/.keycounter" and $ep = 1;
-        }
-        if (-e "$zpf/.index.ksk") {
-            unlink "$zpf/.index.ksk" and $ep = 1;
-        }
-        if (-e "$zpf/.index.zsk") {
-            unlink "$zpf/.index.zsk" and $ep = 1;
-        }
-        if (-e "$zpf/dsset-$zone.") {
-            unlink "$zpf/dsset-$zone." and $ep = 1;
-        }
-        if (-e "$zpf/keyset-$zone.") {
-            unlink "$zpf/keyset-$zone." and $ep = 1;
+        my @files = map "$dir/$_", ("$zone.signed",
+            ".keycounter",
+            ".index.ksk",
+            ".index.zsk",
+            "dsset-$zone.",
+            "keyset-$zone.");
+        push @files, glob "$dir/K$zone*";
+
+        for my $f (@files) {
+            if (-e $f) {
+                unlink $f or die "Can't unlink '$f': $!\n";
+                $ep = 1;
+            }
         }
 
-        for (glob("$zpf/K$zone*")) {
-            chomp($_);
-            unlink("$_");
-        }
+        say " * $zone: removed key-set" if $ep;
+
+        open my $old, "$dir/$zone" or die "Can't open '$dir/$zone': $!\n";
+        my @old = <$old>;
+        close $old;
+        my @new = grep { not /^\s*\$include\s+("?)K\Q$zone\E.*\.key\1\s*$/i } @old; 
+        return if @new ~~ @old;
 
-        if ($ep == 1) {
-            print " * $zone: removed key-set\n";
-        }
+        my $new = File::Temp->new(UNLINK => 0)
+          or die "Can't create tmpfile\n";
+        print $new @new;
+        rename $new->filename => "$dir/$zone"
+          or die "Can't rename " . $new->filename . " to $dir/$zone: $!\n";
 
-        open(my $old, "$zpf/$zone") or die "$zpf/$zone: $!\n";
-        my $fh = File::Temp->new(DIR => $zpf)
-          or die "Can't create tmpfile: $!\n";
-        print $fh grep { not /^\s*\$INCLUDE.*"K$zone.*\.key"/i } <$old>;
-        rename($fh->filename => "$zpf/$zone")
-          or die "Can't rename " . $fh->filename . " to $zpf/$zone: $!\n";
     }
+
 }
 
 sub create_key ($@) {
@@ -280,7 +276,7 @@
     chomp (@lines = <OLD>);
     close OLD;
 
-    return if grep /^\s*\$include\s+("?)\Q$keyname\E\.key\1$/i, @lines;
+    return if grep /^\s*\$include\s+("?)\Q$keyname\E\.key\1\s*$/i, @lines;
 
     $tmp = File::Temp->new(UNLINK => 0) or die "Can't create temporary file\n";
     print $tmp join "\n", @lines, qq(\$INCLUDE "$keyname.key"\n);