dnssec_zone.h

Go to the documentation of this file.
00001 /*
00002  * special zone file structures and functions for better dnssec handling
00003  *
00004  * A zone contains a SOA dnssec_zone_rrset, and an AVL tree of 'normal'
00005  * dnssec_zone_rrsets, indexed by name and type
00006  */
00007 
00008 #ifndef LDNS_DNSSEC_ZONE_H
00009 #define LDNS_DNSSEC_ZONE_H
00010  
00011 #include <ldns/rbtree.h>
00012 #include <ldns/host2str.h>
00013 
00014 #ifdef __cplusplus
00015 extern "C" {
00016 #endif
00017 
00021 typedef struct ldns_struct_dnssec_rrs ldns_dnssec_rrs;
00022 struct ldns_struct_dnssec_rrs
00023 {
00024         ldns_rr *rr;
00025         ldns_dnssec_rrs *next;
00026 };
00027 
00031 typedef struct ldns_struct_dnssec_rrsets ldns_dnssec_rrsets;
00032 struct ldns_struct_dnssec_rrsets
00033 {
00034         ldns_dnssec_rrs *rrs;
00035         ldns_rr_type type;
00036         ldns_dnssec_rrs *signatures;
00037         ldns_dnssec_rrsets *next;
00038 };
00039 
00044 typedef struct ldns_struct_dnssec_name ldns_dnssec_name;
00045 struct ldns_struct_dnssec_name
00046 {
00051         ldns_rdf *name;
00059         bool name_alloced;
00063         ldns_dnssec_rrsets *rrsets;
00067         ldns_rr *nsec;
00071         ldns_dnssec_rrs *nsec_signatures;
00081         bool is_glue;
00085         ldns_rdf *hashed_name;
00086 };
00087 
00091 struct ldns_struct_dnssec_zone {
00093         ldns_dnssec_name *soa;
00095         ldns_rbtree_t *names;
00096 };
00097 typedef struct ldns_struct_dnssec_zone ldns_dnssec_zone;
00098 
00103 ldns_dnssec_rrs *ldns_dnssec_rrs_new();
00104 
00111 void ldns_dnssec_rrs_free(ldns_dnssec_rrs *rrs);
00112 
00119 void ldns_dnssec_rrs_deep_free(ldns_dnssec_rrs *rrs);
00120 
00128 ldns_status ldns_dnssec_rrs_add_rr(ldns_dnssec_rrs *rrs, ldns_rr *rr);
00129 
00136 void ldns_dnssec_rrs_print(FILE *out, ldns_dnssec_rrs *rrs);
00137 
00145 void ldns_dnssec_rrs_print_fmt(FILE *out, 
00146                 const ldns_output_format *fmt, ldns_dnssec_rrs *rrs);
00147 
00152 ldns_dnssec_rrsets *ldns_dnssec_rrsets_new();
00153 
00160 void ldns_dnssec_rrsets_free(ldns_dnssec_rrsets *rrsets);
00161 
00168 void ldns_dnssec_rrsets_deep_free(ldns_dnssec_rrsets *rrsets);
00169 
00176 ldns_rr_type ldns_dnssec_rrsets_type(ldns_dnssec_rrsets *rrsets);
00177 
00185 ldns_status ldns_dnssec_rrsets_set_type(ldns_dnssec_rrsets *rrsets,
00186                                            ldns_rr_type type);
00187 
00196 ldns_status ldns_dnssec_rrsets_add_rr(ldns_dnssec_rrsets *rrsets, ldns_rr *rr);
00197 
00205 void ldns_dnssec_rrsets_print(FILE *out,
00206                 ldns_dnssec_rrsets *rrsets,
00207                 bool follow);
00208 
00217 void ldns_dnssec_rrsets_print_fmt(FILE *out,
00218                 const ldns_output_format *fmt,
00219                 ldns_dnssec_rrsets *rrsets,
00220                 bool follow);
00221 
00222 
00227 ldns_dnssec_name *ldns_dnssec_name_new();
00228 
00234 ldns_dnssec_name *ldns_dnssec_name_new_frm_rr(ldns_rr *rr);
00235 
00242 void ldns_dnssec_name_free(ldns_dnssec_name *name);
00243 
00250 void ldns_dnssec_name_deep_free(ldns_dnssec_name *name);
00251 
00258 ldns_rdf *ldns_dnssec_name_name(ldns_dnssec_name *name);
00259 
00260 
00267 void ldns_dnssec_name_set_name(ldns_dnssec_name *name,
00268                                                  ldns_rdf *dname);
00280 bool ldns_dnssec_name_is_glue(ldns_dnssec_name *name);
00281 
00288 void ldns_dnssec_name_set_nsec(ldns_dnssec_name *name, ldns_rr *nsec);
00289 
00300 int ldns_dnssec_name_cmp(const void *a, const void *b);
00301 
00310 ldns_status ldns_dnssec_name_add_rr(ldns_dnssec_name *name,
00311                                                          ldns_rr *rr);
00312 
00320 ldns_dnssec_rrsets *ldns_dnssec_name_find_rrset(ldns_dnssec_name *name,
00321                                                                            ldns_rr_type type);
00322 
00331 ldns_dnssec_rrsets *ldns_dnssec_zone_find_rrset(ldns_dnssec_zone *zone,
00332                                                                            ldns_rdf *dname,
00333                                                                            ldns_rr_type type);
00334 
00342 void ldns_dnssec_name_print(FILE *out, ldns_dnssec_name *name);
00343 
00352 void ldns_dnssec_name_print_fmt(FILE *out, 
00353                 const ldns_output_format *fmt, ldns_dnssec_name *name);
00354 
00359 ldns_dnssec_zone *ldns_dnssec_zone_new();
00360 
00371 ldns_status ldns_dnssec_zone_new_frm_fp(ldns_dnssec_zone** z, FILE* fp,
00372                 ldns_rdf* origin, uint32_t ttl, ldns_rr_class c);
00373 
00385 ldns_status ldns_dnssec_zone_new_frm_fp_l(ldns_dnssec_zone** z, FILE* fp,
00386                 ldns_rdf* origin, uint32_t ttl, ldns_rr_class c, int* line_nr);
00387 
00393 void ldns_dnssec_zone_free(ldns_dnssec_zone *zone);
00394 
00400 void ldns_dnssec_zone_deep_free(ldns_dnssec_zone *zone);
00401 
00412 ldns_status ldns_dnssec_zone_add_rr(ldns_dnssec_zone *zone,
00413                                                          ldns_rr *rr);
00414 
00422 void ldns_dnssec_zone_names_print(FILE *out, ldns_rbtree_t *tree, bool print_soa);
00423 
00432 void ldns_dnssec_zone_names_print_fmt(FILE *out, const ldns_output_format *fmt,
00433                 ldns_rbtree_t *tree, bool print_soa);
00434 
00441 void ldns_dnssec_zone_print(FILE *out, ldns_dnssec_zone *zone);
00442 
00450 void ldns_dnssec_zone_print_fmt(FILE *out, 
00451                 const ldns_output_format *fmt, ldns_dnssec_zone *zone);
00452 
00460 ldns_status ldns_dnssec_zone_add_empty_nonterminals(ldns_dnssec_zone *zone);
00461 
00469 bool ldns_dnssec_zone_is_nsec3_optout(ldns_dnssec_zone* zone);
00470 
00471 #ifdef __cplusplus
00472 }
00473 #endif
00474 
00475 #endif

Generated on 28 May 2013 for ldns by  doxygen 1.6.1