1*00b67f09SDavid van Moolenbroek /* $NetBSD: result.c,v 1.6 2014/12/10 04:37:58 christos Exp $ */
2*00b67f09SDavid van Moolenbroek
3*00b67f09SDavid van Moolenbroek /*
4*00b67f09SDavid van Moolenbroek * Copyright (C) 2004, 2005, 2007-2013 Internet Systems Consortium, Inc. ("ISC")
5*00b67f09SDavid van Moolenbroek * Copyright (C) 1998-2003 Internet Software Consortium.
6*00b67f09SDavid van Moolenbroek *
7*00b67f09SDavid van Moolenbroek * Permission to use, copy, modify, and/or distribute this software for any
8*00b67f09SDavid van Moolenbroek * purpose with or without fee is hereby granted, provided that the above
9*00b67f09SDavid van Moolenbroek * copyright notice and this permission notice appear in all copies.
10*00b67f09SDavid van Moolenbroek *
11*00b67f09SDavid van Moolenbroek * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
12*00b67f09SDavid van Moolenbroek * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13*00b67f09SDavid van Moolenbroek * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
14*00b67f09SDavid van Moolenbroek * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15*00b67f09SDavid van Moolenbroek * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
16*00b67f09SDavid van Moolenbroek * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*00b67f09SDavid van Moolenbroek * PERFORMANCE OF THIS SOFTWARE.
18*00b67f09SDavid van Moolenbroek */
19*00b67f09SDavid van Moolenbroek
20*00b67f09SDavid van Moolenbroek /* Id */
21*00b67f09SDavid van Moolenbroek
22*00b67f09SDavid van Moolenbroek /*! \file */
23*00b67f09SDavid van Moolenbroek
24*00b67f09SDavid van Moolenbroek #include <config.h>
25*00b67f09SDavid van Moolenbroek
26*00b67f09SDavid van Moolenbroek #include <isc/once.h>
27*00b67f09SDavid van Moolenbroek #include <isc/util.h>
28*00b67f09SDavid van Moolenbroek
29*00b67f09SDavid van Moolenbroek #include <dns/result.h>
30*00b67f09SDavid van Moolenbroek #include <dns/lib.h>
31*00b67f09SDavid van Moolenbroek
32*00b67f09SDavid van Moolenbroek static const char *text[DNS_R_NRESULTS] = {
33*00b67f09SDavid van Moolenbroek "label too long", /*%< 0 DNS_R_LABELTOOLONG */
34*00b67f09SDavid van Moolenbroek "bad escape", /*%< 1 DNS_R_BADESCAPE */
35*00b67f09SDavid van Moolenbroek /*!
36*00b67f09SDavid van Moolenbroek * Note that DNS_R_BADBITSTRING and DNS_R_BITSTRINGTOOLONG are
37*00b67f09SDavid van Moolenbroek * deprecated.
38*00b67f09SDavid van Moolenbroek */
39*00b67f09SDavid van Moolenbroek "bad bitstring", /*%< 2 DNS_R_BADBITSTRING */
40*00b67f09SDavid van Moolenbroek "bitstring too long", /*%< 3 DNS_R_BITSTRINGTOOLONG */
41*00b67f09SDavid van Moolenbroek "empty label", /*%< 4 DNS_R_EMPTYLABEL */
42*00b67f09SDavid van Moolenbroek
43*00b67f09SDavid van Moolenbroek "bad dotted quad", /*%< 5 DNS_R_BADDOTTEDQUAD */
44*00b67f09SDavid van Moolenbroek "invalid NS owner name (wildcard)", /*%< 6 DNS_R_INVALIDNS */
45*00b67f09SDavid van Moolenbroek "unknown class/type", /*%< 7 DNS_R_UNKNOWN */
46*00b67f09SDavid van Moolenbroek "bad label type", /*%< 8 DNS_R_BADLABELTYPE */
47*00b67f09SDavid van Moolenbroek "bad compression pointer", /*%< 9 DNS_R_BADPOINTER */
48*00b67f09SDavid van Moolenbroek
49*00b67f09SDavid van Moolenbroek "too many hops", /*%< 10 DNS_R_TOOMANYHOPS */
50*00b67f09SDavid van Moolenbroek "disallowed (by application policy)", /*%< 11 DNS_R_DISALLOWED */
51*00b67f09SDavid van Moolenbroek "extra input text", /*%< 12 DNS_R_EXTRATOKEN */
52*00b67f09SDavid van Moolenbroek "extra input data", /*%< 13 DNS_R_EXTRADATA */
53*00b67f09SDavid van Moolenbroek "text too long", /*%< 14 DNS_R_TEXTTOOLONG */
54*00b67f09SDavid van Moolenbroek
55*00b67f09SDavid van Moolenbroek "not at top of zone", /*%< 15 DNS_R_NOTZONETOP */
56*00b67f09SDavid van Moolenbroek "syntax error", /*%< 16 DNS_R_SYNTAX */
57*00b67f09SDavid van Moolenbroek "bad checksum", /*%< 17 DNS_R_BADCKSUM */
58*00b67f09SDavid van Moolenbroek "bad IPv6 address", /*%< 18 DNS_R_BADAAAA */
59*00b67f09SDavid van Moolenbroek "no owner", /*%< 19 DNS_R_NOOWNER */
60*00b67f09SDavid van Moolenbroek
61*00b67f09SDavid van Moolenbroek "no ttl", /*%< 20 DNS_R_NOTTL */
62*00b67f09SDavid van Moolenbroek "bad class", /*%< 21 DNS_R_BADCLASS */
63*00b67f09SDavid van Moolenbroek "name too long", /*%< 22 DNS_R_NAMETOOLONG */
64*00b67f09SDavid van Moolenbroek "partial match", /*%< 23 DNS_R_PARTIALMATCH */
65*00b67f09SDavid van Moolenbroek "new origin", /*%< 24 DNS_R_NEWORIGIN */
66*00b67f09SDavid van Moolenbroek
67*00b67f09SDavid van Moolenbroek "unchanged", /*%< 25 DNS_R_UNCHANGED */
68*00b67f09SDavid van Moolenbroek "bad ttl", /*%< 26 DNS_R_BADTTL */
69*00b67f09SDavid van Moolenbroek "more data needed/to be rendered", /*%< 27 DNS_R_NOREDATA */
70*00b67f09SDavid van Moolenbroek "continue", /*%< 28 DNS_R_CONTINUE */
71*00b67f09SDavid van Moolenbroek "delegation", /*%< 29 DNS_R_DELEGATION */
72*00b67f09SDavid van Moolenbroek
73*00b67f09SDavid van Moolenbroek "glue", /*%< 30 DNS_R_GLUE */
74*00b67f09SDavid van Moolenbroek "dname", /*%< 31 DNS_R_DNAME */
75*00b67f09SDavid van Moolenbroek "cname", /*%< 32 DNS_R_CNAME */
76*00b67f09SDavid van Moolenbroek "bad database", /*%< 33 DNS_R_BADDB */
77*00b67f09SDavid van Moolenbroek "zonecut", /*%< 34 DNS_R_ZONECUT */
78*00b67f09SDavid van Moolenbroek
79*00b67f09SDavid van Moolenbroek "bad zone", /*%< 35 DNS_R_BADZONE */
80*00b67f09SDavid van Moolenbroek "more data", /*%< 36 DNS_R_MOREDATA */
81*00b67f09SDavid van Moolenbroek "up to date", /*%< 37 DNS_R_UPTODATE */
82*00b67f09SDavid van Moolenbroek "tsig verify failure", /*%< 38 DNS_R_TSIGVERIFYFAILURE */
83*00b67f09SDavid van Moolenbroek "tsig indicates error", /*%< 39 DNS_R_TSIGERRORSET */
84*00b67f09SDavid van Moolenbroek
85*00b67f09SDavid van Moolenbroek "RRSIG failed to verify", /*%< 40 DNS_R_SIGINVALID */
86*00b67f09SDavid van Moolenbroek "RRSIG has expired", /*%< 41 DNS_R_SIGEXPIRED */
87*00b67f09SDavid van Moolenbroek "RRSIG validity period has not begun", /*%< 42 DNS_R_SIGFUTURE */
88*00b67f09SDavid van Moolenbroek "key is unauthorized to sign data", /*%< 43 DNS_R_KEYUNAUTHORIZED */
89*00b67f09SDavid van Moolenbroek "invalid time", /*%< 44 DNS_R_INVALIDTIME */
90*00b67f09SDavid van Moolenbroek
91*00b67f09SDavid van Moolenbroek "expected a TSIG or SIG(0)", /*%< 45 DNS_R_EXPECTEDTSIG */
92*00b67f09SDavid van Moolenbroek "did not expect a TSIG or SIG(0)", /*%< 46 DNS_R_UNEXPECTEDTSIG */
93*00b67f09SDavid van Moolenbroek "TKEY is unacceptable", /*%< 47 DNS_R_INVALIDTKEY */
94*00b67f09SDavid van Moolenbroek "hint", /*%< 48 DNS_R_HINT */
95*00b67f09SDavid van Moolenbroek "drop", /*%< 49 DNS_R_DROP */
96*00b67f09SDavid van Moolenbroek
97*00b67f09SDavid van Moolenbroek "zone not loaded", /*%< 50 DNS_R_NOTLOADED */
98*00b67f09SDavid van Moolenbroek "ncache nxdomain", /*%< 51 DNS_R_NCACHENXDOMAIN */
99*00b67f09SDavid van Moolenbroek "ncache nxrrset", /*%< 52 DNS_R_NCACHENXRRSET */
100*00b67f09SDavid van Moolenbroek "wait", /*%< 53 DNS_R_WAIT */
101*00b67f09SDavid van Moolenbroek "not verified yet", /*%< 54 DNS_R_NOTVERIFIEDYET */
102*00b67f09SDavid van Moolenbroek
103*00b67f09SDavid van Moolenbroek "no identity", /*%< 55 DNS_R_NOIDENTITY */
104*00b67f09SDavid van Moolenbroek "no journal", /*%< 56 DNS_R_NOJOURNAL */
105*00b67f09SDavid van Moolenbroek "alias", /*%< 57 DNS_R_ALIAS */
106*00b67f09SDavid van Moolenbroek "use TCP", /*%< 58 DNS_R_USETCP */
107*00b67f09SDavid van Moolenbroek "no valid RRSIG", /*%< 59 DNS_R_NOVALIDSIG */
108*00b67f09SDavid van Moolenbroek
109*00b67f09SDavid van Moolenbroek "no valid NSEC", /*%< 60 DNS_R_NOVALIDNSEC */
110*00b67f09SDavid van Moolenbroek "insecurity proof failed", /*%< 61 DNS_R_NOTINSECURE */
111*00b67f09SDavid van Moolenbroek "unknown service", /*%< 62 DNS_R_UNKNOWNSERVICE */
112*00b67f09SDavid van Moolenbroek "recoverable error occurred", /*%< 63 DNS_R_RECOVERABLE */
113*00b67f09SDavid van Moolenbroek "unknown opt attribute record", /*%< 64 DNS_R_UNKNOWNOPT */
114*00b67f09SDavid van Moolenbroek
115*00b67f09SDavid van Moolenbroek "unexpected message id", /*%< 65 DNS_R_UNEXPECTEDID */
116*00b67f09SDavid van Moolenbroek "seen include file", /*%< 66 DNS_R_SEENINCLUDE */
117*00b67f09SDavid van Moolenbroek "not exact", /*%< 67 DNS_R_NOTEXACT */
118*00b67f09SDavid van Moolenbroek "address blackholed", /*%< 68 DNS_R_BLACKHOLED */
119*00b67f09SDavid van Moolenbroek "bad algorithm", /*%< 69 DNS_R_BADALG */
120*00b67f09SDavid van Moolenbroek
121*00b67f09SDavid van Moolenbroek "invalid use of a meta type", /*%< 70 DNS_R_METATYPE */
122*00b67f09SDavid van Moolenbroek "CNAME and other data", /*%< 71 DNS_R_CNAMEANDOTHER */
123*00b67f09SDavid van Moolenbroek "multiple RRs of singleton type", /*%< 72 DNS_R_SINGLETON */
124*00b67f09SDavid van Moolenbroek "hint nxrrset", /*%< 73 DNS_R_HINTNXRRSET */
125*00b67f09SDavid van Moolenbroek "no master file configured", /*%< 74 DNS_R_NOMASTERFILE */
126*00b67f09SDavid van Moolenbroek
127*00b67f09SDavid van Moolenbroek "unknown protocol", /*%< 75 DNS_R_UNKNOWNPROTO */
128*00b67f09SDavid van Moolenbroek "clocks are unsynchronized", /*%< 76 DNS_R_CLOCKSKEW */
129*00b67f09SDavid van Moolenbroek "IXFR failed", /*%< 77 DNS_R_BADIXFR */
130*00b67f09SDavid van Moolenbroek "not authoritative", /*%< 78 DNS_R_NOTAUTHORITATIVE */
131*00b67f09SDavid van Moolenbroek "no valid KEY", /*%< 79 DNS_R_NOVALIDKEY */
132*00b67f09SDavid van Moolenbroek
133*00b67f09SDavid van Moolenbroek "obsolete", /*%< 80 DNS_R_OBSOLETE */
134*00b67f09SDavid van Moolenbroek "already frozen", /*%< 81 DNS_R_FROZEN */
135*00b67f09SDavid van Moolenbroek "unknown flag", /*%< 82 DNS_R_UNKNOWNFLAG */
136*00b67f09SDavid van Moolenbroek "expected a response", /*%< 83 DNS_R_EXPECTEDRESPONSE */
137*00b67f09SDavid van Moolenbroek "no valid DS", /*%< 84 DNS_R_NOVALIDDS */
138*00b67f09SDavid van Moolenbroek
139*00b67f09SDavid van Moolenbroek "NS is an address", /*%< 85 DNS_R_NSISADDRESS */
140*00b67f09SDavid van Moolenbroek "received FORMERR", /*%< 86 DNS_R_REMOTEFORMERR */
141*00b67f09SDavid van Moolenbroek "truncated TCP response", /*%< 87 DNS_R_TRUNCATEDTCP */
142*00b67f09SDavid van Moolenbroek "lame server detected", /*%< 88 DNS_R_LAME */
143*00b67f09SDavid van Moolenbroek "unexpected RCODE", /*%< 89 DNS_R_UNEXPECTEDRCODE */
144*00b67f09SDavid van Moolenbroek
145*00b67f09SDavid van Moolenbroek "unexpected OPCODE", /*%< 90 DNS_R_UNEXPECTEDOPCODE */
146*00b67f09SDavid van Moolenbroek "chase DS servers", /*%< 91 DNS_R_CHASEDSSERVERS */
147*00b67f09SDavid van Moolenbroek "empty name", /*%< 92 DNS_R_EMPTYNAME */
148*00b67f09SDavid van Moolenbroek "empty wild", /*%< 93 DNS_R_EMPTYWILD */
149*00b67f09SDavid van Moolenbroek "bad bitmap", /*%< 94 DNS_R_BADBITMAP */
150*00b67f09SDavid van Moolenbroek
151*00b67f09SDavid van Moolenbroek "from wildcard", /*%< 95 DNS_R_FROMWILDCARD */
152*00b67f09SDavid van Moolenbroek "bad owner name (check-names)", /*%< 96 DNS_R_BADOWNERNAME */
153*00b67f09SDavid van Moolenbroek "bad name (check-names)", /*%< 97 DNS_R_BADNAME */
154*00b67f09SDavid van Moolenbroek "dynamic zone", /*%< 98 DNS_R_DYNAMIC */
155*00b67f09SDavid van Moolenbroek "unknown command", /*%< 99 DNS_R_UNKNOWNCOMMAND */
156*00b67f09SDavid van Moolenbroek
157*00b67f09SDavid van Moolenbroek "must-be-secure", /*%< 100 DNS_R_MUSTBESECURE */
158*00b67f09SDavid van Moolenbroek "covering NSEC record returned", /*%< 101 DNS_R_COVERINGNSEC */
159*00b67f09SDavid van Moolenbroek "MX is an address", /*%< 102 DNS_R_MXISADDRESS */
160*00b67f09SDavid van Moolenbroek "duplicate query", /*%< 103 DNS_R_DUPLICATE */
161*00b67f09SDavid van Moolenbroek "invalid NSEC3 owner name (wildcard)", /*%< 104 DNS_R_INVALIDNSEC3 */
162*00b67f09SDavid van Moolenbroek
163*00b67f09SDavid van Moolenbroek "not master", /*%< 105 DNS_R_NOTMASTER */
164*00b67f09SDavid van Moolenbroek "broken trust chain", /*%< 106 DNS_R_BROKENCHAIN */
165*00b67f09SDavid van Moolenbroek "expired", /*%< 107 DNS_R_EXPIRED */
166*00b67f09SDavid van Moolenbroek "not dynamic", /*%< 108 DNS_R_NOTDYNAMIC */
167*00b67f09SDavid van Moolenbroek "bad EUI" /*%< 109 DNS_R_BADEUI */
168*00b67f09SDavid van Moolenbroek };
169*00b67f09SDavid van Moolenbroek
170*00b67f09SDavid van Moolenbroek static const char *rcode_text[DNS_R_NRCODERESULTS] = {
171*00b67f09SDavid van Moolenbroek "NOERROR", /*%< 0 DNS_R_NOEROR */
172*00b67f09SDavid van Moolenbroek "FORMERR", /*%< 1 DNS_R_FORMERR */
173*00b67f09SDavid van Moolenbroek "SERVFAIL", /*%< 2 DNS_R_SERVFAIL */
174*00b67f09SDavid van Moolenbroek "NXDOMAIN", /*%< 3 DNS_R_NXDOMAIN */
175*00b67f09SDavid van Moolenbroek "NOTIMP", /*%< 4 DNS_R_NOTIMP */
176*00b67f09SDavid van Moolenbroek
177*00b67f09SDavid van Moolenbroek "REFUSED", /*%< 5 DNS_R_REFUSED */
178*00b67f09SDavid van Moolenbroek "YXDOMAIN", /*%< 6 DNS_R_YXDOMAIN */
179*00b67f09SDavid van Moolenbroek "YXRRSET", /*%< 7 DNS_R_YXRRSET */
180*00b67f09SDavid van Moolenbroek "NXRRSET", /*%< 8 DNS_R_NXRRSET */
181*00b67f09SDavid van Moolenbroek "NOTAUTH", /*%< 9 DNS_R_NOTAUTH */
182*00b67f09SDavid van Moolenbroek
183*00b67f09SDavid van Moolenbroek "NOTZONE", /*%< 10 DNS_R_NOTZONE */
184*00b67f09SDavid van Moolenbroek "<rcode 11>", /*%< 11 has no macro */
185*00b67f09SDavid van Moolenbroek "<rcode 12>", /*%< 12 has no macro */
186*00b67f09SDavid van Moolenbroek "<rcode 13>", /*%< 13 has no macro */
187*00b67f09SDavid van Moolenbroek "<rcode 14>", /*%< 14 has no macro */
188*00b67f09SDavid van Moolenbroek
189*00b67f09SDavid van Moolenbroek "<rcode 15>", /*%< 15 has no macro */
190*00b67f09SDavid van Moolenbroek "BADVERS", /*%< 16 DNS_R_BADVERS */
191*00b67f09SDavid van Moolenbroek };
192*00b67f09SDavid van Moolenbroek
193*00b67f09SDavid van Moolenbroek #define DNS_RESULT_RESULTSET 2
194*00b67f09SDavid van Moolenbroek #define DNS_RESULT_RCODERESULTSET 3
195*00b67f09SDavid van Moolenbroek
196*00b67f09SDavid van Moolenbroek static isc_once_t once = ISC_ONCE_INIT;
197*00b67f09SDavid van Moolenbroek
198*00b67f09SDavid van Moolenbroek static void
initialize_action(void)199*00b67f09SDavid van Moolenbroek initialize_action(void) {
200*00b67f09SDavid van Moolenbroek isc_result_t result;
201*00b67f09SDavid van Moolenbroek
202*00b67f09SDavid van Moolenbroek result = isc_result_register(ISC_RESULTCLASS_DNS, DNS_R_NRESULTS,
203*00b67f09SDavid van Moolenbroek text, dns_msgcat, DNS_RESULT_RESULTSET);
204*00b67f09SDavid van Moolenbroek if (result == ISC_R_SUCCESS)
205*00b67f09SDavid van Moolenbroek result = isc_result_register(ISC_RESULTCLASS_DNSRCODE,
206*00b67f09SDavid van Moolenbroek DNS_R_NRCODERESULTS,
207*00b67f09SDavid van Moolenbroek rcode_text, dns_msgcat,
208*00b67f09SDavid van Moolenbroek DNS_RESULT_RCODERESULTSET);
209*00b67f09SDavid van Moolenbroek if (result != ISC_R_SUCCESS)
210*00b67f09SDavid van Moolenbroek UNEXPECTED_ERROR(__FILE__, __LINE__,
211*00b67f09SDavid van Moolenbroek "isc_result_register() failed: %u", result);
212*00b67f09SDavid van Moolenbroek }
213*00b67f09SDavid van Moolenbroek
214*00b67f09SDavid van Moolenbroek static void
initialize(void)215*00b67f09SDavid van Moolenbroek initialize(void) {
216*00b67f09SDavid van Moolenbroek dns_lib_initmsgcat();
217*00b67f09SDavid van Moolenbroek RUNTIME_CHECK(isc_once_do(&once, initialize_action) == ISC_R_SUCCESS);
218*00b67f09SDavid van Moolenbroek }
219*00b67f09SDavid van Moolenbroek
220*00b67f09SDavid van Moolenbroek const char *
dns_result_totext(isc_result_t result)221*00b67f09SDavid van Moolenbroek dns_result_totext(isc_result_t result) {
222*00b67f09SDavid van Moolenbroek initialize();
223*00b67f09SDavid van Moolenbroek
224*00b67f09SDavid van Moolenbroek return (isc_result_totext(result));
225*00b67f09SDavid van Moolenbroek }
226*00b67f09SDavid van Moolenbroek
227*00b67f09SDavid van Moolenbroek void
dns_result_register(void)228*00b67f09SDavid van Moolenbroek dns_result_register(void) {
229*00b67f09SDavid van Moolenbroek initialize();
230*00b67f09SDavid van Moolenbroek }
231*00b67f09SDavid van Moolenbroek
232*00b67f09SDavid van Moolenbroek dns_rcode_t
dns_result_torcode(isc_result_t result)233*00b67f09SDavid van Moolenbroek dns_result_torcode(isc_result_t result) {
234*00b67f09SDavid van Moolenbroek dns_rcode_t rcode = dns_rcode_servfail;
235*00b67f09SDavid van Moolenbroek
236*00b67f09SDavid van Moolenbroek if (DNS_RESULT_ISRCODE(result)) {
237*00b67f09SDavid van Moolenbroek /*
238*00b67f09SDavid van Moolenbroek * Rcodes can't be bigger than 12 bits, which is why we
239*00b67f09SDavid van Moolenbroek * AND with 0xFFF instead of 0xFFFF.
240*00b67f09SDavid van Moolenbroek */
241*00b67f09SDavid van Moolenbroek return ((dns_rcode_t)((result) & 0xFFF));
242*00b67f09SDavid van Moolenbroek }
243*00b67f09SDavid van Moolenbroek /*
244*00b67f09SDavid van Moolenbroek * Try to supply an appropriate rcode.
245*00b67f09SDavid van Moolenbroek */
246*00b67f09SDavid van Moolenbroek switch (result) {
247*00b67f09SDavid van Moolenbroek case ISC_R_SUCCESS:
248*00b67f09SDavid van Moolenbroek rcode = dns_rcode_noerror;
249*00b67f09SDavid van Moolenbroek break;
250*00b67f09SDavid van Moolenbroek case ISC_R_BADBASE64:
251*00b67f09SDavid van Moolenbroek case ISC_R_NOSPACE:
252*00b67f09SDavid van Moolenbroek case ISC_R_RANGE:
253*00b67f09SDavid van Moolenbroek case ISC_R_UNEXPECTEDEND:
254*00b67f09SDavid van Moolenbroek case DNS_R_BADAAAA:
255*00b67f09SDavid van Moolenbroek /* case DNS_R_BADBITSTRING: deprecated */
256*00b67f09SDavid van Moolenbroek case DNS_R_BADCKSUM:
257*00b67f09SDavid van Moolenbroek case DNS_R_BADCLASS:
258*00b67f09SDavid van Moolenbroek case DNS_R_BADLABELTYPE:
259*00b67f09SDavid van Moolenbroek case DNS_R_BADPOINTER:
260*00b67f09SDavid van Moolenbroek case DNS_R_BADTTL:
261*00b67f09SDavid van Moolenbroek case DNS_R_BADZONE:
262*00b67f09SDavid van Moolenbroek /* case DNS_R_BITSTRINGTOOLONG: deprecated */
263*00b67f09SDavid van Moolenbroek case DNS_R_EXTRADATA:
264*00b67f09SDavid van Moolenbroek case DNS_R_LABELTOOLONG:
265*00b67f09SDavid van Moolenbroek case DNS_R_NOREDATA:
266*00b67f09SDavid van Moolenbroek case DNS_R_SYNTAX:
267*00b67f09SDavid van Moolenbroek case DNS_R_TEXTTOOLONG:
268*00b67f09SDavid van Moolenbroek case DNS_R_TOOMANYHOPS:
269*00b67f09SDavid van Moolenbroek case DNS_R_TSIGERRORSET:
270*00b67f09SDavid van Moolenbroek case DNS_R_UNKNOWN:
271*00b67f09SDavid van Moolenbroek case DNS_R_NAMETOOLONG:
272*00b67f09SDavid van Moolenbroek rcode = dns_rcode_formerr;
273*00b67f09SDavid van Moolenbroek break;
274*00b67f09SDavid van Moolenbroek case DNS_R_DISALLOWED:
275*00b67f09SDavid van Moolenbroek rcode = dns_rcode_refused;
276*00b67f09SDavid van Moolenbroek break;
277*00b67f09SDavid van Moolenbroek case DNS_R_TSIGVERIFYFAILURE:
278*00b67f09SDavid van Moolenbroek case DNS_R_CLOCKSKEW:
279*00b67f09SDavid van Moolenbroek rcode = dns_rcode_notauth;
280*00b67f09SDavid van Moolenbroek break;
281*00b67f09SDavid van Moolenbroek default:
282*00b67f09SDavid van Moolenbroek rcode = dns_rcode_servfail;
283*00b67f09SDavid van Moolenbroek }
284*00b67f09SDavid van Moolenbroek
285*00b67f09SDavid van Moolenbroek return (rcode);
286*00b67f09SDavid van Moolenbroek }
287