From 26f817f574cdf835a4fa6f7d16629d4c1a7f74bc Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Tue, 22 Feb 2022 12:29:41 +1100 Subject: [PATCH] Return ISC_R_NOTIMPLEMENTED rather than ISC_R_UNEXPECTEDEND If the keydata rdata is shorter that 16 octets it is not out private keydata type and we have not implemented a tostruct method for it. --- lib/dns/include/dns/rdata.h | 1 - lib/dns/rdata/generic/keydata_65533.c | 18 ++++++++++++------ lib/dns/zone.c | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/dns/include/dns/rdata.h b/lib/dns/include/dns/rdata.h index a6e22e7e59..03298c7c71 100644 --- a/lib/dns/include/dns/rdata.h +++ b/lib/dns/include/dns/rdata.h @@ -524,7 +524,6 @@ dns_rdata_tostruct(const dns_rdata_t *rdata, void *target, isc_mem_t *mctx); * Result: *\li Success *\li Not Implemented - *\li Unexpected end of input */ void diff --git a/lib/dns/rdata/generic/keydata_65533.c b/lib/dns/rdata/generic/keydata_65533.c index c5670d01ab..bfd0994d13 100644 --- a/lib/dns/rdata/generic/keydata_65533.c +++ b/lib/dns/rdata/generic/keydata_65533.c @@ -341,42 +341,48 @@ tostruct_keydata(ARGS_TOSTRUCT) { /* Refresh timer */ if (sr.length < 4) { - return (ISC_R_UNEXPECTEDEND); + /* Not KEYDATA */ + return (ISC_R_NOTIMPLEMENTED); } keydata->refresh = uint32_fromregion(&sr); isc_region_consume(&sr, 4); /* Add hold-down */ if (sr.length < 4) { - return (ISC_R_UNEXPECTEDEND); + /* Not KEYDATA */ + return (ISC_R_NOTIMPLEMENTED); } keydata->addhd = uint32_fromregion(&sr); isc_region_consume(&sr, 4); /* Remove hold-down */ if (sr.length < 4) { - return (ISC_R_UNEXPECTEDEND); + /* Not KEYDATA */ + return (ISC_R_NOTIMPLEMENTED); } keydata->removehd = uint32_fromregion(&sr); isc_region_consume(&sr, 4); /* Flags */ if (sr.length < 2) { - return (ISC_R_UNEXPECTEDEND); + /* Not KEYDATA */ + return (ISC_R_NOTIMPLEMENTED); } keydata->flags = uint16_fromregion(&sr); isc_region_consume(&sr, 2); /* Protocol */ if (sr.length < 1) { - return (ISC_R_UNEXPECTEDEND); + /* Not KEYDATA */ + return (ISC_R_NOTIMPLEMENTED); } keydata->protocol = uint8_fromregion(&sr); isc_region_consume(&sr, 1); /* Algorithm */ if (sr.length < 1) { - return (ISC_R_UNEXPECTEDEND); + /* Not KEYDATA */ + return (ISC_R_NOTIMPLEMENTED); } keydata->algorithm = uint8_fromregion(&sr); isc_region_consume(&sr, 1); diff --git a/lib/dns/zone.c b/lib/dns/zone.c index ca9bbaec4c..7f9f8edcba 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -4362,7 +4362,7 @@ load_secroots(dns_zone_t *zone, dns_name_t *name, dns_rdataset_t *rdataset) { /* Convert rdata to keydata. */ result = dns_rdata_tostruct(&rdata, &keydata, NULL); - if (result == ISC_R_UNEXPECTEDEND) { + if (result == ISC_R_NOTIMPLEMENTED) { continue; } RUNTIME_CHECK(result == ISC_R_SUCCESS);