diff -r c5584821b795 -r ae564015b7b0 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 = ); 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);