--- 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);