Merge branch '4149-make-isc_result-tables-more-compact' into 'main'

Make isc_result tables smaller

Closes #4149

See merge request isc-projects/bind9!8034
This commit is contained in:
Ondřej Surý
2023-06-15 13:46:52 +00:00
4 changed files with 75 additions and 38 deletions

View File

@@ -1,3 +1,6 @@
6198. [func] Remove the holes in the isc_result_t enum to compact
the isc_result tables. [GL #4149]
6197. [bug] Fix a data race between the dns_zone and dns_catz
modules when registering/unregistering a database
update notification callback for a catalog zone.

View File

@@ -19,27 +19,14 @@
#include <dns/result.h>
#define DNS_RESULT_ISRCODE(result) (DNS_R_NOERROR == ((result)&0xFFFF0000))
dns_rcode_t
dns_result_torcode(isc_result_t result) {
dns_rcode_t rcode = dns_rcode_servfail;
if (DNS_RESULT_ISRCODE(result)) {
/*
* Rcodes can't be bigger than 12 bits, which is why we
* AND with 0xFFF instead of 0xFFFF.
*/
return ((dns_rcode_t)((result)&0xFFF));
}
/*
* Try to supply an appropriate rcode.
*/
/* Try to supply an appropriate rcode. */
switch (result) {
case DNS_R_NOERROR:
case ISC_R_SUCCESS:
rcode = dns_rcode_noerror;
break;
return (dns_rcode_noerror);
case DNS_R_FORMERR:
case ISC_R_BADBASE64:
case ISC_R_RANGE:
case ISC_R_UNEXPECTEDEND:
@@ -60,29 +47,73 @@ dns_result_torcode(isc_result_t result) {
case DNS_R_UNKNOWN:
case DNS_R_NAMETOOLONG:
case DNS_R_OPTERR:
rcode = dns_rcode_formerr;
break;
return (dns_rcode_formerr);
case DNS_R_SERVFAIL:
return (dns_rcode_servfail);
case DNS_R_NXDOMAIN:
return (dns_rcode_nxdomain);
case DNS_R_NOTIMP:
return (dns_rcode_notimp);
case DNS_R_REFUSED:
case DNS_R_DISALLOWED:
rcode = dns_rcode_refused;
break;
return (dns_rcode_refused);
case DNS_R_YXDOMAIN:
return (dns_rcode_yxdomain);
case DNS_R_YXRRSET:
return (dns_rcode_yxrrset);
case DNS_R_NXRRSET:
return (dns_rcode_nxrrset);
case DNS_R_NOTAUTH:
case DNS_R_TSIGVERIFYFAILURE:
case DNS_R_CLOCKSKEW:
rcode = dns_rcode_notauth;
break;
return (dns_rcode_notauth);
case DNS_R_NOTZONE:
return (dns_rcode_notzone);
case DNS_R_RCODE11:
case DNS_R_RCODE12:
case DNS_R_RCODE13:
case DNS_R_RCODE14:
case DNS_R_RCODE15:
return (result - DNS_R_NOERROR);
case DNS_R_BADVERS:
return (dns_rcode_badvers);
case DNS_R_BADCOOKIE:
return (dns_rcode_badcookie);
default:
rcode = dns_rcode_servfail;
return (dns_rcode_servfail);
}
return (rcode);
}
isc_result_t
dns_result_fromrcode(dns_rcode_t rcode) {
/*
* Rcodes can't be bigger than 12 bits, which is why we
* AND with 0xFFF instead of 0xFFFF.
*/
REQUIRE((rcode & 0xFFF) == rcode);
return ((isc_result_t)rcode + DNS_R_NOERROR);
switch (rcode) {
case dns_rcode_noerror:
return (DNS_R_NOERROR);
case dns_rcode_formerr:
return (DNS_R_FORMERR);
case dns_rcode_servfail:
return (DNS_R_SERVFAIL);
case dns_rcode_nxdomain:
return (DNS_R_NXDOMAIN);
case dns_rcode_notimp:
return (DNS_R_NOTIMP);
case dns_rcode_refused:
return (DNS_R_REFUSED);
case dns_rcode_yxdomain:
return (DNS_R_YXDOMAIN);
case dns_rcode_yxrrset:
return (DNS_R_YXRRSET);
case dns_rcode_nxrrset:
return (DNS_R_NXRRSET);
case dns_rcode_notauth:
return (DNS_R_NOTAUTH);
case dns_rcode_notzone:
return (DNS_R_NOTZONE);
case dns_rcode_badvers:
return (DNS_R_BADVERS);
case dns_rcode_badcookie:
return (DNS_R_BADCOOKIE);
default:
return (DNS_R_SERVFAIL);
}
}

View File

@@ -97,7 +97,7 @@ typedef enum isc_result {
ISC_R_DOTALPNERROR, /*%< ALPN for DoT failed */
ISC_R_INVALIDPROTO, /*%< invalid protocol */
DNS_R_LABELTOOLONG = 1 << 16,
DNS_R_LABELTOOLONG,
DNS_R_BADESCAPE,
DNS_R_EMPTYLABEL,
DNS_R_BADDOTTEDQUAD,
@@ -227,7 +227,7 @@ typedef enum isc_result {
DNS_R_NOALPN,
DNS_R_NODOHPATH,
DST_R_UNSUPPORTEDALG = 2 << 16,
DST_R_UNSUPPORTEDALG,
DST_R_CRYPTOFAILURE,
/* compat */
DST_R_OPENSSLFAILURE = DST_R_CRYPTOFAILURE,
@@ -248,7 +248,7 @@ typedef enum isc_result {
DST_R_NOENGINE,
DST_R_EXTERNALKEY,
DNS_R_NOERROR = 3 << 16,
DNS_R_NOERROR,
DNS_R_FORMERR,
DNS_R_SERVFAIL,
DNS_R_NXDOMAIN,
@@ -265,15 +265,16 @@ typedef enum isc_result {
DNS_R_RCODE14,
DNS_R_RCODE15,
DNS_R_BADVERS,
DNS_R_BADCOOKIE = DNS_R_NOERROR + 23,
ISCCC_R_UNKNOWNVERSION = 5 << 16,
ISCCC_R_UNKNOWNVERSION,
ISCCC_R_SYNTAX,
ISCCC_R_BADAUTH,
ISCCC_R_EXPIRED,
ISCCC_R_CLOCKSKEW,
ISCCC_R_DUPLICATE,
ISC_R_NRESULTS = ISCCC_R_DUPLICATE + 1, /*% The number of results. */
ISC_R_NRESULTS, /*% The number of results. */
ISC_R_MAKE_ENUM_32BIT = INT32_MAX,
} isc_result_t;

View File

@@ -262,6 +262,7 @@ static const char *description[ISC_R_NRESULTS] = {
[DNS_R_RCODE14] = "<rcode 14>",
[DNS_R_RCODE15] = "<rcode 15>",
[DNS_R_BADVERS] = "BADVERS",
[DNS_R_BADCOOKIE] = "BADCOOKIE",
[ISCCC_R_UNKNOWNVERSION] = "unknown version",
[ISCCC_R_SYNTAX] = "syntax error",
@@ -512,6 +513,7 @@ static const char *identifier[ISC_R_NRESULTS] = {
[DNS_R_RCODE14] = "DNS_R_RCODE14",
[DNS_R_RCODE15] = "DNS_R_RCODE15",
[DNS_R_BADVERS] = "DNS_R_BADVERS",
[DNS_R_BADCOOKIE] = "DNS_R_BADCOOKIE",
[ISCCC_R_UNKNOWNVERSION] = "ISCCC_R_UNKNOWNVERSION",
[ISCCC_R_SYNTAX] = "ISCCC_R_SYNTAX",