dnssec_zone.h File Reference

Go to the source code of this file.

Data Structures

struct  ldns_struct_dnssec_rrs
struct  ldns_struct_dnssec_rrsets
struct  ldns_struct_dnssec_name
struct  ldns_struct_dnssec_zone
 Structure containing a dnssec zone. More...

Typedefs

typedef struct
ldns_struct_dnssec_rrs 
ldns_dnssec_rrs
 Singly linked list of rrs.
typedef struct
ldns_struct_dnssec_rrsets 
ldns_dnssec_rrsets
 Singly linked list of RRsets.
typedef struct
ldns_struct_dnssec_name 
ldns_dnssec_name
 Structure containing all resource records for a domain name Including the derived NSEC3, if present.
typedef struct
ldns_struct_dnssec_zone 
ldns_dnssec_zone

Functions

ldns_dnssec_rrsldns_dnssec_rrs_new ()
 Creates a new entry for 1 pointer to an rr and 1 pointer to the next rrs.
void ldns_dnssec_rrs_free (ldns_dnssec_rrs *rrs)
 Frees the list of rrs, but *not* its data.
ldns_status ldns_dnssec_rrs_add_rr (ldns_dnssec_rrs *rrs, ldns_rr *rr)
 Adds an RR to the list of RRs.
void ldns_dnssec_rrs_print (FILE *out, ldns_dnssec_rrs *rrs)
 Prints the given rrs to the file descriptor.
ldns_dnssec_rrsetsldns_dnssec_rrsets_new ()
 Creates a new list (entry) of RRsets.
void ldns_dnssec_rrsets_free (ldns_dnssec_rrsets *rrsets)
 Frees the list of rrsets and their rrs, but *not* their data.
ldns_rr_type ldns_dnssec_rrsets_type (ldns_dnssec_rrsets *rrsets)
 Returns the rr type of the rrset (that is head of the given list).
ldns_status ldns_dnssec_rrsets_set_type (ldns_dnssec_rrsets *rrsets, ldns_rr_type type)
 Sets the RR type of the rrset (that is head of the given list).
ldns_status ldns_dnssec_rrsets_add_rr (ldns_dnssec_rrsets *rrsets, ldns_rr *rr)
 Add an ldns_rr to the corresponding RRset in the given list of RRsets.
void ldns_dnssec_rrsets_print (FILE *out, ldns_dnssec_rrsets *rrsets, bool follow)
 Print the given list of rrsets to the fiven file descriptor.
ldns_dnssec_nameldns_dnssec_name_new ()
 Create a new data structure for a dnssec name.
ldns_dnssec_nameldns_dnssec_name_new_frm_rr (ldns_rr *rr)
 Create a new data structure for a dnssec name for the given RR.
void ldns_dnssec_name_free (ldns_dnssec_name *name)
 Frees the name structure and its rrs and rrsets.
ldns_rdfldns_dnssec_name_name (ldns_dnssec_name *name)
 Returns the domain name of the given dnssec_name structure.
void ldns_dnssec_name_set_name (ldns_dnssec_name *name, ldns_rdf *dname)
 Sets the domain name of the given dnssec_name structure.
void ldns_dnssec_name_set_nsec (ldns_dnssec_name *name, ldns_rr *nsec)
 Sets the NSEC(3) RR of the given dnssec_name structure.
int ldns_dnssec_name_cmp (const void *a, const void *b)
 Compares the domain names of the two arguments in their canonical ordening.
ldns_status ldns_dnssec_name_add_rr (ldns_dnssec_name *name, ldns_rr *rr)
 Inserts the given rr at the right place in the current dnssec_name No checking is done whether the name matches.
ldns_dnssec_rrsetsldns_dnssec_name_find_rrset (ldns_dnssec_name *name, ldns_rr_type type)
 Find the RRset with the given type in within this name structure.
ldns_dnssec_rrsetsldns_dnssec_zone_find_rrset (ldns_dnssec_zone *zone, ldns_rdf *dname, ldns_rr_type type)
 Find the RRset with the given name and type in the zone.
void ldns_dnssec_name_print (FILE *out, ldns_dnssec_name *name)
 Prints the RRs in the dnssec name structure to the given file descriptor.
ldns_dnssec_zoneldns_dnssec_zone_new ()
 Creates a new dnssec_zone structure.
void ldns_dnssec_zone_free (ldns_dnssec_zone *zone)
 Frees the given zone structure, and its rbtree of dnssec_names Individual ldns_rr RRs within those names are *not* freed.
ldns_status ldns_dnssec_zone_add_rr (ldns_dnssec_zone *zone, ldns_rr *rr)
 Adds the given RR to the zone.
void ldns_dnssec_zone_names_print (FILE *out, ldns_rbtree_t *tree, bool print_soa)
 Prints the rbtree of ldns_dnssec_name structures to the file descriptor.
void ldns_dnssec_zone_print (FILE *out, ldns_dnssec_zone *zone)
 Prints the complete zone to the given file descriptor.
ldns_status ldns_dnssec_zone_add_empty_nonterminals (ldns_dnssec_zone *zone)
 Adds explicit dnssec_name structures for the empty nonterminals in this zone.


Typedef Documentation

Singly linked list of rrs.

Definition at line 17 of file dnssec_zone.h.

Singly linked list of RRsets.

Definition at line 27 of file dnssec_zone.h.

Structure containing all resource records for a domain name Including the derived NSEC3, if present.

Definition at line 40 of file dnssec_zone.h.

Definition at line 79 of file dnssec_zone.h.


Function Documentation

ldns_dnssec_rrs* ldns_dnssec_rrs_new (  ) 

Creates a new entry for 1 pointer to an rr and 1 pointer to the next rrs.

Returns:
the allocated data

Definition at line 10 of file dnssec_zone.c.

References LDNS_MALLOC, ldns_struct_dnssec_rrs::next, and ldns_struct_dnssec_rrs::rr.

void ldns_dnssec_rrs_free ( ldns_dnssec_rrs rrs  ) 

Frees the list of rrs, but *not* its data.

Parameters:
[in] rrs the data structure to free

Definition at line 20 of file dnssec_zone.c.

References ldns_dnssec_rrs_free(), LDNS_FREE, and ldns_struct_dnssec_rrs::next.

ldns_status ldns_dnssec_rrs_add_rr ( ldns_dnssec_rrs rrs,
ldns_rr rr 
)

Adds an RR to the list of RRs.

The list will remain ordered

Parameters:
[in] rrs the list to add to
[in] rr the RR to add
Returns:
LDNS_STATUS_OK on success

Definition at line 31 of file dnssec_zone.c.

References ldns_dnssec_rrs_add_rr(), ldns_dnssec_rrs_new(), ldns_rr_compare(), LDNS_STATUS_ERR, LDNS_STATUS_OK, ldns_struct_dnssec_rrs::next, and ldns_struct_dnssec_rrs::rr.

void ldns_dnssec_rrs_print ( FILE *  out,
ldns_dnssec_rrs rrs 
)

Prints the given rrs to the file descriptor.

Parameters:
[in] out the file descriptor to print to
[in] rrs the list of RRs to print

Definition at line 65 of file dnssec_zone.c.

References ldns_dnssec_rrs_print(), ldns_rr_print(), ldns_struct_dnssec_rrs::next, and ldns_struct_dnssec_rrs::rr.

ldns_dnssec_rrsets* ldns_dnssec_rrsets_new (  ) 

Creates a new list (entry) of RRsets.

Returns:
the newly allocated structure

Definition at line 80 of file dnssec_zone.c.

References LDNS_MALLOC, ldns_struct_dnssec_rrsets::next, ldns_struct_dnssec_rrsets::rrs, ldns_struct_dnssec_rrsets::signatures, and ldns_struct_dnssec_rrsets::type.

void ldns_dnssec_rrsets_free ( ldns_dnssec_rrsets rrsets  ) 

Frees the list of rrsets and their rrs, but *not* their data.

Parameters:
[in] rrsets the data structure to free

Definition at line 92 of file dnssec_zone.c.

References ldns_dnssec_rrs_free(), ldns_dnssec_rrsets_free(), LDNS_FREE, ldns_struct_dnssec_rrsets::next, ldns_struct_dnssec_rrsets::rrs, and ldns_struct_dnssec_rrsets::signatures.

ldns_rr_type ldns_dnssec_rrsets_type ( ldns_dnssec_rrsets rrsets  ) 

Returns the rr type of the rrset (that is head of the given list).

Parameters:
[in] rrsets the rrset to get the type of
Returns:
the rr type

Definition at line 109 of file dnssec_zone.c.

References ldns_struct_dnssec_rrsets::type.

ldns_status ldns_dnssec_rrsets_set_type ( ldns_dnssec_rrsets rrsets,
ldns_rr_type  type 
)

Sets the RR type of the rrset (that is head of the given list).

Parameters:
[in] rrsets the rrset to set the type of
[in] type the type to set
Returns:
LDNS_STATUS_OK on success

Definition at line 119 of file dnssec_zone.c.

References LDNS_STATUS_ERR, LDNS_STATUS_OK, and ldns_struct_dnssec_rrsets::type.

ldns_status ldns_dnssec_rrsets_add_rr ( ldns_dnssec_rrsets rrsets,
ldns_rr rr 
)

Add an ldns_rr to the corresponding RRset in the given list of RRsets.

If it is not present, add it as a new RRset with 1 record.

Parameters:
[in] rrsets the list of rrsets to add the RR to
[in] rr the rr to add to the list of rrsets
Returns:
LDNS_STATUS_OK on success

Definition at line 131 of file dnssec_zone.c.

References ldns_dnssec_rrs_add_rr(), ldns_dnssec_rrs_new(), ldns_dnssec_rrsets_add_rr(), ldns_dnssec_rrsets_new(), ldns_dnssec_rrsets_type(), ldns_rdf2rr_type(), ldns_rr_get_type(), ldns_rr_rrsig_typecovered(), LDNS_RR_TYPE_RRSIG, LDNS_STATUS_ERR, LDNS_STATUS_OK, ldns_struct_dnssec_rrsets::next, ldns_struct_dnssec_rrs::rr, ldns_struct_dnssec_rrsets::rrs, ldns_struct_dnssec_rrsets::signatures, and ldns_struct_dnssec_rrsets::type.

void ldns_dnssec_rrsets_print ( FILE *  out,
ldns_dnssec_rrsets rrsets,
bool  follow 
)

Print the given list of rrsets to the fiven file descriptor.

Parameters:
[in] out the file descriptor to print to
[in] rrsets the list of RRsets to print
[in] follow if set to false, only print the first RRset

Definition at line 222 of file dnssec_zone.c.

References ldns_dnssec_rrsets_print_soa().

ldns_dnssec_name* ldns_dnssec_name_new (  ) 

Create a new data structure for a dnssec name.

Returns:
the allocated structure

Definition at line 228 of file dnssec_zone.c.

References LDNS_MALLOC, ldns_struct_dnssec_name::name_alloced, ldns_struct_dnssec_name::nsec, ldns_struct_dnssec_name::nsec_signatures, and ldns_struct_dnssec_name::rrsets.

ldns_dnssec_name* ldns_dnssec_name_new_frm_rr ( ldns_rr rr  ) 

Create a new data structure for a dnssec name for the given RR.

Parameters:
[in] rr the RR to derive properties from, and to add to the name

Definition at line 246 of file dnssec_zone.c.

References ldns_dnssec_name_add_rr(), ldns_dnssec_name_new(), ldns_rr_owner(), and ldns_struct_dnssec_name::name.

void ldns_dnssec_name_free ( ldns_dnssec_name name  ) 

Frees the name structure and its rrs and rrsets.

Individual ldns_rr records therein are not freed

Parameters:
[in] name the structure to free

Definition at line 257 of file dnssec_zone.c.

References ldns_dnssec_rrs_free(), ldns_dnssec_rrsets_free(), LDNS_FREE, ldns_rdf_deep_free(), ldns_struct_dnssec_name::name, ldns_struct_dnssec_name::name_alloced, ldns_struct_dnssec_name::nsec_signatures, and ldns_struct_dnssec_name::rrsets.

ldns_rdf* ldns_dnssec_name_name ( ldns_dnssec_name name  ) 

Returns the domain name of the given dnssec_name structure.

Parameters:
[in] name the dnssec name to get the domain name from
Returns:
the domain name

Definition at line 274 of file dnssec_zone.c.

References ldns_struct_dnssec_name::name.

void ldns_dnssec_name_set_name ( ldns_dnssec_name name,
ldns_rdf dname 
)

Sets the domain name of the given dnssec_name structure.

Parameters:
[in] name the dnssec name to set the domain name of
[in] dname the domain name to set it to. This data is *not* copied.

Definition at line 283 of file dnssec_zone.c.

References ldns_struct_dnssec_name::name.

void ldns_dnssec_name_set_nsec ( ldns_dnssec_name name,
ldns_rr nsec 
)

Sets the NSEC(3) RR of the given dnssec_name structure.

Parameters:
[in] name the dnssec name to set the domain name of
[in] nsec the nsec rr to set it to. This data is *not* copied.

Definition at line 301 of file dnssec_zone.c.

References ldns_struct_dnssec_name::nsec.

int ldns_dnssec_name_cmp ( const void *  a,
const void *  b 
)

Compares the domain names of the two arguments in their canonical ordening.

Parameters:
[in] a The first dnssec_name to compare
[in] b The second dnssec_name to compare
Returns:
-1 if the domain name of a comes before that of b in canonical ordening, 1 if it is the other way around, and 0 if they are equal

Definition at line 309 of file dnssec_zone.c.

References ldns_dname_compare(), and ldns_dnssec_name_name().

ldns_status ldns_dnssec_name_add_rr ( ldns_dnssec_name name,
ldns_rr rr 
)

Inserts the given rr at the right place in the current dnssec_name No checking is done whether the name matches.

Parameters:
[in] name The ldns_dnssec_name to add the RR to
[in] rr The RR to add
Returns:
LDNS_STATUS_OK on success, error code otherwise

Definition at line 328 of file dnssec_zone.c.

References ldns_dnssec_name_name(), ldns_dnssec_rrs_add_rr(), ldns_dnssec_rrs_new(), ldns_dnssec_rrsets_add_rr(), ldns_dnssec_rrsets_new(), ldns_nsec3_hash_name_frm_nsec3(), ldns_rdf2rr_type(), ldns_rdf_deep_free(), ldns_rr_get_type(), ldns_rr_rrsig_typecovered(), LDNS_RR_TYPE_NSEC, LDNS_RR_TYPE_NSEC3, LDNS_RR_TYPE_RRSIG, LDNS_STATUS_ERR, LDNS_STATUS_OK, ldns_struct_dnssec_name::nsec, ldns_struct_dnssec_name::nsec_signatures, ldns_struct_dnssec_rrs::rr, and ldns_struct_dnssec_name::rrsets.

ldns_dnssec_rrsets* ldns_dnssec_name_find_rrset ( ldns_dnssec_name name,
ldns_rr_type  type 
)

Find the RRset with the given type in within this name structure.

Parameters:
[in] name the name to find the RRset in
[in] type the type of the RRset to find
Returns:
the RRset, or NULL if not present

Definition at line 390 of file dnssec_zone.c.

References ldns_struct_dnssec_rrsets::next, ldns_struct_dnssec_name::rrsets, and ldns_struct_dnssec_rrsets::type.

ldns_dnssec_rrsets* ldns_dnssec_zone_find_rrset ( ldns_dnssec_zone zone,
ldns_rdf dname,
ldns_rr_type  type 
)

Find the RRset with the given name and type in the zone.

Parameters:
[in] zone the zone structure to find the RRset in
[in] dname the domain name of the RRset to find
[in] type the type of the RRset to find
Returns:
the RRset, or NULL if not present

Definition at line 406 of file dnssec_zone.c.

References ldns_rbnode_t::data, ldns_dnssec_name_find_rrset(), ldns_rbtree_search(), and ldns_struct_dnssec_zone::names.

void ldns_dnssec_name_print ( FILE *  out,
ldns_dnssec_name name 
)

Prints the RRs in the dnssec name structure to the given file descriptor.

Parameters:
[in] out the file descriptor to print to
[in] name the name structure to print the contents of

Definition at line 457 of file dnssec_zone.c.

References ldns_dnssec_name_print_soa().

ldns_dnssec_zone* ldns_dnssec_zone_new (  ) 

Creates a new dnssec_zone structure.

Returns:
the allocated structure

Definition at line 463 of file dnssec_zone.c.

References LDNS_MALLOC, ldns_struct_dnssec_zone::names, and ldns_struct_dnssec_zone::soa.

void ldns_dnssec_zone_free ( ldns_dnssec_zone zone  ) 

Frees the given zone structure, and its rbtree of dnssec_names Individual ldns_rr RRs within those names are *not* freed.

Parameters:
[in] zone the zone to free

Definition at line 480 of file dnssec_zone.c.

References ldns_dnssec_name_node_free(), LDNS_FREE, ldns_traverse_postorder(), and ldns_struct_dnssec_zone::names.

ldns_status ldns_dnssec_zone_add_rr ( ldns_dnssec_zone zone,
ldns_rr rr 
)

Adds the given RR to the zone.

It find whether there is a dnssec_name with that name present. If so, add it to that, if not create a new one. Special handling of NSEC and RRSIG provided

Parameters:
[in] zone the zone to add the RR to
[in] rr The RR to add
Returns:
LDNS_STATUS_OK on success, an error code otherwise

Definition at line 501 of file dnssec_zone.c.

References ldns_rbnode_t::data, ldns_rbnode_t::key, ldns_dname_compare_v(), ldns_dnssec_name_add_rr(), ldns_dnssec_name_new_frm_rr(), LDNS_MALLOC, ldns_rbtree_create(), ldns_rbtree_insert(), ldns_rbtree_search(), ldns_rr_get_type(), ldns_rr_owner(), ldns_rr_print(), LDNS_RR_TYPE_SOA, LDNS_STATUS_ERR, LDNS_STATUS_OK, ldns_struct_dnssec_zone::names, and ldns_struct_dnssec_zone::soa.

void ldns_dnssec_zone_names_print ( FILE *  out,
ldns_rbtree_t tree,
bool  print_soa 
)

Prints the rbtree of ldns_dnssec_name structures to the file descriptor.

Parameters:
[in] out the file descriptor to print the names to
[in] tree the tree of ldns_dnssec_name structures to print
[in] print_soa if true, print SOA records, if false, skip them

Definition at line 543 of file dnssec_zone.c.

References ldns_rbnode_t::data, ldns_dnssec_name_print_soa(), ldns_rbtree_first(), ldns_rbtree_next(), and LDNS_RBTREE_NULL.

void ldns_dnssec_zone_print ( FILE *  out,
ldns_dnssec_zone zone 
)

Prints the complete zone to the given file descriptor.

Parameters:
[in] out the file descriptor to print to
[in] zone the dnssec_zone to print

Definition at line 558 of file dnssec_zone.c.

References ldns_dnssec_name_find_rrset(), ldns_dnssec_name_name(), ldns_dnssec_rrsets_print(), ldns_dnssec_zone_names_print(), ldns_rdf_print(), LDNS_RR_TYPE_SOA, ldns_struct_dnssec_zone::names, and ldns_struct_dnssec_zone::soa.

ldns_status ldns_dnssec_zone_add_empty_nonterminals ( ldns_dnssec_zone zone  ) 


Generated on Fri Aug 8 02:52:41 2008 for ldns by  doxygen 1.5.6