diff --git a/lib/dns/result.c b/lib/dns/result.c index 86b7a8f6fb..0e695f4a95 100644 --- a/lib/dns/result.c +++ b/lib/dns/result.c @@ -19,27 +19,14 @@ #include -#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); + } }