dnssec-keytool.pl
branchhs12
changeset 53 291588cb5e84
parent 49 ae211c0aece0
parent 51 d4e31a2d4b5c
child 54 bba32c45a832
equal deleted inserted replaced
50:3b469e9bda9e 53:291588cb5e84
     4 use strict;
     4 use strict;
     5 use FindBin;
     5 use FindBin;
     6 
     6 
     7 sub read_conf {
     7 sub read_conf {
     8 
     8 
     9     # liest die Konfiguration ein
     9     # read configuration
    10     my @configs = ("$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf");
    10     my @configs = ("$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf");
    11     our %config;
    11     our %config;
    12 
    12 
    13     for (grep { -f } @configs) {
    13     for (grep { -f } @configs) {
    14         open(CONFIG, $_) or die "Can't open $_: $!\n";
    14         open(CONFIG, $_) or die "Can't open $_: $!\n";
    28     }
    28     }
    29     close(CONFIG);
    29     close(CONFIG);
    30 }
    30 }
    31 
    31 
    32 sub read_argv {
    32 sub read_argv {
    33 
    33     # evaluate argv or print the help
    34     # wertet argv aus oder gibt die hilfe aus
       
    35     my $arg = shift @ARGV;
    34     my $arg = shift @ARGV;
    36     my $zone;
    35     my $zone;
    37     our $do;
    36     our $do;
    38     our @zones;
    37     our @zones;
    39     our $master_dir;
    38     our $master_dir;
    40 
    39 
    41     if (!defined $arg) {
    40     if (!defined $arg) {
    42         print " usage: dnssec-keytool <option> zone\n";
    41         print " usage: dnssec-keytool <option> zone\n";
    43         print "   -z  erstellt einen neuen ZSK\n";
    42         print "   -z  created a new ZSK\n";
    44         print "   -k  erstellt je einen neuen ZSK und KSK\n";
    43         print "   -k  created a new ZSK and KSK\n";
    45         print "   -rm loescht das Schluesselmaterial einer Zone\n";
    44         print "   -rm deletes the key-set of a zone\n";
    46         print "   -c  erstellt bei existierenden ksk konfigurationsdateien\n";
    45         print "   -c  created configuration files for the dnstools\n";
    47         print "       fuer die dnstools, sowie einen neuen zsk\n";
    46         print "       and a new ZSK for an existing KSK\n";
    48         print "\n";
    47         print "\n";
    49 
    48 
    50         exit;
    49         exit;
    51     }
    50     }
    52     elsif ($arg eq "-k")  { $do = "ksk"; }
    51     elsif ($arg eq "-k")  { $do = "ksk"; }
    53     elsif ($arg eq "-rm") { $do = "rm"; }
    52     elsif ($arg eq "-rm") { $do = "rm"; }
    54     elsif ($arg eq "-c")  { $do = "ck"; }
    53     elsif ($arg eq "-c")  { $do = "ck"; }
    55     elsif ($arg eq "-z")  { $do = "zsk"; }
    54     elsif ($arg eq "-z")  { $do = "zsk"; }
    56     else {
    55     else {
    57         print "keine gueltige Option.\n";
    56         print "not a valid option.\n";
    58         exit;
    57         exit;
    59     }
    58     }
    60 
    59 
    61     # prueft die zonen in argv ob es verwaltete zonen sind
    60     # checks the zones in argv if there are managed zones
    62     for (@ARGV) {
    61     for (@ARGV) {
    63         chomp($zone = `idn --quiet "$_"`);
    62         chomp($zone = `idn --quiet "$_"`);
    64         if (-e "$master_dir/$zone/$zone") {
    63         if (-e "$master_dir/$zone/$zone") {
    65             push @zones, $zone;
    64             push @zones, $zone;
    66         }
    65         }
    67     }
    66     }
    68 }
    67 }
    69 
    68 
    70 sub rm_keys {
    69 sub rm_keys {
       
    70     # deletes all the keys were handed over -rm in argv
    71     our @zones;
    71     our @zones;
    72     our $master_dir;
    72     our $master_dir;
    73     my $zone;
    73     my $zone;
    74     my @new_zone_content;
    74     my @new_zone_content;
    75     my @old_zone_content;
    75     my @old_zone_content;
    97         }
    97         }
    98         if (-e "$zpf/keyset-$zone.") {
    98         if (-e "$zpf/keyset-$zone.") {
    99             unlink "$zpf/keyset-$zone." and $ep = 1;
    99             unlink "$zpf/keyset-$zone." and $ep = 1;
   100         }
   100         }
   101 
   101 
   102         for (`ls $zpf/K$zone*`) {
   102         for (glob("$zpf/K$zone*")) { 
   103             chomp($_);
   103             chomp($_);
   104             print "weg du scheissezwerg $_";
   104             unlink ("$_");
   105             unlink("$_");
       
   106         }
   105         }
   107 
   106 
   108         if ($ep == 1) {
   107         if ($ep == 1) {
   109             print " * $zone: schluesselmaterial entfernt\n";
   108             print " * $zone: removed key-set\n";
   110         }
   109         }
   111 
   110 
   112         open(ZONE, "$zpf/$zone")
   111         open(ZONE, "$zpf/$zone")
   113           or die "$zpf/$zone: $!\n";
   112           or die "$zpf/$zone: $!\n";
   114         @old_zone_content = <ZONE>;
   113         @old_zone_content = <ZONE>;
   154         open(INDEX, ">.index.ksk") or die "$zpf/.index.ksk: $!\n";
   153         open(INDEX, ">.index.ksk") or die "$zpf/.index.ksk: $!\n";
   155         print INDEX @index;
   154         print INDEX @index;
   156         close(INDEX);
   155         close(INDEX);
   157 
   156 
   158         chomp($keyname);
   157         chomp($keyname);
   159         print " * $zone: neuer KSK $keyname\n";
   158         print " * $zone: new KSK $keyname\n";
   160 
   159 
   161         print "!! DER KSK muss der Chain of Trust veroeffentlicht werden !! \n";
   160         print "!! THE KSK must be published !! \n";
   162 
   161 
   163     }
   162     }
   164 }
   163 }
   165 
   164 
   166 sub creat_zsk {
   165 sub creat_zsk {
   191         open(INDEX, ">.index.zsk") or die "$zpf/.index.zsk: $!\n";
   190         open(INDEX, ">.index.zsk") or die "$zpf/.index.zsk: $!\n";
   192         print INDEX @index;
   191         print INDEX @index;
   193         close(INDEX);
   192         close(INDEX);
   194 
   193 
   195         chomp($keyname);
   194         chomp($keyname);
   196         print " * $zone: neuer ZSK $keyname\n";
   195         print " * $zone: new ZSK $keyname\n";
   197 
   196 
   198         open(KC, ">.keycounter") or die "$zpf/keycounter: $!\n";
   197         open(KC, ">.keycounter") or die "$zpf/keycounter: $!\n";
   199         print KC "0";
   198         print KC "0";
   200         close(KC);
   199         close(KC);
   201 
   200 
   233             s#\.key##;
   232             s#\.key##;
   234             print INDEX "$_\n";
   233             print INDEX "$_\n";
   235         }
   234         }
   236         close(INDEX);
   235         close(INDEX);
   237 
   236 
   238         print " * $zone: neue .index.ksk erzeugt\n";
   237         print " * $zone: new .index.ksk created\n";
   239 
   238 
   240         if (-f "$zpf/.index.zsk") {
   239         if (-f "$zpf/.index.zsk") {
   241             unlink("$zpf/.index.zsk") or die "$zpf/.index.zsk: $!\n";
   240             unlink("$zpf/.index.zsk") or die "$zpf/.index.zsk: $!\n";
   242         }
   241         }
   243     }
   242     }
   257 
   256 
   258 }
   257 }
   259 
   258 
   260 sub kill_useless_keys {
   259 sub kill_useless_keys {
   261 
   260 
   262     # die funktion loescht alle schluessel die nicht in der index.zsk
   261     # the function deletes all keys that are not available in the zone
   263     # der uebergebenen zone stehen
   262     # of index.zsk
   264     our $master_dir;
   263     our $master_dir;
   265     my $zone    = $_[0];
   264     my $zone    = $_[0];
   266     my @keylist = ();
   265     my @keylist = ();
   267     my $zpf     = "$master_dir/$zone";
   266     my $zpf     = "$master_dir/$zone";
   268 
   267 
   270     @keylist = <INDEX>;
   269     @keylist = <INDEX>;
   271     close(INDEX);
   270     close(INDEX);
   272     open(INDEX, "<$zpf/.index.ksk") or die "$zpf/.index.ksk: $!\n";
   271     open(INDEX, "<$zpf/.index.ksk") or die "$zpf/.index.ksk: $!\n";
   273     push @keylist, <INDEX>;
   272     push @keylist, <INDEX>;
   274 
   273 
   275     # kuerzt die schluessel-bezeichnung aus der indexdatei auf die id um sie
   274     # shortened the key name from the index file on the id in order to
   276     # besser vergleichen zu koennen.
   275     # be able to compare
   277     for (@keylist) {
   276     for (@keylist) {
   278         chomp;
   277         chomp;
   279         s#K.*\+.*\+(.*)#$1#;
   278         s#K.*\+.*\+(.*)#$1#;
   280     }
   279     }
   281 
   280 
   282     # prueft alle schluesseldateien (ksk, zsk) ob sie in der jeweiligen
   281     # reviewed every key file (KSK, ZSK), whether they are described in
   283     # indexdatei beschrieben sind. wenn nicht werden sie geloescht.
   282     # the respective index file. if not they will be deleted.
   284     for (`ls $master_dir/$zone/K*[key,private]`) {
   283     for ( glob("$master_dir/$zone/K*") {
   285         chomp;
   284         chomp;
   286         my $file     = $_;
   285         my $file     = $_;
   287         my $rm_count = 1;
   286         my $rm_count = 1;
   288         my $keyname;
   287         my $keyname;
   289         for (@keylist) {
   288         for (@keylist) {
   298     }
   297     }
   299 }
   298 }
   300 
   299 
   301 sub key_to_zonefile {
   300 sub key_to_zonefile {
   302 
   301 
   303     # die funktion fugt alle schluessel in eine zonedatei
   302     # the function added all keys to the indexfile
   304     our $master_dir;
   303     our $master_dir;
   305     my $zone = $_[0];
   304     my $zone = $_[0];
   306     my $zpf  = "$master_dir/$zone";
   305     my $zpf  = "$master_dir/$zone";
   307     my @old_content;
   306     my @old_content;
   308     my @new_content = ();
   307     my @new_content = ();
   326 }
   325 }
   327 
   326 
   328 &read_conf;
   327 &read_conf;
   329 
   328 
   330 our %config;
   329 our %config;
   331 our $do;       # arbeitsschritte aus argv
   330 our $do;       # statements from argv
   332 our @zones;    # liste der zonen in argv
   331 our @zones;    # list of zones from argv
   333 our $master_dir      = $config{master_dir};
   332 our $master_dir      = $config{master_dir};
   334 our $bind_dir        = $config{bind_dir};
   333 our $bind_dir        = $config{bind_dir};
   335 our $conf_dir        = $config{zone_conf_dir};
   334 our $conf_dir        = $config{zone_conf_dir};
   336 our $sign_alert_time = $config{sign_alert_time};
   335 our $sign_alert_time = $config{sign_alert_time};
   337 our $indexzone       = $config{indexzone};
   336 our $indexzone       = $config{indexzone};
   338 our $key_counter_end = $config{key_counter_end};
   337 our $key_counter_end = $config{key_counter_end};
   339 our $ablauf_zeit     = $config{abl_zeit};
   338 our $ablauf_zeit     = $config{abl_zeit};
   340 
   339 
   341 &read_argv;
   340 &read_argv;
   342 
   341 
   343 unless (@zones) { exit; }    # beendet das programm, wurden keine
   342 # completed the program, if not a valid zones was handed over
   344                              # gueltigen zonen uebergeben
   343 unless (@zones) { exit; }
   345 
   344 
   346 if ($do eq "rm") { &rm_keys; exit; }
   345 if ($do eq "rm") { &rm_keys; exit; }
   347 if ($do eq "ck") { &ck_zone; }
   346 if ($do eq "ck") { &ck_zone; }
   348 if ($do eq "ksk") { &creat_ksk; }
   347 if ($do eq "ksk") { &creat_ksk; }
   349 
   348 
   350 &creat_zsk;
   349 &creat_zsk;
   351 &post_creat;
   350 &post_creat;
   352 
   351 
       
   352 __END__
       
   353 
       
   354 =pod
       
   355 
       
   356 =head1 NAME
       
   357 
       
   358 dnssec-keytool
       
   359 
       
   360 =head1 SYNOPSIS
       
   361 
       
   362 dnssec-keytool <option> zone
       
   363 
       
   364 =head1 DESCRIPTION