Home | History | Annotate | Line # | Download | only in dns
      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