mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-11 00:09:59 -04:00
parent
ea5e1ad762
commit
5432e365d5
1 changed files with 14 additions and 11 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue