1*7b5038d7SDag-Erling Smørgrav /* 2*7b5038d7SDag-Erling Smørgrav * a error2str function to make sense of all the 3*7b5038d7SDag-Erling Smørgrav * error codes we have laying ardoun 4*7b5038d7SDag-Erling Smørgrav * 5*7b5038d7SDag-Erling Smørgrav * a Net::DNS like library for C 6*7b5038d7SDag-Erling Smørgrav * LibDNS Team @ NLnet Labs 7*7b5038d7SDag-Erling Smørgrav * (c) NLnet Labs, 2005-2006 8*7b5038d7SDag-Erling Smørgrav * See the file LICENSE for the license 9*7b5038d7SDag-Erling Smørgrav */ 10*7b5038d7SDag-Erling Smørgrav 11*7b5038d7SDag-Erling Smørgrav #include <ldns/config.h> 12*7b5038d7SDag-Erling Smørgrav 13*7b5038d7SDag-Erling Smørgrav #include <ldns/ldns.h> 14*7b5038d7SDag-Erling Smørgrav 15*7b5038d7SDag-Erling Smørgrav ldns_lookup_table ldns_error_str[] = { 16*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_OK, "All OK" }, 17*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_EMPTY_LABEL, "Empty label" }, 18*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_LABEL_OVERFLOW, "Label length overflow" }, 19*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_DOMAINNAME_OVERFLOW, "Domainname length overflow" }, 20*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_DOMAINNAME_UNDERFLOW, "Domainname length underflow (zero length)" }, 21*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_DDD_OVERFLOW, "\\DDD sequence overflow (>255)" }, 22*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_PACKET_OVERFLOW, "Packet size overflow" }, 23*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_INVALID_POINTER, "Invalid compression pointer" }, 24*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_MEM_ERR, "General memory error" }, 25*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_INTERNAL_ERR, "Internal error, this should not happen" }, 26*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SSL_ERR, "Error in SSL library" }, 27*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_ERR, "General LDNS error" }, 28*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_INVALID_INT, "Conversion error, integer expected" }, 29*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_INVALID_IP4, "Conversion error, ip4 addr expected" }, 30*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_INVALID_IP6, "Conversion error, ip6 addr expected" }, 31*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_INVALID_STR, "Conversion error, string expected" }, 32*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_INVALID_B32_EXT, "Conversion error, b32 ext encoding expected" }, 33*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_INVALID_B64, "Conversion error, b64 encoding expected" }, 34*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_INVALID_HEX, "Conversion error, hex encoding expected" }, 35*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_INVALID_TIME, "Conversion error, time encoding expected" }, 36*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_NETWORK_ERR, "Could not send or receive, because of network error" }, 37*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_ADDRESS_ERR, "Could not start AXFR, because of address error" }, 38*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_FILE_ERR, "Could not open the files" }, 39*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_UNKNOWN_INET, "Uknown address family" }, 40*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_NOT_IMPL, "This function is not implemented (yet), please notify the developers - or not..." }, 41*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_NULL, "Supplied value pointer null" }, 42*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_UNKNOWN_ALGO, "Unknown cryptographic algorithm" }, 43*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_ALGO_NOT_IMPL, "Cryptographic algorithm not implemented" }, 44*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_NO_RRSIG, "No DNSSEC signature(s)" }, 45*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_NO_DNSKEY, "No DNSSEC public key(s)" }, 46*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_TYPE_COVERED_ERR, "The signature does not cover this RRset" }, 47*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_NO_TRUSTED_DNSKEY, "No signatures found for trusted DNSSEC public key(s)" }, 48*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_NO_DS, "No DS record(s)" }, 49*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_NO_TRUSTED_DS, "Could not validate DS record(s)" }, 50*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_NO_MATCHING_KEYTAG_DNSKEY, "No keys with the keytag and algorithm from the RRSIG found" }, 51*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_VALIDATED, "Valid DNSSEC signature" }, 52*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_BOGUS, "Bogus DNSSEC signature" }, 53*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_SIG_EXPIRED, "DNSSEC signature has expired" }, 54*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_SIG_NOT_INCEPTED, "DNSSEC signature not incepted yet" }, 55*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_TSIG_BOGUS, "Bogus TSIG signature" }, 56*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_TSIG_ERR, "Could not create TSIG signature" }, 57*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_EXPIRATION_BEFORE_INCEPTION, "DNSSEC signature has expiration date earlier than inception date" }, 58*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_ENGINE_KEY_NOT_LOADED, "Unable to load private key from engine" }, 59*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_NSEC3_ERR, "Error in NSEC3 denial of existence proof" }, 60*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_RES_NO_NS, "No (valid) nameservers defined in the resolver" }, 61*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_RES_QUERY, "No correct query given to resolver" }, 62*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_WIRE_INCOMPLETE_HEADER, "header section incomplete" }, 63*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_WIRE_INCOMPLETE_QUESTION, "question section incomplete" }, 64*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_WIRE_INCOMPLETE_ANSWER, "answer section incomplete" }, 65*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_WIRE_INCOMPLETE_AUTHORITY, "authority section incomplete" }, 66*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_WIRE_INCOMPLETE_ADDITIONAL, "additional section incomplete" }, 67*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_NO_DATA, "No data" }, 68*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CERT_BAD_ALGORITHM, "Bad algorithm type for CERT record" }, 69*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_TYPE_ERR, "Syntax error, could not parse the RR's type" }, 70*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_CLASS_ERR, "Syntax error, could not parse the RR's class" }, 71*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_TTL_ERR, "Syntax error, could not parse the RR's TTL" }, 72*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_INCLUDE_ERR_NOTIMPL, "Syntax error, $INCLUDE not implemented" }, 73*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_RDATA_ERR, "Syntax error, could not parse the RR's rdata" }, 74*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_DNAME_ERR, "Syntax error, could not parse the RR's dname(s)" }, 75*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_VERSION_ERR, "Syntax error, version mismatch" }, 76*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_ALG_ERR, "Syntax error, algorithm unknown or non parseable" }, 77*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_KEYWORD_ERR, "Syntax error, unknown keyword in input" }, 78*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_ERR, "Syntax error, could not parse the RR" }, 79*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_EMPTY, "Empty line was returned" }, 80*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_TTL, "$TTL directive was seen in the zone" }, 81*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_ORIGIN, "$ORIGIN directive was seen in the zone" }, 82*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_INCLUDE, "$INCLUDE directive was seen in the zone" }, 83*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_ITERATIONS_OVERFLOW, "Iterations count for NSEC3 record higher than maximum" }, 84*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_MISSING_VALUE_ERR, "Syntax error, value expected" }, 85*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_INTEGER_OVERFLOW, "Syntax error, integer value too large" }, 86*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SYNTAX_BAD_ESCAPE, "Syntax error, bad escape sequence" }, 87*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_SOCKET_ERROR, "Error creating socket" }, 88*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_DNSSEC_EXISTENCE_DENIED, "Existence denied by NSEC" }, 89*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_DNSSEC_NSEC_RR_NOT_COVERED, "RR not covered by the given NSEC RRs" }, 90*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_DNSSEC_NSEC_WILDCARD_NOT_COVERED, "wildcard not covered by the given NSEC RRs" }, 91*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_DNSSEC_NSEC3_ORIGINAL_NOT_FOUND, "original of NSEC3 hashed name could not be found" }, 92*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_MISSING_RDATA_FIELDS_RRSIG, "The RRSIG has to few rdata fields" }, 93*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_MISSING_RDATA_FIELDS_KEY, "The DNSKEY has to few rdata fields" }, 94*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_SIG_EXPIRED_WITHIN_MARGIN, 95*7b5038d7SDag-Erling Smørgrav "DNSSEC signature will expire too soon" }, 96*7b5038d7SDag-Erling Smørgrav { LDNS_STATUS_CRYPTO_SIG_NOT_INCEPTED_WITHIN_MARGIN, 97*7b5038d7SDag-Erling Smørgrav "DNSSEC signature not incepted long enough" }, 98*7b5038d7SDag-Erling Smørgrav { 0, NULL } 99*7b5038d7SDag-Erling Smørgrav }; 100*7b5038d7SDag-Erling Smørgrav 101*7b5038d7SDag-Erling Smørgrav const char * 102*7b5038d7SDag-Erling Smørgrav ldns_get_errorstr_by_id(ldns_status err) 103*7b5038d7SDag-Erling Smørgrav { 104*7b5038d7SDag-Erling Smørgrav ldns_lookup_table *lt; 105*7b5038d7SDag-Erling Smørgrav 106*7b5038d7SDag-Erling Smørgrav lt = ldns_lookup_by_id(ldns_error_str, err); 107*7b5038d7SDag-Erling Smørgrav 108*7b5038d7SDag-Erling Smørgrav if (lt) { 109*7b5038d7SDag-Erling Smørgrav return lt->name; 110*7b5038d7SDag-Erling Smørgrav } 111*7b5038d7SDag-Erling Smørgrav return NULL; 112*7b5038d7SDag-Erling Smørgrav } 113