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