1 #!/bin/bash |
1 #!/bin/bash |
2 set -e |
2 set -e |
3 |
3 |
|
4 #import aus der dnstools.conf |
4 source dnstools.conf |
5 source dnstools.conf |
5 |
|
6 master_dir=$MASTER_DIR |
6 master_dir=$MASTER_DIR |
7 key_counter_end=$KEY_COUNTER_END |
7 key_counter_end=$KEY_COUNTER_END |
8 |
8 |
9 function test_zsk_new { # prueft ob es einen ZSK gibt |
9 |
|
10 # gibt alle zonen ohne zsk in die standard-ausgabe |
|
11 function test_zsk_new { |
10 for zone in $master_dir/* |
12 for zone in $master_dir/* |
11 do |
13 do |
12 test -f $zone/${zone##*/}.signed || continue |
14 test -f $zone/${zone##*/}.signed || continue |
13 test -f $zone/.index.zsk || echo ${zone##/*/} |
15 test -f $zone/.index.zsk || echo ${zone##/*/} |
14 done |
16 done |
15 } |
17 } |
16 |
18 |
17 function test_ksk_new { # prueft ob es einen KSK gibt |
19 |
|
20 # gibt alle zonen ohne ksk in die standard-ausgabe |
|
21 function test_ksk_new { |
18 for zone in $master_dir/* |
22 for zone in $master_dir/* |
19 do |
23 do |
20 test -f $zone/${zone##*/}.signed || continue |
24 test -f $zone/${zone##*/}.signed || continue |
21 test -f "$zone/.index.ksk" || echo ${zone##/*/} |
25 test -f "$zone/.index.ksk" || echo ${zone##/*/} |
22 done |
26 done |
23 } |
27 } |
24 |
28 |
|
29 |
|
30 # gibt alle zonen mitabgelaufenen keycounter in die standardausgabe |
25 function test_zsk_time { # prueft den keycounter |
31 function test_zsk_time { # prueft den keycounter |
26 for zone in $master_dir/* |
32 for zone in $master_dir/* |
27 do |
33 do |
28 test -f $zone/${zone##*/}.signed || continue |
34 test -f $zone/${zone##*/}.signed || continue |
29 key_counter_end=$1 |
|
30 test -f $zone/keycounter || echo 0 > $zone/keycounter |
35 test -f $zone/keycounter || echo 0 > $zone/keycounter |
31 key_counter=`< $zone/keycounter` |
36 key_counter=`< $zone/keycounter` |
32 |
37 |
33 if [ $key_counter_end -le $key_counter ] |
38 if [ $key_counter_end -le $key_counter ] |
34 then |
39 then |
35 echo ${zone##/*/} |
40 echo ${zone##/*/} |
36 fi |
41 fi |
37 done |
42 done |
38 } |
43 } |
39 |
44 |
40 #prüft die eingegebnen domains |
45 |
|
46 #prüft die eingegebnen domains und erstellt eine liste |
41 for utf8domain in $@ |
47 for utf8domain in $@ |
42 do |
48 do |
43 domain=$(idn --quiet "$utf8domain") |
49 domain=$(idn --quiet "$utf8domain") |
44 |
50 |
45 if [ -d $master_dir/$domain ] |
51 if [ -d $master_dir/$domain ] |
46 then |
52 then |
47 zsk_aenderung="$zsk_aenderung $domain" |
53 zsk_manuell="$zsk_manuell $domain" |
48 else |
54 else |
49 echo $domain ist keine verwaltete Zone |
55 echo $domain ist keine verwaltete Zone |
50 fi |
56 fi |
51 done |
57 done |
52 |
58 |
53 |
59 |
54 zsk_time=`test_zsk_time $key_counter_end` |
60 # übergibt die standard-ausgabe aus den funktionen in listen |
|
61 zsk_time=`test_zsk_time` |
55 zsk_new=`test_zsk_new` |
62 zsk_new=`test_zsk_new` |
56 ksk_new=`test_ksk_new` |
63 ksk_new=`test_ksk_new` |
57 |
64 |
58 |
65 |
59 for NEW_ZSK_ZONE in $zsk_time $zsk_aenderung # Erstellt ZSK |
66 # erstellt zsks |
|
67 for NEW_ZSK_ZONE in $zsk_time $zsk_manuell |
60 do |
68 do |
61 cd $master_dir/$NEW_ZSK_ZONE |
69 cd $master_dir/$NEW_ZSK_ZONE |
62 echo "erzeugt zsk fuer" $NEW_ZSK_ZONE |
70 echo "erzeugt zsk fuer" $NEW_ZSK_ZONE |
63 dnssec-keygen -a RSASHA1 -b 512 -n ZONE $NEW_ZSK_ZONE >> .index.zsk |
71 dnssec-keygen -a RSASHA1 -b 512 -n ZONE $NEW_ZSK_ZONE >> .index.zsk |
64 INDEX_ZSK=$( tail -n2 .index.zsk ) |
72 INDEX_ZSK=$( tail -n2 .index.zsk ) |
65 echo $INDEX_ZSK | fmt -w1 > .index.zsk |
73 echo $INDEX_ZSK | fmt -w1 > .index.zsk |
66 |
74 |
67 echo 0 > keycounter |
75 echo 0 > keycounter |
68 done |
76 done |
69 |
77 |
70 for NEW_KSK_ZONE in $zsk_aenderung # Erstellt KSK |
78 |
|
79 # erstellt ksks |
|
80 for NEW_KSK_ZONE in $zsk_manuell |
71 do |
81 do |
72 cd $master_dir/$NEW_KSK_ZONE |
82 cd $master_dir/$NEW_KSK_ZONE |
73 echo "erzeugt ksk fuer" $NEW_KSK_ZONE |
83 echo "erzeugt ksk fuer" $NEW_KSK_ZONE |
74 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE $NEW_KSK_ZONE >> .index.ksk |
84 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE $NEW_KSK_ZONE >> .index.ksk |
75 INDEX_KSK=$( tail -n2 .index.ksk ) |
85 INDEX_KSK=$( tail -n2 .index.ksk ) |
76 echo $INDEX_KSK | fmt -w1 > .index.ksk |
86 echo $INDEX_KSK | fmt -w1 > .index.ksk |
77 done |
87 done |
78 |
88 |
79 |
89 |
80 |
90 # fuegt die schluessel in die zone-datei |
81 for ZONE in $zsk_time $zsk_new $ksk_new $zsk_aenderung |
91 for zone in $zsk_time $zsk_manuell |
82 do |
92 do |
83 cd $master_dir/$ZONE |
93 cd $master_dir/$zone |
84 |
94 |
85 #loescht alle Schluessel die nicht in der indexdatei stehen |
95 #loescht alle Schluessel die nicht in der indexdatei stehen |
86 rm $(ls K*[key,private] | grep -v "`cat .index.zsk`" | grep -v "`cat .index.ksk`") 2> /dev/null |
96 rm $(ls K*[key,private] | grep -v "`cat .index.zsk`" | grep -v "`cat .index.ksk`") 2>/dev/null || true |
87 |
97 |
88 #erzeugt ein backup und entfernt alle schluessel aus der zonedatei |
98 #erzeugt ein backup und entfernt alle schluessel aus der zonedatei |
89 mv $ZONE $ZONE.old |
99 mv $zone .$zone |
90 grep -v 'DNSKEY' $ZONE.old >> $ZONE |
100 grep -v 'DNSKEY' .$zone >> $zone |
91 |
101 |
92 #fuegt die existirenden schluessel in die zonedatei ein |
102 #fuegt die existirenden schluessel in die zonedatei ein |
93 cat K$ZONE.*key >> $ZONE |
103 cat K$zone.*key >> $zone |
94 done |
104 done |