(cherry picked from commit 7c0d9dac9f)
This commit is contained in:
Mark Andrews 2020-01-30 06:57:51 +11:00
parent ea5e1ad762
commit 5432e365d5

View file

@ -18985,6 +18985,8 @@ dns_zone_cdscheck(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *version) {
unsigned char algorithms[256];
unsigned int i;
enum { notexpected = 0, expected = 1, found = 2 };
REQUIRE(DNS_ZONE_VALID(zone));
result = dns_db_getoriginnode(db, &node);
@ -19036,7 +19038,7 @@ dns_zone_cdscheck(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *version) {
*/
if (dns_rdataset_isassociated(&cds)) {
bool delete = false;
memset(algorithms, 0, sizeof(algorithms));
memset(algorithms, notexpected, sizeof(algorithms));
for (result = dns_rdataset_first(&cds);
result == ISC_R_SUCCESS;
result = dns_rdataset_next(&cds)) {
@ -19056,7 +19058,7 @@ dns_zone_cdscheck(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *version) {
}
CHECK(dns_rdata_tostruct(&crdata, &structcds, NULL));
if (algorithms[structcds.algorithm] == 0) {
algorithms[structcds.algorithm] = 1;
algorithms[structcds.algorithm] = expected;
}
for (result = dns_rdataset_first(&dnskey);
result == ISC_R_SUCCESS;
@ -19072,7 +19074,7 @@ dns_zone_cdscheck(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *version) {
memcmp(crdata.data, dsrdata.data,
dsrdata.length) == 0)
{
algorithms[structcds.algorithm] = 2;
algorithms[structcds.algorithm] = found;
}
}
if (result != ISC_R_NOMORE) {
@ -19081,11 +19083,11 @@ dns_zone_cdscheck(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *version) {
}
for (i = 0; i < sizeof(algorithms); i++) {
if (delete) {
if (algorithms[i] != 0) {
if (algorithms[i] != notexpected) {
result = DNS_R_BADCDS;
goto failure;
}
} else if (algorithms[i] == 1) {
} else if (algorithms[i] == expected) {
result = DNS_R_BADCDS;
goto failure;
}
@ -19099,7 +19101,7 @@ dns_zone_cdscheck(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *version) {
*/
if (dns_rdataset_isassociated(&cdnskey)) {
bool delete = false;
memset(algorithms, 0, sizeof(algorithms));
memset(algorithms, notexpected, sizeof(algorithms));
for (result = dns_rdataset_first(&cdnskey);
result == ISC_R_SUCCESS;
result = dns_rdataset_next(&cdnskey)) {
@ -19113,7 +19115,7 @@ dns_zone_cdscheck(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *version) {
* and 2 zero octets.
*/
if (crdata.length == 5U &&
memcmp(crdata.data, "\0\0\003\0", 5) == 0)
memcmp(crdata.data, "\0\0\3\0", 5) == 0)
{
delete = true;
continue;
@ -19121,7 +19123,7 @@ dns_zone_cdscheck(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *version) {
CHECK(dns_rdata_tostruct(&crdata, &structcdnskey,
NULL));
if (algorithms[structcdnskey.algorithm] == 0) {
algorithms[structcdnskey.algorithm] = 1;
algorithms[structcdnskey.algorithm] = expected;
}
for (result = dns_rdataset_first(&dnskey);
result == ISC_R_SUCCESS;
@ -19133,7 +19135,8 @@ dns_zone_cdscheck(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *version) {
memcmp(crdata.data, rdata.data,
rdata.length) == 0)
{
algorithms[structcdnskey.algorithm] = 2;
algorithms[structcdnskey.algorithm] =
found;
}
}
if (result != ISC_R_NOMORE) {
@ -19142,11 +19145,11 @@ dns_zone_cdscheck(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *version) {
}
for (i = 0; i < sizeof(algorithms); i++) {
if (delete) {
if (algorithms[i] != 0) {
if (algorithms[i] != notexpected) {
result = DNS_R_BADCDNSKEY;
goto failure;
}
} else if (algorithms[i] == 1) {
} else if (algorithms[i] == expected) {
result = DNS_R_BADCDNSKEY;
goto failure;
}