17b5038d7SDag-Erling Smørgrav /* 27b5038d7SDag-Erling Smørgrav * drill.h 37b5038d7SDag-Erling Smørgrav * the main header file of drill 47b5038d7SDag-Erling Smørgrav * (c) 2005, 2006 NLnet Labs 57b5038d7SDag-Erling Smørgrav * 67b5038d7SDag-Erling Smørgrav * See the file LICENSE for the license 77b5038d7SDag-Erling Smørgrav * 87b5038d7SDag-Erling Smørgrav */ 97b5038d7SDag-Erling Smørgrav #ifndef _DRILL_H_ 107b5038d7SDag-Erling Smørgrav #define _DRILL_H_ 117b5038d7SDag-Erling Smørgrav #include "config.h" 127b5038d7SDag-Erling Smørgrav 137b5038d7SDag-Erling Smørgrav #include "drill_util.h" 147b5038d7SDag-Erling Smørgrav 157b5038d7SDag-Erling Smørgrav #define DRILL_VERSION PACKAGE_VERSION 167b5038d7SDag-Erling Smørgrav 177b5038d7SDag-Erling Smørgrav /* what kind of stuff do we allow */ 187b5038d7SDag-Erling Smørgrav #define DRILL_QUERY 0 197b5038d7SDag-Erling Smørgrav #define DRILL_TRACE 1 207b5038d7SDag-Erling Smørgrav #define DRILL_CHASE 2 217b5038d7SDag-Erling Smørgrav #define DRILL_AFROMFILE 3 227b5038d7SDag-Erling Smørgrav #define DRILL_QTOFILE 4 237b5038d7SDag-Erling Smørgrav #define DRILL_NSEC 5 247b5038d7SDag-Erling Smørgrav #define DRILL_SECTRACE 7 257b5038d7SDag-Erling Smørgrav 267b5038d7SDag-Erling Smørgrav #define DRILL_ON(VAR, BIT) \ 277b5038d7SDag-Erling Smørgrav (VAR) = (VAR) | (BIT) 287b5038d7SDag-Erling Smørgrav #define DRILL_OFF(VAR, BIT) \ 297b5038d7SDag-Erling Smørgrav (VAR) = (VAR) & ~(BIT) 307b5038d7SDag-Erling Smørgrav 317b5038d7SDag-Erling Smørgrav extern ldns_rr_list *global_dns_root; 327b5038d7SDag-Erling Smørgrav extern int verbosity; 337b5038d7SDag-Erling Smørgrav 34*986ba33cSDag-Erling Smørgrav void do_trace(ldns_resolver *res, 357b5038d7SDag-Erling Smørgrav ldns_rdf *name, 367b5038d7SDag-Erling Smørgrav ldns_rr_type type, 377b5038d7SDag-Erling Smørgrav ldns_rr_class c); 387b5038d7SDag-Erling Smørgrav ldns_status do_chase(ldns_resolver *res, 397b5038d7SDag-Erling Smørgrav ldns_rdf *name, 407b5038d7SDag-Erling Smørgrav ldns_rr_type type, 417b5038d7SDag-Erling Smørgrav ldns_rr_class c, 427b5038d7SDag-Erling Smørgrav ldns_rr_list *trusted_keys, 437b5038d7SDag-Erling Smørgrav ldns_pkt *pkt_o, 447b5038d7SDag-Erling Smørgrav uint16_t qflags, 45*986ba33cSDag-Erling Smørgrav ldns_rr_list *prev_key_list); 467b5038d7SDag-Erling Smørgrav int do_secure_trace(ldns_resolver *res, 477b5038d7SDag-Erling Smørgrav ldns_rdf *name, 487b5038d7SDag-Erling Smørgrav ldns_rr_type type, 497b5038d7SDag-Erling Smørgrav ldns_rr_class c, 507b5038d7SDag-Erling Smørgrav ldns_rr_list *trusted_keys, 517b5038d7SDag-Erling Smørgrav ldns_rdf *start_name); 527b5038d7SDag-Erling Smørgrav 537b5038d7SDag-Erling Smørgrav ldns_rr_list * get_rr(ldns_resolver *res, 547b5038d7SDag-Erling Smørgrav ldns_rdf *zname, 557b5038d7SDag-Erling Smørgrav ldns_rr_type t, 567b5038d7SDag-Erling Smørgrav ldns_rr_class c); 577b5038d7SDag-Erling Smørgrav 587b5038d7SDag-Erling Smørgrav void drill_pkt_print(FILE *fd, ldns_resolver *r, ldns_pkt *p); 597b5038d7SDag-Erling Smørgrav void drill_pkt_print_footer(FILE *fd, ldns_resolver *r, ldns_pkt *p); 607b5038d7SDag-Erling Smørgrav 617b5038d7SDag-Erling Smørgrav ldns_pkt_type get_dnssec_rr(ldns_pkt *p, 627b5038d7SDag-Erling Smørgrav ldns_rdf *name, 637b5038d7SDag-Erling Smørgrav ldns_rr_type t, 647b5038d7SDag-Erling Smørgrav ldns_rr_list **rrlist, 657b5038d7SDag-Erling Smørgrav ldns_rr_list **sig); 667b5038d7SDag-Erling Smørgrav 677b5038d7SDag-Erling Smørgrav ldns_rr *ldns_nsec3_exact_match(ldns_rdf *qname, 687b5038d7SDag-Erling Smørgrav ldns_rr_type qtype, 697b5038d7SDag-Erling Smørgrav ldns_rr_list *nsec3s); 707b5038d7SDag-Erling Smørgrav 717b5038d7SDag-Erling Smørgrav ldns_rdf *ldns_nsec3_closest_encloser(ldns_rdf *qname, 727b5038d7SDag-Erling Smørgrav ldns_rr_type qtype, 737b5038d7SDag-Erling Smørgrav ldns_rr_list *nsec3s); 747b5038d7SDag-Erling Smørgrav 757b5038d7SDag-Erling Smørgrav /* verifies denial of existence of *name in *pkt (must contain NSEC or NSEC3 records 767b5038d7SDag-Erling Smørgrav * if *nsec_rrs and *nsec_rr_sigs are given, pointers to the relevant nsecs and their signatures are 777b5038d7SDag-Erling Smørgrav * placed there 787b5038d7SDag-Erling Smørgrav */ 797b5038d7SDag-Erling Smørgrav ldns_status ldns_verify_denial(ldns_pkt *pkt, 807b5038d7SDag-Erling Smørgrav ldns_rdf *name, 817b5038d7SDag-Erling Smørgrav ldns_rr_type type, 827b5038d7SDag-Erling Smørgrav ldns_rr_list **nsec_rrs, 837b5038d7SDag-Erling Smørgrav ldns_rr_list **nsec_rr_sigs); 847b5038d7SDag-Erling Smørgrav 857b5038d7SDag-Erling Smørgrav ldns_pkt *read_hex_pkt(char *filename); 867b5038d7SDag-Erling Smørgrav ldns_buffer *read_hex_buffer(char *filename); 877b5038d7SDag-Erling Smørgrav void init_root(void); 887b5038d7SDag-Erling Smørgrav ldns_rr_list *read_root_hints(const char *filename); 897b5038d7SDag-Erling Smørgrav void clear_root(void); 907b5038d7SDag-Erling Smørgrav void dump_hex(const ldns_pkt *pkt, const char *file); 917b5038d7SDag-Erling Smørgrav void warning(const char *fmt, ...); 927b5038d7SDag-Erling Smørgrav void error(const char *fmt, ...); 937b5038d7SDag-Erling Smørgrav void mesg(const char *fmt, ...); 947b5038d7SDag-Erling Smørgrav 957b5038d7SDag-Erling Smørgrav /* screen.c */ 967b5038d7SDag-Erling Smørgrav void resolver_print_nameservers(ldns_resolver *r); 977b5038d7SDag-Erling Smørgrav void print_dnskey(ldns_rr_list *key_list); 987b5038d7SDag-Erling Smørgrav void print_ds(ldns_rr_list *ds_list); 997b5038d7SDag-Erling Smørgrav 1007b5038d7SDag-Erling Smørgrav #endif /* _DRILL_H_ */ 101