Expand PMF_FN_* macros.
[netbsd-mini2440.git] / external / ibm-public / postfix / dist / src / dns / test_dns_lookup.c
blob11ab1ee6730ba54989b660470ebed28b63a8e8e6
1 /* $NetBSD$ */
3 /*++
4 /* NAME
5 /* test_dns_lookup 1
6 /* SUMMARY
7 /* DNS lookup test program
8 /* SYNOPSIS
9 /* test_dns_lookup query-type domain-name
10 /* DESCRIPTION
11 /* test_dns_lookup performs a DNS query of the specified resource
12 /* type for the specified resource name.
13 /* DIAGNOSTICS
14 /* Problems are reported to the standard error stream.
15 /* LICENSE
16 /* .ad
17 /* .fi
18 /* The Secure Mailer license must be distributed with this software.
19 /* AUTHOR(S)
20 /* Wietse Venema
21 /* IBM T.J. Watson Research
22 /* P.O. Box 704
23 /* Yorktown Heights, NY 10598, USA
24 /*--*/
26 /* System library. */
28 #include <sys_defs.h>
29 #include <netinet/in.h>
30 #include <arpa/inet.h>
31 #include <stdlib.h>
33 /* Utility library. */
35 #include <vstring.h>
36 #include <msg.h>
37 #include <msg_vstream.h>
38 #include <mymalloc.h>
39 #include <argv.h>
41 /* Application-specific. */
43 #include "dns.h"
45 static void print_rr(DNS_RR *rr)
47 MAI_HOSTADDR_STR host;
49 while (rr) {
50 printf("%s: ttl: %9d ", rr->rname, rr->ttl);
51 switch (rr->type) {
52 case T_A:
53 #ifdef T_AAAA
54 case T_AAAA:
55 #endif
56 if (dns_rr_to_pa(rr, &host) == 0)
57 msg_fatal("conversion error for resource record type %s: %m",
58 dns_strtype(rr->type));
59 printf("%s: %s\n", dns_strtype(rr->type), host.buf);
60 break;
61 case T_CNAME:
62 case T_MB:
63 case T_MG:
64 case T_MR:
65 case T_NS:
66 case T_PTR:
67 case T_TXT:
68 printf("%s: %s\n", dns_strtype(rr->type), rr->data);
69 break;
70 case T_MX:
71 printf("pref: %d %s: %s\n",
72 rr->pref, dns_strtype(rr->type), rr->data);
73 break;
74 default:
75 msg_fatal("print_rr: don't know how to print type %s",
76 dns_strtype(rr->type));
78 rr = rr->next;
82 int main(int argc, char **argv)
84 ARGV *types_argv;
85 unsigned *types;
86 char *name;
87 VSTRING *fqdn = vstring_alloc(100);
88 VSTRING *why = vstring_alloc(100);
89 DNS_RR *rr;
90 int i;
92 msg_vstream_init(argv[0], VSTREAM_ERR);
93 if (argc != 3)
94 msg_fatal("usage: %s types name", argv[0]);
95 types_argv = argv_split(argv[1], ", \t\r\n");
96 types = (int *) mymalloc(sizeof(*types) * (types_argv->argc + 1));
97 for (i = 0; i < types_argv->argc; i++)
98 if ((types[i] = dns_type(types_argv->argv[i])) == 0)
99 msg_fatal("invalid query type: %s", types_argv->argv[i]);
100 types[i] = 0;
101 argv_free(types_argv);
102 name = argv[2];
103 msg_verbose = 1;
104 switch (dns_lookup_v(name, RES_DEFNAMES | RES_DEBUG, &rr, fqdn, why,
105 DNS_REQ_FLAG_NONE, types)) {
106 default:
107 msg_fatal("%s", vstring_str(why));
108 case DNS_OK:
109 printf("%s: fqdn: %s\n", name, vstring_str(fqdn));
110 print_rr(rr);
111 dns_rr_free(rr);
113 myfree((char *) types);
114 exit(0);