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