1 /* $NetBSD: dns_strerror.c,v 1.1.1.1 2009/06/23 10:08:43 tron Exp $ */ 2 3 /*++ 4 /* NAME 5 /* dns_strerror 3 6 /* SUMMARY 7 /* name service lookup error code to string 8 /* SYNOPSIS 9 /* #include <dhs.h> 10 /* 11 /* const char *dns_strerror(code) 12 /* int code; 13 /* DESCRIPTION 14 /* dns_strerror() maps a name service lookup error to printable string. 15 /* The result is for read-only purposes, and unknown codes share a 16 /* common string buffer. 17 /* LICENSE 18 /* .ad 19 /* .fi 20 /* The Secure Mailer license must be distributed with this software. 21 /* AUTHOR(S) 22 /* Wietse Venema 23 /* IBM T.J. Watson Research 24 /* P.O. Box 704 25 /* Yorktown Heights, NY 10598, USA 26 /*--*/ 27 28 /* System library. */ 29 30 #include <sys_defs.h> 31 #include <netdb.h> 32 33 /* Utility library. */ 34 35 #include <vstring.h> 36 37 /* DNS library. */ 38 39 #include "dns.h" 40 41 /* 42 * Mapping from error code to printable string. The herror() routine does 43 * something similar, but has output only to the stderr stream. 44 */ 45 struct dns_error_map { 46 unsigned error; 47 const char *text; 48 }; 49 50 static struct dns_error_map dns_error_map[] = { 51 HOST_NOT_FOUND, "Host not found", 52 TRY_AGAIN, "Host not found, try again", 53 NO_RECOVERY, "Non-recoverable error", 54 NO_DATA, "Host found but no data record of requested type", 55 }; 56 57 /* dns_strerror - map resolver error code to printable string */ 58 59 const char *dns_strerror(unsigned error) 60 { 61 static VSTRING *unknown = 0; 62 unsigned i; 63 64 for (i = 0; i < sizeof(dns_error_map) / sizeof(dns_error_map[0]); i++) 65 if (dns_error_map[i].error == error) 66 return (dns_error_map[i].text); 67 if (unknown == 0) 68 unknown = vstring_alloc(sizeof("Unknown error XXXXXX")); 69 vstring_sprintf(unknown, "Unknown error %u", error); 70 return (vstring_str(unknown)); 71 } 72