merged changes from a.suess hs12
authorHeiko Schlittermann <hs@schlittermann.de>
Wed, 29 Dec 2010 22:11:21 +0100
branchhs12
changeset 63 fe2c4391758e
parent 62 8a85723f4b53 (current diff)
parent 61 991f8f1593dc (diff)
child 64 86418a892c76
merged changes from a.suess
--- a/dnssec-keytool.pl	Wed Dec 29 22:10:40 2010 +0100
+++ b/dnssec-keytool.pl	Wed Dec 29 22:11:21 2010 +0100
@@ -3,18 +3,42 @@
 use warnings;
 use strict;
 use FindBin;
+use File::Temp;
+
+sub read_conf;
+sub read_argv($);
+sub rm_keys(@);
+sub creat_zsk(@);
+
+MAIN: {
+    my @zone;
+    my $do;
+
+    my %conf     = read_conf();
+    ($do, @zone) = read_argv($conf{master_dir});
+
+    # completed the program, if not a valid zones was handed over
+    unless (@zone) { exit; }
+
+    if ($do eq "rm") { rm_keys($conf{master_dir}, @zone); exit; }
+#    if ($do eq "ck") { &ck_zone; }
+    if ($do eq "ksk") { creat_ksk($conf{master_dir}, @zone); }
+
+    creat_zsk($conf{master_dir}, @zone);
+#    &post_creat;
+}
 
 sub read_conf {
 
     # read configuration
-    my @configs = ("$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf");
-    our %config;
+    my @conffile = ("etc/dnstools.conf", "$FindBin::Bin/dnstools.conf");
+    my %return;
 
-    for (grep { -f } @configs) {
-        open(CONFIG, $_) or die "Can't open $_: $!\n";
+    for (grep { -f } @conffile) {
+        open(CONFIG, "<", $_) or die "Can't open $_: $!\n";
     }
     unless (seek(CONFIG, 0, 0)) {
-        die "Can't open config (searched: @configs)\n";
+        die "Can't open config (searched: @conffile)\n";
     }
     while (<CONFIG>) {
         chomp;
@@ -24,18 +48,20 @@
 
         next unless length;
         my ($cname, $ccont) = split(/\s*=\s*/, $_, 2);
-        $config{$cname} = $ccont;
+        $return{$cname} = $ccont;
     }
     close(CONFIG);
+    return %return;
 }
 
-sub read_argv {
+sub read_argv ($) {
     # evaluate argv or print the help
+    my $master_dir = $_[0];
+
     my $arg = shift @ARGV;
     my $zone;
-    our $do;
-    our @zones;
-    our $master_dir;
+    my $do;    # return
+    my @zone;  # return
 
     if (!defined $arg) {
         print " usage: dnssec-keytool <option> zone\n";
@@ -61,21 +87,20 @@
     for (@ARGV) {
         chomp($zone = `idn --quiet "$_"`);
         if (-e "$master_dir/$zone/$zone") {
-            push @zones, $zone;
+            push @zone, $zone;
         }
     }
+    return ($do, @zone);
 }
 
-sub rm_keys {
+sub rm_keys (@) {
     # deletes all the keys were handed over -rm in argv
-    our @zones;
-    our $master_dir;
-    my $zone;
+    my ($master_dir, @zone) = @_;
     my @new_zone_content;
     my @old_zone_content;
 
-    for (@zones) {
-        $zone = $_;
+    for (@zone) {
+        my $zone = $_;
 
         my $zpf = "$master_dir/$zone";
         my $ep  = 0;
@@ -118,27 +143,25 @@
                 push @new_zone_content, $_;
             }
         }
-
-        open(ZONE, ">$zpf/$zone") or die "$zpf/$zone: $!\n";
-        print ZONE @new_zone_content;
-        close(ZONE);
+   
+        my $fh = File::Temp->new(DIR => "$zpf")
+            or die "Can't create tmpdir: $!\n";
+        print $fh join "" => @new_zone_content, "";
+        rename($fh->filename => "$zpf/$zone")
+            or die "Can't rename " . $fh->filename . " to $zpf/$zone: $!\n";
     }
 }
 
 sub creat_ksk {
-    our @zones;
-    our $master_dir;
+    my ($master_dir, @zone) = @_;
     my @index;
-    my $zone;
     my $keyname;
-    my $zpf;
 
-    for (@zones) {
-        $zone = $_;
-        $zpf  = "$master_dir/$zone";
+    for (@zone) {
+        my $zone = $_;
+        my $zpf  = "$master_dir/$zone";
 
-        chdir "$zpf" or die "$zpf: $!\n";
-        $keyname = `dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE $zone`;
+        $keyname = `cd $zpf && dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE $zone`;
 
         unless (-f ".index.ksk") { @index = (); }
         else {
@@ -162,20 +185,16 @@
     }
 }
 
-sub creat_zsk {
-    our @zones;
-    our $master_dir;
+sub creat_zsk (@) {
+    my ($master_dir, @zone) = @_;
     my @index;
-    my $zone;
     my $keyname;
-    my $zpf;
 
-    for (@zones) {
-        $zone = $_;
-        $zpf  = "$master_dir/$zone";
+    for (@zone) {
+        my $zone = $_;
+        my $zpf  = "$master_dir/$zone";
 
-        chdir "$zpf" or die "$zpf: $!\n";
-        $keyname = `dnssec-keygen -a RSASHA1 -b 512 -n ZONE $zone`;
+        $keyname = `cd $zpf && dnssec-keygen -a RSASHA1 -b 512 -n ZONE $zone`;
 
         unless (-f ".index.zsk") { @index = (); }
         else {
@@ -324,30 +343,6 @@
     close(ZONEFILE);
 }
 
-&read_conf;
-
-our %config;
-our $do;       # statements from argv
-our @zones;    # list of zones from argv
-our $master_dir      = $config{master_dir};
-our $bind_dir        = $config{bind_dir};
-our $conf_dir        = $config{zone_conf_dir};
-our $sign_alert_time = $config{sign_alert_time};
-our $indexzone       = $config{indexzone};
-our $key_counter_end = $config{key_counter_end};
-our $ablauf_zeit     = $config{abl_zeit};
-
-&read_argv;
-
-# completed the program, if not a valid zones was handed over
-unless (@zones) { exit; }
-
-if ($do eq "rm") { &rm_keys; exit; }
-if ($do eq "ck") { &ck_zone; }
-if ($do eq "ksk") { &creat_ksk; }
-
-&creat_zsk;
-&post_creat;
 
 __END__