/build/ldns-NeVfgT/ldns-1.9.2/dnssec_zone.c File Reference

Go to the source code of this file.

## Data Structures

struct | dnssec_zone_rr_iter
struct | struct_zone_digester

## Macros

#define | FASTER_DNSSEC_ZONE_NEW_FRM_FP 1 /* Because of L2 cache efficiency */

## Typedefs

typedef enum dnssec_zone_rr_iter_state | dnssec_zone_rr_iter_state
typedef struct dnssec_zone_rr_iter | dnssec_zone_rr_iter
typedef enum enum_zonemd_scheme | zonemd_scheme
typedef enum enum_zonemd_hash | zonemd_hash
typedef struct struct_zone_digester | zone_digester

## Enumerations

enum | dnssec_zone_rr_iter_state { DNSSEC_ZONE_RR_ITER_LT_RRSIG , DNSSEC_ZONE_RR_ITER_RRSIGs_NO_NSEC , DNSSEC_ZONE_RR_ITER_REST , DNSSEC_ZONE_RR_ITER_RRSIGs_NSEC , DNSSEC_ZONE_RR_ITER_RRSIGs_NSEC_REST , DNSSEC_ZONE_RR_ITER_NSEC3 , DNSSEC_ZONE_RR_ITER_FINI }
enum | enum_zonemd_scheme { ZONEMD_SCHEME_FIRST = 1 , ZONEMD_SCHEME_SIMPLE = 1 , ZONEMD_SCHEME_LAST = 1 }
enum | enum_zonemd_hash { ZONEMD_HASH_FIRST = 1 , ZONEMD_HASH_SHA384 = 1 , ZONEMD_HASH_SHA512 = 2 , ZONEMD_HASH_LAST = 2 }

## Functions

ldns_dnssec_rrs * | ldns_dnssec_rrs_new (void)
| 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 the individual ldns_rr records contained in the list.
void | ldns_dnssec_rrs_deep_free (ldns_dnssec_rrs *rrs)
| Frees the list of rrs, and the individual ldns_rr records contained in the list.
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_fmt (FILE *out, const ldns_output_format *fmt, const ldns_dnssec_rrs *rrs)
| Prints the given rrs to the file descriptor.
void | ldns_dnssec_rrs_print (FILE *out, const ldns_dnssec_rrs *rrs)
| Prints the given rrs to the file descriptor.
ldns_dnssec_rrsets * | ldns_dnssec_rrsets_new (void)
| 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 the ldns_rr records in the sets.
void | ldns_dnssec_rrsets_deep_free (ldns_dnssec_rrsets *rrsets)
| Frees the list of rrsets and their rrs, and the ldns_rr records in the sets.
ldns_rr_type | ldns_dnssec_rrsets_type (const 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_fmt (FILE *out, const ldns_output_format *fmt, const ldns_dnssec_rrsets *rrsets, signed char follow)
| Print the given list of rrsets to the given file descriptor.
void | ldns_dnssec_rrsets_print (FILE *out, const ldns_dnssec_rrsets *rrsets, signed char follow)
| Print the given list of rrsets to the given file descriptor.
ldns_dnssec_name * | ldns_dnssec_name_new (void)
| Create a new data structure for a dnssec name.
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.
void | ldns_dnssec_name_free (ldns_dnssec_name *name)
| Frees the name structure and its rrs and rrsets.
void | ldns_dnssec_name_deep_free (ldns_dnssec_name *name)
| Frees the name structure and its rrs and rrsets.
ldns_rdf * | ldns_dnssec_name_name (const ldns_dnssec_name *name)
| Returns the domain name of the given dnssec_name structure.
signed char | ldns_dnssec_name_is_glue (const ldns_dnssec_name *name)
| Returns if dnssec_name structure is marked as glue.
void | ldns_dnssec_name_set_name (ldns_dnssec_name *rrset, ldns_rdf *dname)
| Sets the domain name of the given dnssec_name structure.
void | ldns_dnssec_name_set_nsec (ldns_dnssec_name *rrset, 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 ordering.
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_rrsets * | ldns_dnssec_name_find_rrset (const ldns_dnssec_name *name, ldns_rr_type type)
| Find the RRset with the given type in within this name structure.
ldns_dnssec_rrsets * | ldns_dnssec_zone_find_rrset (const ldns_dnssec_zone *zone, const ldns_rdf *dname, ldns_rr_type type)
| Find the RRset with the given name and type in the zone.
void | ldns_dnssec_name_print_fmt (FILE *out, const ldns_output_format *fmt, const ldns_dnssec_name *name)
| Prints the RRs in the dnssec name structure to the given file descriptor.
void | ldns_dnssec_name_print (FILE *out, const ldns_dnssec_name *name)
| Prints the RRs in the dnssec name structure to the given file descriptor.
ldns_dnssec_zone * | ldns_dnssec_zone_new (void)
| Creates a new dnssec_zone structure.
ldns_status | ldns_dnssec_zone_new_frm_fp_l (ldns_dnssec_zone **z, FILE *fp, const ldns_rdf *origin, uint32_t default_ttl, ldns_rr_class c __attribute__((unused)), int *line_nr)
ldns_status | ldns_dnssec_zone_new_frm_fp (ldns_dnssec_zone **z, FILE *fp, const ldns_rdf *origin, uint32_t ttl, ldns_rr_class c __attribute__((unused)))
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.
void | ldns_dnssec_zone_deep_free (ldns_dnssec_zone *zone)
| Frees the given zone structure, and its rbtree of dnssec_names Individual ldns_rr RRs within those names are also freed.
int | ldns_dname_compare_v (const void *a, const void *b)
| Given in dnssec_zone.c, also used in dnssec_sign.c:w.
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_fmt (FILE *out, const ldns_output_format *fmt, const ldns_rbtree_t *tree, signed char print_soa)
| Prints the rbtree of ldns_dnssec_name structures to the file descriptor.
void | ldns_dnssec_zone_names_print (FILE *out, const ldns_rbtree_t *tree, signed char print_soa)
| Prints the rbtree of ldns_dnssec_name structures to the file descriptor.
void | ldns_dnssec_zone_print_fmt (FILE *out, const ldns_output_format *fmt, const ldns_dnssec_zone *zone)
| Prints the complete zone to the given file descriptor.
void | ldns_dnssec_zone_print (FILE *out, const 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.
signed char | ldns_dnssec_zone_is_nsec3_optout (const ldns_dnssec_zone *zone)
| If a NSEC3PARAM is available in the apex, walks the zone and returns true on the first optout nsec3.
ldns_status | ldns_dnssec_zone_verify_zonemd (ldns_dnssec_zone *zone)
ldns_status | dnssec_zone_equip_zonemd (ldns_dnssec_zone *zone, ldns_rr_list *new_rrs, ldns_key_list *key_list, int signflags)

## Macro Definition Documentation

## FASTER_DNSSEC_ZONE_NEW_FRM_FP

#define FASTER_DNSSEC_ZONE_NEW_FRM_FP 1 /* Because of L2 cache efficiency */

Definition at line 596 of file dnssec_zone.c.

## Typedef Documentation

## dnssec_zone_rr_iter_state

typedef enum dnssec_zone_rr_iter_state dnssec_zone_rr_iter_state

## dnssec_zone_rr_iter

typedef struct dnssec_zone_rr_iter dnssec_zone_rr_iter

## zonemd_scheme

typedef enum enum_zonemd_scheme zonemd_scheme

Definition at line 1548 of file dnssec_zone.c.

## zonemd_hash

typedef enum enum_zonemd_hash zonemd_hash

Definition at line 1556 of file dnssec_zone.c.

## zone_digester

typedef struct struct_zone_digester zone_digester

Definition at line 1566 of file dnssec_zone.c.

## Enumeration Type Documentation

## dnssec_zone_rr_iter_state

enum dnssec_zone_rr_iter_state

Enumerator
DNSSEC_ZONE_RR_ITER_LT_RRSIG |
DNSSEC_ZONE_RR_ITER_RRSIGs_NO_NSEC |
DNSSEC_ZONE_RR_ITER_REST |
DNSSEC_ZONE_RR_ITER_RRSIGs_NSEC |
DNSSEC_ZONE_RR_ITER_RRSIGs_NSEC_REST |
DNSSEC_ZONE_RR_ITER_NSEC3 |
DNSSEC_ZONE_RR_ITER_FINI |

Definition at line 1296 of file dnssec_zone.c.

## enum_zonemd_scheme

enum enum_zonemd_scheme

Enumerator
ZONEMD_SCHEME_FIRST |
ZONEMD_SCHEME_SIMPLE |
ZONEMD_SCHEME_LAST |

Definition at line 1543 of file dnssec_zone.c.

## enum_zonemd_hash

enum enum_zonemd_hash

Enumerator
ZONEMD_HASH_FIRST |
ZONEMD_HASH_SHA384 |
ZONEMD_HASH_SHA512 |
ZONEMD_HASH_LAST |

Definition at line 1550 of file dnssec_zone.c.

## Function Documentation

## ldns_dnssec_rrs_new()

ldns_dnssec_rrs * ldns_dnssec_rrs_new | ( | void |  | ) |

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.

## ldns_dnssec_rrs_free()

void ldns_dnssec_rrs_free | ( | ldns_dnssec_rrs * | rrs | ) |

Frees the list of rrs, but not the individual ldns_rr records contained in the list.

Parameters

  [in] | rrs | the data structure to free

Definition at line 35 of file dnssec_zone.c.

## ldns_dnssec_rrs_deep_free()

void ldns_dnssec_rrs_deep_free | ( | ldns_dnssec_rrs * | rrs | ) |

Frees the list of rrs, and the individual ldns_rr records contained in the list.

Parameters

  [in] | rrs | the data structure to free

Definition at line 41 of file dnssec_zone.c.

## ldns_dnssec_rrs_add_rr()

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. If an equal RR already exists, this RR will not be added.

Parameters

  [in] | rrs | the list to add to
  [in] | rr | the RR to add

Returns
  LDNS_STATUS_OK on success and LDNS_STATUS_EQUAL_ERR when and RR with equal ownername, class, type and rdata already exists.

Definition at line 47 of file dnssec_zone.c.

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

## ldns_dnssec_rrs_print_fmt()

void ldns_dnssec_rrs_print_fmt | ( | FILE * | out,
|  | const ldns_output_format * | fmt,
|  | const ldns_dnssec_rrs * | rrs )

Prints the given rrs to the file descriptor.

Parameters

  [in] | out | the file descriptor to print to
  [in] | fmt | the format of the textual representation
  [in] | rrs | the list of RRs to print

Definition at line 81 of file dnssec_zone.c.

References ldns_struct_output_format::flags, LDNS_COMMENT_LAYOUT, ldns_dnssec_rrs_print_fmt(), ldns_rr_print_fmt(), ldns_struct_dnssec_rrs::next, and ldns_struct_dnssec_rrs::rr.

## ldns_dnssec_rrs_print()

void ldns_dnssec_rrs_print | ( | FILE * | out,
|  | const 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 98 of file dnssec_zone.c.

References ldns_dnssec_rrs_print_fmt(), and ldns_output_format_default.

## ldns_dnssec_rrsets_new()

ldns_dnssec_rrsets * ldns_dnssec_rrsets_new | ( | void |  | ) |

Creates a new list (entry) of RRsets.

Returns
  the newly allocated structure

Definition at line 105 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.

## ldns_dnssec_rrsets_free()

void ldns_dnssec_rrsets_free | ( | ldns_dnssec_rrsets * | rrsets | ) |

Frees the list of rrsets and their rrs, but not the ldns_rr records in the sets.

Parameters

  [in] | rrsets | the data structure to free

Definition at line 135 of file dnssec_zone.c.

## ldns_dnssec_rrsets_deep_free()

void ldns_dnssec_rrsets_deep_free | ( | ldns_dnssec_rrsets * | rrsets | ) |

Frees the list of rrsets and their rrs, and the ldns_rr records in the sets.

Parameters

  [in] | rrsets | the data structure to free

Definition at line 141 of file dnssec_zone.c.

## ldns_dnssec_rrsets_type()

ldns_rr_type ldns_dnssec_rrsets_type | ( | const 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 147 of file dnssec_zone.c.

References ldns_struct_dnssec_rrsets::type.

## ldns_dnssec_rrsets_set_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 157 of file dnssec_zone.c.

References LDNS_STATUS_ERR, LDNS_STATUS_OK, and ldns_struct_dnssec_rrsets::type.

## ldns_dnssec_rrsets_add_rr()

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 and LDNS_STATUS_EQUAL_ERR when and RR with equal ownername, class, type and rdata already exists.

Definition at line 194 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.

## ldns_dnssec_rrsets_print_fmt()

void ldns_dnssec_rrsets_print_fmt | ( | FILE * | out,
|  | const ldns_output_format * | fmt,
|  | const ldns_dnssec_rrsets * | rrsets,
|  | signed char | follow )

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

Parameters

  [in] | out | the file descriptor to print to
  [in] | fmt | the format of the textual representation
  [in] | rrsets | the list of RRsets to print
  [in] | follow | if set to false, only print the first RRset

Definition at line 303 of file dnssec_zone.c.

## ldns_dnssec_rrsets_print()

void ldns_dnssec_rrsets_print | ( | FILE * | out,
|  | const ldns_dnssec_rrsets * | rrsets,
|  | signed char | follow )

Print the given list of rrsets to the given 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 311 of file dnssec_zone.c.

References ldns_dnssec_rrsets_print_fmt(), and ldns_output_format_default.

## ldns_dnssec_name_new()

ldns_dnssec_name * ldns_dnssec_name_new | ( | void |  | ) |

Create a new data structure for a dnssec name.

Returns
  the allocated structure

Definition at line 318 of file dnssec_zone.c.

References LDNS_CALLOC.

## ldns_dnssec_name_new_frm_rr()

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 343 of file dnssec_zone.c.

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

## ldns_dnssec_name_free()

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 384 of file dnssec_zone.c.

## ldns_dnssec_name_deep_free()

void ldns_dnssec_name_deep_free | ( | ldns_dnssec_name * | name | ) |

Frees the name structure and its rrs and rrsets.

Individual ldns_rr records contained in the name are also freed

Parameters

  [in] | name | the structure to free

Definition at line 390 of file dnssec_zone.c.

## ldns_dnssec_name_name()

ldns_rdf * ldns_dnssec_name_name | ( | const 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 396 of file dnssec_zone.c.

References ldns_struct_dnssec_name::name.

## ldns_dnssec_name_is_glue()

signed char ldns_dnssec_name_is_glue | ( | const ldns_dnssec_name * | name | ) |

Returns if dnssec_name structure is marked as glue.

The ldns_dnssec_zone_mark_glue() function has to be called on a zone before using this function. Only names that have only glue rrsets will be marked. Names that have other occluded rrsets and names containing glue on the delegation point will NOT be marked!

Parameters

  [in] | name | the dnssec name to get the domain name from

Returns
  true if the structure is marked as glue, false otherwise.

Definition at line 405 of file dnssec_zone.c.

References ldns_struct_dnssec_name::is_glue.

## ldns_dnssec_name_set_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 414 of file dnssec_zone.c.

References ldns_struct_dnssec_name::name.

## ldns_dnssec_name_set_nsec()

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 424 of file dnssec_zone.c.

References ldns_struct_dnssec_name::nsec.

## ldns_dnssec_name_cmp()

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

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

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 ordering, 1 if it is the other way around, and 0 if they are equal

Definition at line 432 of file dnssec_zone.c.

References ldns_dname_compare(), and ldns_dnssec_name_name().

## ldns_dnssec_name_add_rr()

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 and LDNS_STATUS_EQUAL_ERR when and RR with equal ownername, class, type and rdata already exists, and an error code otherwise

Definition at line 450 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_rdf2rr_type(), 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_name_find_rrset()

ldns_dnssec_rrsets * ldns_dnssec_name_find_rrset | ( | const 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 494 of file dnssec_zone.c.

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

## ldns_dnssec_zone_find_rrset()

ldns_dnssec_rrsets * ldns_dnssec_zone_find_rrset | ( | const ldns_dnssec_zone * | zone,
|  | const 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 510 of file dnssec_zone.c.

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

## ldns_dnssec_name_print_fmt()

void ldns_dnssec_name_print_fmt | ( | FILE * | out,
|  | const ldns_output_format * | fmt,
|  | const 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] | fmt | the format of the textual representation
  [in] | name | the name structure to print the contents of

Definition at line 557 of file dnssec_zone.c.

## ldns_dnssec_name_print()

void ldns_dnssec_name_print | ( | FILE * | out,
|  | const 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 564 of file dnssec_zone.c.

References ldns_dnssec_name_print_fmt(), and ldns_output_format_default.

## ldns_dnssec_zone_new()

ldns_dnssec_zone * ldns_dnssec_zone_new | ( | void |  | ) |

Creates a new dnssec_zone structure.

Returns
  the allocated structure

Definition at line 571 of file dnssec_zone.c.

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

## ldns_dnssec_zone_new_frm_fp_l()

ldns_status ldns_dnssec_zone_new_frm_fp_l | ( | ldns_dnssec_zone ** | z,
|  | FILE * | fp,
|  | const ldns_rdf * | origin,
|  | uint32_t | default_ttl,
|  | ldns_rr_class c | __attribute__(unused),
|  | int * | line_nr )

Definition at line 610 of file dnssec_zone.c.

References ldns_rbtree_t::count, ldns_rbnode_t::data, ldns_rbnode_t::key, ldns_dname_compare(), ldns_dname_compare_v(), ldns_dname_label(), ldns_dnssec_zone_add_rr(), ldns_dnssec_zone_free(), ldns_dnssec_zone_new(), LDNS_FREE, LDNS_MALLOC, ldns_rbtree_init(), ldns_rbtree_insert(), ldns_rdf2native_int32(), ldns_rdf_clone(), ldns_rdf_deep_free(), ldns_rdf_get_type(), LDNS_RDF_TYPE_INT32, ldns_rr_free(), ldns_rr_get_type(), ldns_rr_list_free(), ldns_rr_list_new(), ldns_rr_list_push_rr(), ldns_rr_list_rr(), ldns_rr_list_rr_count(), ldns_rr_new_frm_fp_l(), ldns_rr_owner(), ldns_rr_rd_count(), ldns_rr_rdf(), ldns_rr_set_ttl(), ldns_rr_ttl(), LDNS_RR_TYPE_NSEC3, LDNS_RR_TYPE_RRSIG, LDNS_RR_TYPE_SIG, LDNS_STATUS_DNSSEC_NSEC3_ORIGINAL_NOT_FOUND, LDNS_STATUS_EQUAL_RR, LDNS_STATUS_MEM_ERR, LDNS_STATUS_OK, LDNS_STATUS_SYNTAX_EMPTY, LDNS_STATUS_SYNTAX_INCLUDE, LDNS_STATUS_SYNTAX_INCLUDE_ERR_NOTIMPL, LDNS_STATUS_SYNTAX_ORIGIN, LDNS_STATUS_SYNTAX_TTL, ldns_traverse_postorder(), ldns_zone_free(), ldns_zone_new_frm_fp_l(), ldns_zone_rrs(), and ldns_zone_soa().

## ldns_dnssec_zone_new_frm_fp()

ldns_status ldns_dnssec_zone_new_frm_fp | ( | ldns_dnssec_zone ** | z,
|  | FILE * | fp,
|  | const ldns_rdf * | origin,
|  | uint32_t | ttl,
|  | ldns_rr_class c | __attribute__(unused) )

Definition at line 851 of file dnssec_zone.c.

References ldns_dnssec_zone_new_frm_fp_l().

## ldns_dnssec_zone_free()

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 878 of file dnssec_zone.c.

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

## ldns_dnssec_zone_deep_free()

void ldns_dnssec_zone_deep_free | ( | ldns_dnssec_zone * | zone | ) |

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

Parameters

  [in] | *zone | the zone to free

Definition at line 898 of file dnssec_zone.c.

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

## ldns_dname_compare_v()

int ldns_dname_compare_v | ( | const void * | a,
|  | const void * | b )

Given in dnssec_zone.c, also used in dnssec_sign.c:w.

Definition at line 919 of file dnssec_zone.c.

References ldns_dname_compare().

## ldns_dnssec_zone_add_rr()

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 and LDNS_STATUS_EQUAL_ERR when and RR with equal ownername, class, type and rdata already exists, and an error code otherwise

Definition at line 1015 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_free(), ldns_dnssec_name_new_frm_rr(), LDNS_MALLOC, ldns_rbtree_create(), ldns_rbtree_insert(), ldns_rbtree_search(), ldns_rdf2rr_type(), ldns_rr_get_type(), ldns_rr_owner(), ldns_rr_rrsig_typecovered(), LDNS_RR_TYPE_NSEC3, LDNS_RR_TYPE_RRSIG, LDNS_RR_TYPE_SOA, LDNS_STATUS_DNSSEC_NSEC3_ORIGINAL_NOT_FOUND, LDNS_STATUS_ERR, LDNS_STATUS_MEM_ERR, LDNS_STATUS_OK, ldns_struct_dnssec_zone::names, and ldns_struct_dnssec_zone::soa.

## ldns_dnssec_zone_names_print_fmt()

void ldns_dnssec_zone_names_print_fmt | ( | FILE * | out,
|  | const ldns_output_format * | fmt,
|  | const ldns_rbtree_t * | tree,
|  | signed char | 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] | fmt | the format of the textual representation
  [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 1069 of file dnssec_zone.c.

References ldns_rbnode_t::data, ldns_struct_output_format::flags, LDNS_COMMENT_LAYOUT, ldns_rbtree_first(), ldns_rbtree_next(), and LDNS_RBTREE_NULL.

## ldns_dnssec_zone_names_print()

void ldns_dnssec_zone_names_print | ( | FILE * | out,
|  | const ldns_rbtree_t * | tree,
|  | signed char | 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 1087 of file dnssec_zone.c.

References ldns_dnssec_zone_names_print_fmt(), and ldns_output_format_default.

## ldns_dnssec_zone_print_fmt()

void ldns_dnssec_zone_print_fmt | ( | FILE * | out,
|  | const ldns_output_format * | fmt,
|  | const ldns_dnssec_zone * | zone )

Prints the complete zone to the given file descriptor.

Parameters

  [in] | out | the file descriptor to print to
  [in] | fmt | the format of the textual representation
  [in] | zone | the dnssec_zone to print

Definition at line 1094 of file dnssec_zone.c.

References ldns_struct_output_format::flags, LDNS_COMMENT_LAYOUT, ldns_dnssec_name_find_rrset(), ldns_dnssec_name_name(), ldns_dnssec_rrsets_print_fmt(), ldns_dnssec_zone_names_print_fmt(), ldns_rdf_print(), LDNS_RR_TYPE_SOA, ldns_struct_dnssec_zone::names, and ldns_struct_dnssec_zone::soa.

## ldns_dnssec_zone_print()

void ldns_dnssec_zone_print | ( | FILE * | out,
|  | const 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 1122 of file dnssec_zone.c.

References ldns_dnssec_zone_print_fmt(), and ldns_output_format_default.

## ldns_dnssec_zone_add_empty_nonterminals()

ldns_status ldns_dnssec_zone_add_empty_nonterminals | ( | ldns_dnssec_zone * | zone | ) |

Adds explicit dnssec_name structures for the empty nonterminals in this zone.

(this is needed for NSEC3 generation)

Parameters

  [in] | zone | the zone to check for empty nonterminals return LDNS_STATUS_OK on success.

Definition at line 1267 of file dnssec_zone.c.

## ldns_dnssec_zone_is_nsec3_optout()

signed char ldns_dnssec_zone_is_nsec3_optout | ( | const ldns_dnssec_zone * | zone | ) |

If a NSEC3PARAM is available in the apex, walks the zone and returns true on the first optout nsec3.

Parameters

  [in] | zone | the zone to check for nsec3 optout records return true when the zone has at least one nsec3 optout record.

Definition at line 1273 of file dnssec_zone.c.

References ldns_rbnode_t::data, ldns_dnssec_name_find_rrset(), ldns_nsec3_optout(), ldns_rbtree_first(), ldns_rbtree_next(), LDNS_RBTREE_NULL, ldns_rr_get_type(), LDNS_RR_TYPE_NSEC3, LDNS_RR_TYPE_NSEC3PARAM, ldns_struct_dnssec_zone::names, and ldns_struct_dnssec_zone::soa.

## ldns_dnssec_zone_verify_zonemd()

ldns_status ldns_dnssec_zone_verify_zonemd | ( | ldns_dnssec_zone * | zone | ) |

Definition at line 1779 of file dnssec_zone.c.

References ldns_rbnode_t::data, ldns_struct_dnssec_name::hashed_name, ldns_struct_dnssec_zone::hashed_names, ldns_dnssec_zone_find_rrset(), ldns_nsec_bitmap_covers_type(), ldns_nsec_get_bitmap(), LDNS_RBTREE_NULL, ldns_rbtree_search(), ldns_rdf2native_int32(), ldns_rdf2native_int8(), ldns_rdf_data(), ldns_rdf_size(), ldns_rr_get_type(), ldns_rr_rd_count(), ldns_rr_rdf(), LDNS_RR_TYPE_SOA, LDNS_RR_TYPE_ZONEMD, LDNS_SHA384_DIGEST_LENGTH, ldns_sha384_final(), LDNS_SHA512_DIGEST_LENGTH, ldns_sha512_final(), LDNS_STATUS_NO_VALID_ZONEMD, LDNS_STATUS_NO_ZONEMD, LDNS_STATUS_NULL, LDNS_STATUS_OK, LDNS_STATUS_ZONEMD_INVALID_SOA, ldns_struct_dnssec_name::name, ldns_struct_dnssec_rrs::next, ldns_struct_dnssec_name::nsec, ldns_struct_dnssec_rrs::rr, ldns_struct_dnssec_rrsets::rrs, struct_zone_digester::sha384_CTX, struct_zone_digester::sha512_CTX, struct_zone_digester::simple_sha384, struct_zone_digester::simple_sha512, ldns_struct_dnssec_zone::soa, ZONEMD_HASH_SHA384, ZONEMD_HASH_SHA512, and ZONEMD_SCHEME_SIMPLE.

## dnssec_zone_equip_zonemd()

ldns_status dnssec_zone_equip_zonemd | ( | ldns_dnssec_zone * | zone,
|  | ldns_rr_list * | new_rrs,
|  | ldns_key_list * | key_list,
|  | int | signflags )

Definition at line 1937 of file dnssec_zone.c.

References ldns_dnssec_rrs_free(), ldns_dnssec_rrsets_new(), ldns_dnssec_zone_find_rrset(), ldns_rr_list_deep_free(), LDNS_RR_TYPE_SOA, LDNS_RR_TYPE_ZONEMD, ldns_sign_public(), LDNS_SIGN_WITH_ZONEMD_SIMPLE_SHA384, LDNS_SIGN_WITH_ZONEMD_SIMPLE_SHA512, LDNS_STATUS_MEM_ERR, LDNS_STATUS_OK, LDNS_STATUS_ZONEMD_INVALID_SOA, ldns_struct_dnssec_name::name, ldns_struct_dnssec_rrsets::next, ldns_struct_dnssec_rrs::rr, ldns_struct_dnssec_rrsets::rrs, ldns_struct_dnssec_name::rrsets, ldns_struct_dnssec_rrsets::signatures, ldns_struct_dnssec_zone::soa, ldns_struct_dnssec_rrsets::type, ZONEMD_HASH_SHA384, ZONEMD_HASH_SHA512, and ZONEMD_SCHEME_SIMPLE.