xref: /dflybsd-src/contrib/ldns/drill/drill.h (revision d1b2b5caec9ab35b37f82c6e75b7f14f9c9103b2)
1*d1b2b5caSJohn Marino /*
2*d1b2b5caSJohn Marino  * drill.h
3*d1b2b5caSJohn Marino  * the main header file of drill
4*d1b2b5caSJohn Marino  * (c) 2005, 2006 NLnet Labs
5*d1b2b5caSJohn Marino  *
6*d1b2b5caSJohn Marino  * See the file LICENSE for the license
7*d1b2b5caSJohn Marino  *
8*d1b2b5caSJohn Marino  */
9*d1b2b5caSJohn Marino #ifndef _DRILL_H_
10*d1b2b5caSJohn Marino #define _DRILL_H_
11*d1b2b5caSJohn Marino #include "config.h"
12*d1b2b5caSJohn Marino 
13*d1b2b5caSJohn Marino #include "drill_util.h"
14*d1b2b5caSJohn Marino 
15*d1b2b5caSJohn Marino #define DRILL_VERSION PACKAGE_VERSION
16*d1b2b5caSJohn Marino 
17*d1b2b5caSJohn Marino /* what kind of stuff do we allow */
18*d1b2b5caSJohn Marino #define DRILL_QUERY	0
19*d1b2b5caSJohn Marino #define DRILL_TRACE	1
20*d1b2b5caSJohn Marino #define DRILL_CHASE	2
21*d1b2b5caSJohn Marino #define DRILL_AFROMFILE 3
22*d1b2b5caSJohn Marino #define DRILL_QTOFILE 	4
23*d1b2b5caSJohn Marino #define DRILL_NSEC	5
24*d1b2b5caSJohn Marino #define DRILL_REVERSE	6
25*d1b2b5caSJohn Marino #define DRILL_SECTRACE 	7
26*d1b2b5caSJohn Marino 
27*d1b2b5caSJohn Marino #define DRILL_ON(VAR, BIT) \
28*d1b2b5caSJohn Marino (VAR) = (VAR) | (BIT)
29*d1b2b5caSJohn Marino #define DRILL_OFF(VAR, BIT) \
30*d1b2b5caSJohn Marino (VAR) = (VAR) & ~(BIT)
31*d1b2b5caSJohn Marino 
32*d1b2b5caSJohn Marino extern ldns_rr_list *global_dns_root;
33*d1b2b5caSJohn Marino extern bool qds;
34*d1b2b5caSJohn Marino extern int verbosity;
35*d1b2b5caSJohn Marino 
36*d1b2b5caSJohn Marino ldns_pkt *do_trace(ldns_resolver *res,
37*d1b2b5caSJohn Marino 			    ldns_rdf *name,
38*d1b2b5caSJohn Marino 			    ldns_rr_type type,
39*d1b2b5caSJohn Marino 			    ldns_rr_class c);
40*d1b2b5caSJohn Marino ldns_status do_chase(ldns_resolver *res,
41*d1b2b5caSJohn Marino 				 ldns_rdf *name,
42*d1b2b5caSJohn Marino 				 ldns_rr_type type,
43*d1b2b5caSJohn Marino 				 ldns_rr_class c,
44*d1b2b5caSJohn Marino 				 ldns_rr_list *trusted_keys,
45*d1b2b5caSJohn Marino 				 ldns_pkt *pkt_o,
46*d1b2b5caSJohn Marino 				 uint16_t qflags,
47*d1b2b5caSJohn Marino 				 ldns_rr_list *prev_key_list,
48*d1b2b5caSJohn Marino 				 int verbosity);
49*d1b2b5caSJohn Marino int do_secure_trace(ldns_resolver *res,
50*d1b2b5caSJohn Marino 				ldns_rdf *name,
51*d1b2b5caSJohn Marino 				ldns_rr_type type,
52*d1b2b5caSJohn Marino 				ldns_rr_class c,
53*d1b2b5caSJohn Marino 				ldns_rr_list *trusted_keys,
54*d1b2b5caSJohn Marino 				ldns_rdf *start_name);
55*d1b2b5caSJohn Marino 
56*d1b2b5caSJohn Marino ldns_rr_list *	get_rr(ldns_resolver *res,
57*d1b2b5caSJohn Marino 				  ldns_rdf *zname,
58*d1b2b5caSJohn Marino 				  ldns_rr_type t,
59*d1b2b5caSJohn Marino 				  ldns_rr_class c);
60*d1b2b5caSJohn Marino 
61*d1b2b5caSJohn Marino void drill_pkt_print(FILE *fd, ldns_resolver *r, ldns_pkt *p);
62*d1b2b5caSJohn Marino void drill_pkt_print_footer(FILE *fd, ldns_resolver *r, ldns_pkt *p);
63*d1b2b5caSJohn Marino 
64*d1b2b5caSJohn Marino ldns_pkt_type get_dnssec_rr(ldns_pkt *p,
65*d1b2b5caSJohn Marino 					   ldns_rdf *name,
66*d1b2b5caSJohn Marino 					   ldns_rr_type t,
67*d1b2b5caSJohn Marino 					   ldns_rr_list **rrlist,
68*d1b2b5caSJohn Marino 					   ldns_rr_list **sig);
69*d1b2b5caSJohn Marino 
70*d1b2b5caSJohn Marino ldns_rr *ldns_nsec3_exact_match(ldns_rdf *qname,
71*d1b2b5caSJohn Marino 						  ldns_rr_type qtype,
72*d1b2b5caSJohn Marino 						  ldns_rr_list *nsec3s);
73*d1b2b5caSJohn Marino 
74*d1b2b5caSJohn Marino ldns_rdf *ldns_nsec3_closest_encloser(ldns_rdf *qname,
75*d1b2b5caSJohn Marino 							   ldns_rr_type qtype,
76*d1b2b5caSJohn Marino 							   ldns_rr_list *nsec3s);
77*d1b2b5caSJohn Marino 
78*d1b2b5caSJohn Marino /* verifies denial of existence of *name in *pkt (must contain NSEC or NSEC3 records
79*d1b2b5caSJohn Marino  * if *nsec_rrs and *nsec_rr_sigs are given, pointers to the relevant nsecs and their signatures are
80*d1b2b5caSJohn Marino  * placed there
81*d1b2b5caSJohn Marino  */
82*d1b2b5caSJohn Marino ldns_status ldns_verify_denial(ldns_pkt *pkt,
83*d1b2b5caSJohn Marino 						 ldns_rdf *name,
84*d1b2b5caSJohn Marino 						 ldns_rr_type type,
85*d1b2b5caSJohn Marino 						 ldns_rr_list **nsec_rrs,
86*d1b2b5caSJohn Marino 						 ldns_rr_list **nsec_rr_sigs);
87*d1b2b5caSJohn Marino 
88*d1b2b5caSJohn Marino ldns_pkt *read_hex_pkt(char *filename);
89*d1b2b5caSJohn Marino ldns_buffer *read_hex_buffer(char *filename);
90*d1b2b5caSJohn Marino void	init_root(void);
91*d1b2b5caSJohn Marino ldns_rr_list *read_root_hints(const char *filename);
92*d1b2b5caSJohn Marino void clear_root(void);
93*d1b2b5caSJohn Marino void	dump_hex(const ldns_pkt *pkt, const char *file);
94*d1b2b5caSJohn Marino void warning(const char *fmt, ...);
95*d1b2b5caSJohn Marino void	error(const char *fmt, ...);
96*d1b2b5caSJohn Marino void	mesg(const char *fmt, ...);
97*d1b2b5caSJohn Marino 
98*d1b2b5caSJohn Marino /* screen.c */
99*d1b2b5caSJohn Marino void resolver_print_nameservers(ldns_resolver *r);
100*d1b2b5caSJohn Marino void print_dnskey(ldns_rr_list *key_list);
101*d1b2b5caSJohn Marino void print_ds(ldns_rr_list *ds_list);
102*d1b2b5caSJohn Marino 
103*d1b2b5caSJohn Marino #endif /* _DRILL_H_ */
104