2 * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
3 * Copyright (C) 2000-2003 Internet Software Consortium.
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
9 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
12 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15 * PERFORMANCE OF THIS SOFTWARE.
18 /* $Id: dig.h,v 1.71.2.6.2.18 2007/08/28 07:19:07 tbox Exp $ */
23 #include <dns/rdatalist.h>
27 #include <isc/boolean.h>
28 #include <isc/buffer.h>
29 #include <isc/bufferlist.h>
30 #include <isc/formatcheck.h>
34 #include <isc/print.h>
35 #include <isc/sockaddr.h>
36 #include <isc/socket.h>
39 #define MXNAME (DNS_NAME_MAXTEXT+1)
42 #define COMMSIZE 0xffff
44 #define RESOLV_CONF "/etc/resolv.conf"
46 #define OUTPUTBUF 32767
47 #define MAXRRLIMIT 0xffffffff
48 #define MAXTIMEOUT 0xffff
49 #define MAXTRIES 0xffffffff
50 #define MAXNDOTS 0xffff
51 #define MAXPORT 0xffff
52 #define MAXSERIAL 0xffffffff
55 * Default timeout values
57 #define TCP_TIMEOUT 10
60 #define SERVER_TIMEOUT 1
62 #define LOOKUP_LIMIT 64
64 * Lookup_limit is just a limiter, keeping too many lookups from being
65 * created. It's job is mainly to prevent the program from running away
66 * in a tight loop of constant lookups. It's value is arbitrary.
70 * Defaults for the sigchase suboptions. Consolidated here because
71 * these control the layout of dig_lookup_t (among other things).
74 #ifndef DIG_SIGCHASE_BU
75 #define DIG_SIGCHASE_BU 1
77 #ifndef DIG_SIGCHASE_TD
78 #define DIG_SIGCHASE_TD 1
84 typedef struct dig_lookup dig_lookup_t;
85 typedef struct dig_query dig_query_t;
86 typedef struct dig_server dig_server_t;
88 typedef struct dig_message dig_message_t;
90 typedef ISC_LIST(dig_server_t) dig_serverlist_t;
91 typedef struct dig_searchlist dig_searchlist_t;
95 pending, /* Pending a successful answer */
98 ns_search_only, /* dig +nssearch, host -C */
99 identify, /* Append an "on server <foo>" message */
100 identify_previous_line, /* Prepend a "Nameserver <foo>:"
101 message, with newline and tab */
107 trace, /* dig +trace */
108 trace_root, /* initial query for either +trace or +nssearch */
124 isc_boolean_t sigchase;
126 isc_boolean_t do_topdown,
130 /* Name we are going to validate RRset */
131 char textnamesigchase[MXNAME];
135 char textname[MXNAME]; /* Name we're going to be looking up */
136 char cmdline[MXNAME];
137 dns_rdatatype_t rdtype;
138 dns_rdatatype_t qrdtype;
140 dns_rdatatype_t rdtype_sigchase;
141 dns_rdatatype_t qrdtype_sigchase;
142 dns_rdataclass_t rdclass_sigchase;
144 dns_rdataclass_t rdclass;
145 isc_boolean_t rdtypeset;
146 isc_boolean_t rdclassset;
147 char namespace[BUFSIZE];
148 char onamespace[BUFSIZE];
149 isc_buffer_t namebuf;
150 isc_buffer_t onamebuf;
151 isc_buffer_t renderbuf;
155 isc_interval_t interval;
156 dns_message_t *sendmsg;
158 ISC_LINK(dig_lookup_t) link;
159 ISC_LIST(dig_query_t) q;
160 dig_query_t *current_query;
161 dig_serverlist_t my_server_list;
162 dig_searchlist_t *origin;
164 isc_uint32_t retries;
166 isc_uint16_t udpsize;
167 isc_uint32_t ixfr_serial;
168 isc_buffer_t rdatabuf;
169 char rdatastore[MXNAME];
170 dst_context_t *tsigctx;
171 isc_buffer_t *querysig;
172 isc_uint32_t msgcounter;
176 dig_lookup_t *lookup;
177 isc_boolean_t waiting_connect,
186 isc_uint32_t first_rr_serial;
187 isc_uint32_t second_rr_serial;
188 isc_uint32_t msg_count;
189 isc_uint32_t rr_count;
192 isc_bufferlist_t sendlist,
195 isc_buffer_t recvbuf,
202 ISC_LINK(dig_query_t) link;
203 isc_sockaddr_t sockaddr;
204 isc_time_t time_sent;
205 isc_buffer_t sendbuf;
209 char servername[MXNAME];
210 char userarg[MXNAME];
211 ISC_LINK(dig_server_t) link;
214 struct dig_searchlist {
216 ISC_LINK(dig_searchlist_t) link;
221 ISC_LINK(dig_message_t) link;
225 typedef ISC_LIST(dig_searchlist_t) dig_searchlistlist_t;
226 typedef ISC_LIST(dig_lookup_t) dig_lookuplist_t;
229 * Externals from dighost.c
232 extern dig_lookuplist_t lookup_list;
233 extern dig_serverlist_t server_list;
234 extern dig_searchlistlist_t search_list;
236 extern isc_boolean_t have_ipv4, have_ipv6, specified_source,
238 extern in_port_t port;
239 extern unsigned int timeout;
240 extern isc_mem_t *mctx;
241 extern dns_messageid_t id;
242 extern int sendcount;
244 extern int lookup_counter;
246 extern isc_sockaddr_t bind_address;
247 extern char keynametext[MXNAME];
248 extern char keyfile[MXNAME];
249 extern char keysecret[MXNAME];
251 extern char trustedkey[MXNAME];
253 extern dns_tsigkey_t *key;
254 extern isc_boolean_t validated;
255 extern isc_taskmgr_t *taskmgr;
256 extern isc_task_t *global_task;
257 extern isc_boolean_t free_now;
258 extern isc_boolean_t debugging, memdebugging;
260 extern char *progname;
262 extern int fatalexit;
265 * Routines in dighost.c.
268 get_address(char *host, in_port_t port, isc_sockaddr_t *sockaddr);
271 get_reverse(char *reverse, size_t len, char *value, isc_boolean_t ip6_int,
272 isc_boolean_t strict);
275 fatal(const char *format, ...) ISC_FORMAT_PRINTF(1, 2);
278 debug(const char *format, ...) ISC_FORMAT_PRINTF(1, 2);
281 check_result(isc_result_t result, const char *msg);
284 setup_lookup(dig_lookup_t *lookup);
287 destroy_lookup(dig_lookup_t *lookup);
290 do_lookup(dig_lookup_t *lookup);
296 onrun_callback(isc_task_t *task, isc_event_t *event);
299 dhmain(int argc, char **argv);
308 requeue_lookup(dig_lookup_t *lookold, isc_boolean_t servers);
311 make_empty_lookup(void);
314 clone_lookup(dig_lookup_t *lookold, isc_boolean_t servers);
317 make_server(const char *servname, const char *userarg);
320 flush_server_list(void);
323 set_nameserver(char *opt);
326 clone_server_list(dig_serverlist_t src,
327 dig_serverlist_t *dest);
336 set_search_domain(char *domain);
340 clean_trustedkey(void);
344 * Routines to be defined in dig.c, host.c, and nslookup.c.
348 printrdataset(dns_name_t *owner_name, dns_rdataset_t *rdataset,
349 isc_buffer_t *target);
353 printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers);
355 * Print the final result of the lookup.
359 received(int bytes, isc_sockaddr_t *from, dig_query_t *query);
361 * Print a message about where and when the response
362 * was received from, like the final comment in the
367 trying(char *frm, dig_lookup_t *lookup);
370 dighost_shutdown(void);
373 next_token(char **stringp, const char *delim);
376 /* Chasing functions */
378 chase_scanname(dns_name_t *name, dns_rdatatype_t type, dns_rdatatype_t covers);
380 chase_sig(dns_message_t *msg);