From: Michał Kępień Date: Wed, 20 Mar 2019 21:21:30 +0000 (+0100) Subject: Fix key ID extraction in the "dnssec" system test X-Git-Tag: v9.14.1~13^2 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=d14d661c2071615a8e30374d9f6d93271383e56e;p=thirdparty%2Fbind9.git Fix key ID extraction in the "dnssec" system test Simply looking for the key ID surrounded by spaces in the tested dnssec-signzone output file is not a precise enough method of checking for signatures prepared using a given key ID: it can be tripped up by cross-algorithm key ID collisions and certain low key IDs (e.g. 60, the TTL specified in bin/tests/system/dnssec/signer/example.db.in), which triggers false positives for the "dnssec" system test. Make key ID extraction precise by using an awk script which operates on specific fields. (cherry picked from commit a40c60e4c1d974a0d9dbad513a1a78fa2a4025b5) --- diff --git a/bin/tests/system/dnssec/tests.sh b/bin/tests/system/dnssec/tests.sh index de4d42d9482..24f91f956a6 100644 --- a/bin/tests/system/dnssec/tests.sh +++ b/bin/tests/system/dnssec/tests.sh @@ -1399,6 +1399,19 @@ n=$((n+1)) test "$ret" -eq 0 || echo_i "failed" status=$((status+ret)) +get_rsasha1_key_ids_from_sigs() { + awk ' + NF < 8 { next } + $(NF-5) != "RRSIG" { next } + $(NF-3) != "5" { next } + $NF != "(" { next } + { + getline; + print $3; + } + ' signer/example.db.signed | sort -u +} + echo_i "checking that we can sign a zone with out-of-zone records ($n)" ret=0 zone=example @@ -1499,8 +1512,8 @@ cat example.db.in "$key1.key" "$key3.key" > example.db echo "\$INCLUDE \"example.db.signed\"" >> example.db $SIGNER -D -o example example.db > /dev/null 2>&1 ) || ret=1 -grep " $keyid2 " signer/example.db.signed > /dev/null 2>&1 || ret=1 -grep " $keyid3 " signer/example.db.signed > /dev/null 2>&1 || ret=1 +get_rsasha1_key_ids_from_sigs | grep "^$keyid2$" > /dev/null || ret=1 +get_rsasha1_key_ids_from_sigs | grep "^$keyid3$" > /dev/null || ret=1 n=$((n+1)) test "$ret" -eq 0 || echo_i "failed" status=$((status+ret)) @@ -1511,8 +1524,8 @@ ret=0 cd signer || exit 1 $SIGNER -RD -o example example.db > /dev/null 2>&1 ) || ret=1 -grep " $keyid2 " signer/example.db.signed > /dev/null 2>&1 && ret=1 -grep " $keyid3 " signer/example.db.signed > /dev/null 2>&1 || ret=1 +get_rsasha1_key_ids_from_sigs | grep "^$keyid2$" > /dev/null && ret=1 +get_rsasha1_key_ids_from_sigs | grep "^$keyid3$" > /dev/null || ret=1 n=$((n+1)) test "$ret" -eq 0 || echo_i "failed" status=$((status+ret)) @@ -1529,8 +1542,8 @@ echo "\$INCLUDE \"example.db.signed\"" >> example.db $SETTIME -I now "$key2" > /dev/null 2>&1 $SIGNER -SD -o example example.db > /dev/null 2>&1 ) || ret=1 -grep " $keyid2 " signer/example.db.signed > /dev/null 2>&1 || ret=1 -grep " $keyid3 " signer/example.db.signed > /dev/null 2>&1 || ret=1 +get_rsasha1_key_ids_from_sigs | grep "^$keyid2$" > /dev/null || ret=1 +get_rsasha1_key_ids_from_sigs | grep "^$keyid3$" > /dev/null || ret=1 n=$((n+1)) test "$ret" -eq 0 || echo_i "failed" status=$((status+ret)) @@ -1541,8 +1554,8 @@ ret=0 cd signer || exit 1 $SIGNER -SDQ -o example example.db > /dev/null 2>&1 ) || ret=1 -grep " $keyid2 " signer/example.db.signed > /dev/null 2>&1 && ret=1 -grep " $keyid3 " signer/example.db.signed > /dev/null 2>&1 || ret=1 +get_rsasha1_key_ids_from_sigs | grep "^$keyid2$" > /dev/null && ret=1 +get_rsasha1_key_ids_from_sigs | grep "^$keyid3$" > /dev/null || ret=1 n=$((n+1)) test "$ret" -eq 0 || echo_i "failed" status=$((status+ret))