xref: /openbsd/usr.bin/dig/lib/dns/dns_result.c (revision 1fb015a8)
15185a700Sflorian /*
25185a700Sflorian  * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
35185a700Sflorian  *
45185a700Sflorian  * Permission to use, copy, modify, and/or distribute this software for any
55185a700Sflorian  * purpose with or without fee is hereby granted, provided that the above
65185a700Sflorian  * copyright notice and this permission notice appear in all copies.
75185a700Sflorian  *
85185a700Sflorian  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
95185a700Sflorian  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
105185a700Sflorian  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
115185a700Sflorian  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
125185a700Sflorian  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
135185a700Sflorian  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
145185a700Sflorian  * PERFORMANCE OF THIS SOFTWARE.
155185a700Sflorian  */
165185a700Sflorian 
17*1fb015a8Sflorian /* $Id: dns_result.c,v 1.5 2020/09/14 08:40:43 florian Exp $ */
185185a700Sflorian 
195185a700Sflorian /*! \file */
205185a700Sflorian #include <isc/util.h>
215185a700Sflorian 
225185a700Sflorian #include <dns/result.h>
235185a700Sflorian 
245185a700Sflorian static const char *text[DNS_R_NRESULTS] = {
255185a700Sflorian 	"label too long",		       /*%< 0 DNS_R_LABELTOOLONG */
265185a700Sflorian 	"bad escape",			       /*%< 1 DNS_R_BADESCAPE */
275185a700Sflorian 	/*!
285185a700Sflorian 	 * Note that DNS_R_BADBITSTRING and DNS_R_BITSTRINGTOOLONG are
295185a700Sflorian 	 * deprecated.
305185a700Sflorian 	 */
315185a700Sflorian 	"bad bitstring",		       /*%< 2 DNS_R_BADBITSTRING */
325185a700Sflorian 	"bitstring too long",		       /*%< 3 DNS_R_BITSTRINGTOOLONG */
335185a700Sflorian 	"empty label",			       /*%< 4 DNS_R_EMPTYLABEL */
345185a700Sflorian 
355185a700Sflorian 	"bad dotted quad",		       /*%< 5 DNS_R_BADDOTTEDQUAD */
365185a700Sflorian 	"invalid NS owner name (wildcard)",    /*%< 6 DNS_R_INVALIDNS */
375185a700Sflorian 	"unknown class/type",		       /*%< 7 DNS_R_UNKNOWN */
385185a700Sflorian 	"bad label type",		       /*%< 8 DNS_R_BADLABELTYPE */
395185a700Sflorian 	"bad compression pointer",	       /*%< 9 DNS_R_BADPOINTER */
405185a700Sflorian 
415185a700Sflorian 	"too many hops",		       /*%< 10 DNS_R_TOOMANYHOPS */
425185a700Sflorian 	"disallowed (by application policy)",  /*%< 11 DNS_R_DISALLOWED */
435185a700Sflorian 	"extra input text",		       /*%< 12 DNS_R_EXTRATOKEN */
445185a700Sflorian 	"extra input data",		       /*%< 13 DNS_R_EXTRADATA */
455185a700Sflorian 	"text too long",		       /*%< 14 DNS_R_TEXTTOOLONG */
465185a700Sflorian 
475185a700Sflorian 	"not at top of zone",		       /*%< 15 DNS_R_NOTZONETOP */
485185a700Sflorian 	"syntax error",			       /*%< 16 DNS_R_SYNTAX */
495185a700Sflorian 	"bad checksum",			       /*%< 17 DNS_R_BADCKSUM */
505185a700Sflorian 	"bad IPv6 address",		       /*%< 18 DNS_R_BADAAAA */
515185a700Sflorian 	"no owner",			       /*%< 19 DNS_R_NOOWNER */
525185a700Sflorian 
535185a700Sflorian 	"no ttl",			       /*%< 20 DNS_R_NOTTL */
545185a700Sflorian 	"bad class",			       /*%< 21 DNS_R_BADCLASS */
555185a700Sflorian 	"name too long",		       /*%< 22 DNS_R_NAMETOOLONG */
565185a700Sflorian 	"partial match",		       /*%< 23 DNS_R_PARTIALMATCH */
575185a700Sflorian 	"new origin",			       /*%< 24 DNS_R_NEWORIGIN */
585185a700Sflorian 
595185a700Sflorian 	"unchanged",			       /*%< 25 DNS_R_UNCHANGED */
605185a700Sflorian 	"bad ttl",			       /*%< 26 DNS_R_BADTTL */
615185a700Sflorian 	"more data needed/to be rendered",     /*%< 27 DNS_R_NOREDATA */
625185a700Sflorian 	"continue",			       /*%< 28 DNS_R_CONTINUE */
635185a700Sflorian 	"delegation",			       /*%< 29 DNS_R_DELEGATION */
645185a700Sflorian 
655185a700Sflorian 	"glue",				       /*%< 30 DNS_R_GLUE */
665185a700Sflorian 	"dname",			       /*%< 31 DNS_R_DNAME */
675185a700Sflorian 	"cname",			       /*%< 32 DNS_R_CNAME */
685185a700Sflorian 	"bad database",			       /*%< 33 DNS_R_BADDB */
695185a700Sflorian 	"zonecut",			       /*%< 34 DNS_R_ZONECUT */
705185a700Sflorian 
715185a700Sflorian 	"bad zone",			       /*%< 35 DNS_R_BADZONE */
725185a700Sflorian 	"more data",			       /*%< 36 DNS_R_MOREDATA */
735185a700Sflorian 	"up to date",			       /*%< 37 DNS_R_UPTODATE */
745185a700Sflorian 	"tsig verify failure",		       /*%< 38 DNS_R_TSIGVERIFYFAILURE */
755185a700Sflorian 	"tsig indicates error",		       /*%< 39 DNS_R_TSIGERRORSET */
765185a700Sflorian 
775185a700Sflorian 	"RRSIG failed to verify",	       /*%< 40 DNS_R_SIGINVALID */
785185a700Sflorian 	"RRSIG has expired",		       /*%< 41 DNS_R_SIGEXPIRED */
795185a700Sflorian 	"RRSIG validity period has not begun", /*%< 42 DNS_R_SIGFUTURE */
805185a700Sflorian 	"key is unauthorized to sign data",    /*%< 43 DNS_R_KEYUNAUTHORIZED */
815185a700Sflorian 	"invalid time",			       /*%< 44 DNS_R_INVALIDTIME */
825185a700Sflorian 
835185a700Sflorian 	"expected a TSIG or SIG(0)",	       /*%< 45 DNS_R_EXPECTEDTSIG */
845185a700Sflorian 	"did not expect a TSIG or SIG(0)",     /*%< 46 DNS_R_UNEXPECTEDTSIG */
855185a700Sflorian 	"TKEY is unacceptable",		       /*%< 47 DNS_R_INVALIDTKEY */
865185a700Sflorian 	"hint",				       /*%< 48 DNS_R_HINT */
875185a700Sflorian 	"drop",				       /*%< 49 DNS_R_DROP */
885185a700Sflorian 
895185a700Sflorian 	"zone not loaded",		       /*%< 50 DNS_R_NOTLOADED */
905185a700Sflorian 	"ncache nxdomain",		       /*%< 51 DNS_R_NCACHENXDOMAIN */
915185a700Sflorian 	"ncache nxrrset",		       /*%< 52 DNS_R_NCACHENXRRSET */
925185a700Sflorian 	"wait",				       /*%< 53 DNS_R_WAIT */
935185a700Sflorian 	"not verified yet",		       /*%< 54 DNS_R_NOTVERIFIEDYET */
945185a700Sflorian 
955185a700Sflorian 	"no identity",			       /*%< 55 DNS_R_NOIDENTITY */
965185a700Sflorian 	"no journal",			       /*%< 56 DNS_R_NOJOURNAL */
975185a700Sflorian 	"alias",			       /*%< 57 DNS_R_ALIAS */
985185a700Sflorian 	"use TCP",			       /*%< 58 DNS_R_USETCP */
995185a700Sflorian 	"no valid RRSIG",		       /*%< 59 DNS_R_NOVALIDSIG */
1005185a700Sflorian 
1015185a700Sflorian 	"no valid NSEC",		       /*%< 60 DNS_R_NOVALIDNSEC */
1025185a700Sflorian 	"insecurity proof failed",	       /*%< 61 DNS_R_NOTINSECURE */
1035185a700Sflorian 	"unknown service",		       /*%< 62 DNS_R_UNKNOWNSERVICE */
1045185a700Sflorian 	"recoverable error occurred",	       /*%< 63 DNS_R_RECOVERABLE */
1055185a700Sflorian 	"unknown opt attribute record",	       /*%< 64 DNS_R_UNKNOWNOPT */
1065185a700Sflorian 
1075185a700Sflorian 	"unexpected message id",	       /*%< 65 DNS_R_UNEXPECTEDID */
1085185a700Sflorian 	"seen include file",		       /*%< 66 DNS_R_SEENINCLUDE */
1095185a700Sflorian 	"not exact",		       	       /*%< 67 DNS_R_NOTEXACT */
1105185a700Sflorian 	"address blackholed",	       	       /*%< 68 DNS_R_BLACKHOLED */
1115185a700Sflorian 	"bad algorithm",		       /*%< 69 DNS_R_BADALG */
1125185a700Sflorian 
1135185a700Sflorian 	"invalid use of a meta type",	       /*%< 70 DNS_R_METATYPE */
1145185a700Sflorian 	"CNAME and other data",		       /*%< 71 DNS_R_CNAMEANDOTHER */
1155185a700Sflorian 	"multiple RRs of singleton type",      /*%< 72 DNS_R_SINGLETON */
1165185a700Sflorian 	"hint nxrrset",			       /*%< 73 DNS_R_HINTNXRRSET */
1175185a700Sflorian 	"no master file configured",	       /*%< 74 DNS_R_NOMASTERFILE */
1185185a700Sflorian 
1195185a700Sflorian 	"unknown protocol",		       /*%< 75 DNS_R_UNKNOWNPROTO */
1205185a700Sflorian 	"clocks are unsynchronized",	       /*%< 76 DNS_R_CLOCKSKEW */
1215185a700Sflorian 	"IXFR failed",			       /*%< 77 DNS_R_BADIXFR */
1225185a700Sflorian 	"not authoritative",		       /*%< 78 DNS_R_NOTAUTHORITATIVE */
1235185a700Sflorian 	"no valid KEY",		       	       /*%< 79 DNS_R_NOVALIDKEY */
1245185a700Sflorian 
1255185a700Sflorian 	"obsolete",			       /*%< 80 DNS_R_OBSOLETE */
1265185a700Sflorian 	"already frozen",		       /*%< 81 DNS_R_FROZEN */
1275185a700Sflorian 	"unknown flag",			       /*%< 82 DNS_R_UNKNOWNFLAG */
1285185a700Sflorian 	"expected a response",		       /*%< 83 DNS_R_EXPECTEDRESPONSE */
1295185a700Sflorian 	"no valid DS",			       /*%< 84 DNS_R_NOVALIDDS */
1305185a700Sflorian 
1315185a700Sflorian 	"NS is an address",		       /*%< 85 DNS_R_NSISADDRESS */
1325185a700Sflorian 	"received FORMERR",		       /*%< 86 DNS_R_REMOTEFORMERR */
1335185a700Sflorian 	"truncated TCP response",	       /*%< 87 DNS_R_TRUNCATEDTCP */
1345185a700Sflorian 	"lame server detected",		       /*%< 88 DNS_R_LAME */
1355185a700Sflorian 	"unexpected RCODE",		       /*%< 89 DNS_R_UNEXPECTEDRCODE */
1365185a700Sflorian 
1375185a700Sflorian 	"unexpected OPCODE",		       /*%< 90 DNS_R_UNEXPECTEDOPCODE */
1385185a700Sflorian 	"chase DS servers",		       /*%< 91 DNS_R_CHASEDSSERVERS */
1395185a700Sflorian 	"empty name",			       /*%< 92 DNS_R_EMPTYNAME */
1405185a700Sflorian 	"empty wild",			       /*%< 93 DNS_R_EMPTYWILD */
1415185a700Sflorian 	"bad bitmap",			       /*%< 94 DNS_R_BADBITMAP */
1425185a700Sflorian 
1435185a700Sflorian 	"from wildcard",		       /*%< 95 DNS_R_FROMWILDCARD */
1445185a700Sflorian 	"bad owner name (check-names)",	       /*%< 96 DNS_R_BADOWNERNAME */
1455185a700Sflorian 	"bad name (check-names)",	       /*%< 97 DNS_R_BADNAME */
1465185a700Sflorian 	"dynamic zone",			       /*%< 98 DNS_R_DYNAMIC */
1475185a700Sflorian 	"unknown command",		       /*%< 99 DNS_R_UNKNOWNCOMMAND */
1485185a700Sflorian 
1495185a700Sflorian 	"must-be-secure",		       /*%< 100 DNS_R_MUSTBESECURE */
1505185a700Sflorian 	"covering NSEC record returned",       /*%< 101 DNS_R_COVERINGNSEC */
1515185a700Sflorian 	"MX is an address",		       /*%< 102 DNS_R_MXISADDRESS */
1525185a700Sflorian 	"duplicate query",		       /*%< 103 DNS_R_DUPLICATE */
1535185a700Sflorian 	"invalid NSEC3 owner name (wildcard)", /*%< 104 DNS_R_INVALIDNSEC3 */
1545185a700Sflorian 
1555185a700Sflorian 	"not master",			       /*%< 105 DNS_R_NOTMASTER */
1565185a700Sflorian 	"broken trust chain",		       /*%< 106 DNS_R_BROKENCHAIN */
1575185a700Sflorian 	"expired",			       /*%< 107 DNS_R_EXPIRED */
1585185a700Sflorian 	"not dynamic",			       /*%< 108 DNS_R_NOTDYNAMIC */
1595185a700Sflorian 	"bad EUI",			       /*%< 109 DNS_R_BADEUI */
1605185a700Sflorian 
1615185a700Sflorian 	"covered by negative trust anchor",    /*%< 110 DNS_R_NTACOVERED */
1625185a700Sflorian 	"bad CDS",			       /*%< 111 DNS_R_BADCDS */
1635185a700Sflorian 	"bad CDNSKEY",			       /*%< 112 DNS_R_BADCDNSKEY */
1645185a700Sflorian 	"malformed OPT option",		       /*%< 113 DNS_R_OPTERR */
1655185a700Sflorian 	"malformed DNSTAP data",	       /*%< 114 DNS_R_BADDNSTAP */
1665185a700Sflorian 
1675185a700Sflorian 	"TSIG in wrong location",	       /*%< 115 DNS_R_BADTSIG */
1685185a700Sflorian 	"SIG(0) in wrong location",	       /*%< 116 DNS_R_BADSIG0 */
1695185a700Sflorian 	"too many records",	               /*%< 117 DNS_R_TOOMANYRECORDS */
1705185a700Sflorian };
1715185a700Sflorian 
1725185a700Sflorian static const char *rcode_text[DNS_R_NRCODERESULTS] = {
1735185a700Sflorian 	"NOERROR",				/*%< 0 DNS_R_NOERROR */
1745185a700Sflorian 	"FORMERR",				/*%< 1 DNS_R_FORMERR */
1755185a700Sflorian 	"SERVFAIL",				/*%< 2 DNS_R_SERVFAIL */
1765185a700Sflorian 	"NXDOMAIN",				/*%< 3 DNS_R_NXDOMAIN */
1775185a700Sflorian 	"NOTIMP",				/*%< 4 DNS_R_NOTIMP */
1785185a700Sflorian 
1795185a700Sflorian 	"REFUSED",				/*%< 5 DNS_R_REFUSED */
1805185a700Sflorian 	"YXDOMAIN",				/*%< 6 DNS_R_YXDOMAIN */
1815185a700Sflorian 	"YXRRSET",				/*%< 7 DNS_R_YXRRSET */
1825185a700Sflorian 	"NXRRSET",				/*%< 8 DNS_R_NXRRSET */
1835185a700Sflorian 	"NOTAUTH",				/*%< 9 DNS_R_NOTAUTH */
1845185a700Sflorian 
1855185a700Sflorian 	"NOTZONE",				/*%< 10 DNS_R_NOTZONE */
1865185a700Sflorian 	"<rcode 11>",				/*%< 11 has no macro */
1875185a700Sflorian 	"<rcode 12>",				/*%< 12 has no macro */
1885185a700Sflorian 	"<rcode 13>",				/*%< 13 has no macro */
1895185a700Sflorian 	"<rcode 14>",				/*%< 14 has no macro */
1905185a700Sflorian 
1915185a700Sflorian 	"<rcode 15>",				/*%< 15 has no macro */
1925185a700Sflorian 	"BADVERS",				/*%< 16 DNS_R_BADVERS */
1935185a700Sflorian };
1945185a700Sflorian 
1955185a700Sflorian #define DNS_RESULT_RESULTSET			2
1965185a700Sflorian #define DNS_RESULT_RCODERESULTSET		3
1975185a700Sflorian 
198*1fb015a8Sflorian static int		once = 0;
1995185a700Sflorian 
2005185a700Sflorian static void
initialize_action(void)2015185a700Sflorian initialize_action(void) {
2025185a700Sflorian 	isc_result_t result;
2035185a700Sflorian 
2045185a700Sflorian 	result = isc_result_register(ISC_RESULTCLASS_DNS, DNS_R_NRESULTS,
2055185a700Sflorian 				     text, DNS_RESULT_RESULTSET);
2065185a700Sflorian 	if (result == ISC_R_SUCCESS)
2075185a700Sflorian 		result = isc_result_register(ISC_RESULTCLASS_DNSRCODE,
2085185a700Sflorian 					     DNS_R_NRCODERESULTS,
2095185a700Sflorian 					     rcode_text,
2105185a700Sflorian 					     DNS_RESULT_RCODERESULTSET);
2115185a700Sflorian 	if (result != ISC_R_SUCCESS)
2125185a700Sflorian 		UNEXPECTED_ERROR(__FILE__, __LINE__,
2135185a700Sflorian 				 "isc_result_register() failed: %u", result);
2145185a700Sflorian }
2155185a700Sflorian 
2165185a700Sflorian static void
initialize(void)2175185a700Sflorian initialize(void) {
2185185a700Sflorian 	if (!once) {
219*1fb015a8Sflorian 		once = 1;
2205185a700Sflorian 		initialize_action();
2215185a700Sflorian 	}
2225185a700Sflorian }
2235185a700Sflorian 
2245185a700Sflorian void
dns_result_register(void)2255185a700Sflorian dns_result_register(void) {
2265185a700Sflorian 	initialize();
2275185a700Sflorian }
228