Functions
dname.c File Reference

Go to the source code of this file.

Functions

ldns_rdfldns_dname_cat_clone (const ldns_rdf *rd1, const ldns_rdf *rd2)
 concatenates two dnames together
ldns_status ldns_dname_cat (ldns_rdf *rd1, ldns_rdf *rd2)
 concatenates rd2 after rd1 (rd2 is copied, rd1 is modified)
ldns_rdfldns_dname_reverse (const ldns_rdf *d)
 Returns a clone of the given dname with the labels reversed.
ldns_rdfldns_dname_clone_from (const ldns_rdf *d, uint16_t n)
 Clones the given dname from the nth label on.
ldns_rdfldns_dname_left_chop (const ldns_rdf *d)
 chop one label off the left side of a dname.
uint8_t ldns_dname_label_count (const ldns_rdf *r)
 count the number of labels inside a LDNS_RDF_DNAME type rdf.
ldns_rdfldns_dname_new (uint16_t s, void *d)
 Create a new dname rdf from a string.
ldns_rdfldns_dname_new_frm_str (const char *str)
 creates a new dname rdf from a string.
ldns_rdfldns_dname_new_frm_data (uint16_t size, const void *data)
 Create a new dname rdf from data (the data is copied)
void ldns_dname2canonical (const ldns_rdf *rd)
 Put a dname into canonical fmt - ie.
bool ldns_dname_is_subdomain (const ldns_rdf *sub, const ldns_rdf *parent)
 test wether the name sub falls under parent (i.e.
int ldns_dname_compare (const ldns_rdf *dname1, const ldns_rdf *dname2)
 Compares the two dname rdf's according to the algorithm for ordering in RFC4034 Section 6.
int ldns_dname_is_wildcard (const ldns_rdf *dname)
 Check if dname is a wildcard, starts with *.
int ldns_dname_match_wildcard (const ldns_rdf *dname, const ldns_rdf *wildcard)
 Checks whether the dname matches the given wildcard.
int ldns_dname_interval (const ldns_rdf *prev, const ldns_rdf *middle, const ldns_rdf *next)
 check if middle lays in the interval defined by prev and next prev <= middle < next.
bool ldns_dname_str_absolute (const char *dname_str)
 Checks whether the given dname string is absolute (i.e.
ldns_rdfldns_dname_label (const ldns_rdf *rdf, uint8_t labelpos)
 look inside the rdf and if it is an LDNS_RDF_TYPE_DNAME try and retrieve a specific label.

Function Documentation

ldns_rdf* ldns_dname_cat_clone ( const ldns_rdf rd1,
const ldns_rdf rd2 
)

concatenates two dnames together

Parameters:
[in]rd1the leftside
[in]rd2the rightside
Returns:
a new rdf with leftside/rightside

Definition at line 34 of file dname.c.

References LDNS_FREE, ldns_rdf_data(), ldns_rdf_get_type(), ldns_rdf_new_frm_data(), ldns_rdf_size(), LDNS_RDF_TYPE_DNAME, and LDNS_XMALLOC.

ldns_status ldns_dname_cat ( ldns_rdf rd1,
ldns_rdf rd2 
)

concatenates rd2 after rd1 (rd2 is copied, rd1 is modified)

Parameters:
[in]rd1the leftside
[in]rd2the rightside
Returns:
LDNS_STATUS_OK on success

Definition at line 72 of file dname.c.

References ldns_rdf_data(), ldns_rdf_get_type(), ldns_rdf_set_data(), ldns_rdf_set_size(), ldns_rdf_size(), LDNS_RDF_TYPE_DNAME, LDNS_STATUS_ERR, LDNS_STATUS_MEM_ERR, LDNS_STATUS_OK, and LDNS_XREALLOC.

Returns a clone of the given dname with the labels reversed.

Parameters:
[in]dthe dname to reverse
Returns:
clone of the dname with the labels reversed.

Definition at line 109 of file dname.c.

References ldns_dname_cat(), ldns_dname_label(), ldns_dname_label_count(), ldns_dname_left_chop(), ldns_dname_new_frm_str(), ldns_rdf_clone(), ldns_rdf_deep_free(), and LDNS_STATUS_OK.

ldns_rdf* ldns_dname_clone_from ( const ldns_rdf d,
uint16_t  n 
)

Clones the given dname from the nth label on.

Parameters:
[in]dThe dname to clone
[in]nthe label nr to clone from, if this is 0, the complete dname is cloned
Returns:
A newly allocated *rdf structure, containing the cloned dname, or NULL if either d was NULL, not a dname, or if n >= label_count

Definition at line 142 of file dname.c.

References ldns_dname_label_count(), ldns_dname_new_frm_data(), ldns_rdf_data(), ldns_rdf_get_type(), ldns_rdf_size(), and LDNS_RDF_TYPE_DNAME.

chop one label off the left side of a dname.

so wwww.nlnetlabs.nl, becomes nlnetlabs.nl This new name is a clone and must be freed with ldns_deep_free()

Parameters:
[in]dthe dname to chop
Returns:
the remaining dname

Definition at line 171 of file dname.c.

References ldns_dname_label_count(), ldns_dname_new_frm_data(), ldns_rdf_data(), ldns_rdf_get_type(), ldns_rdf_size(), and LDNS_RDF_TYPE_DNAME.

uint8_t ldns_dname_label_count ( const ldns_rdf r)

count the number of labels inside a LDNS_RDF_DNAME type rdf.

Parameters:
[in]*rthe rdf
Returns:
the number of labels

Definition at line 196 of file dname.c.

References ldns_rdf_data(), ldns_rdf_get_type(), ldns_rdf_size(), and LDNS_RDF_TYPE_DNAME.

ldns_rdf* ldns_dname_new ( uint16_t  s,
void *  data 
)

Create a new dname rdf from a string.

Parameters:
[in]sthe size of the new dname
[in]*datapointer to the actual data
Returns:
ldns_rdf*

Definition at line 232 of file dname.c.

References LDNS_MALLOC, ldns_rdf_set_data(), ldns_rdf_set_size(), ldns_rdf_set_type(), and LDNS_RDF_TYPE_DNAME.

ldns_rdf* ldns_dname_new_frm_str ( const char *  str)

creates a new dname rdf from a string.

Parameters:
[in]strstring to use
Returns:
ldns_rdf* or NULL in case of an error

Definition at line 247 of file dname.c.

References ldns_rdf_new_frm_str(), and LDNS_RDF_TYPE_DNAME.

ldns_rdf* ldns_dname_new_frm_data ( uint16_t  size,
const void *  data 
)

Create a new dname rdf from data (the data is copied)

Parameters:
[in]sizethe size of the data
[in]*datapointer to the actual data
Returns:
ldns_rdf*

Definition at line 253 of file dname.c.

References ldns_rdf_new_frm_data(), and LDNS_RDF_TYPE_DNAME.

void ldns_dname2canonical ( const ldns_rdf rdf)

Put a dname into canonical fmt - ie.

lowercase it

Parameters:
[in]rdfthe dname to lowercase
Returns:
void

Definition at line 259 of file dname.c.

References LDNS_DNAME_NORMALIZE, ldns_rdf_data(), ldns_rdf_get_type(), ldns_rdf_size(), and LDNS_RDF_TYPE_DNAME.

bool ldns_dname_is_subdomain ( const ldns_rdf sub,
const ldns_rdf parent 
)

test wether the name sub falls under parent (i.e.

is a subdomain of parent). This function will return false if the given dnames are equal.

Parameters:
[in]subthe name to test
[in]parentthe parent's name
Returns:
true if sub falls under parent, otherwise false

Definition at line 275 of file dname.c.

References ldns_dname2canonical(), ldns_dname_clone_from(), ldns_dname_label(), ldns_dname_label_count(), ldns_rdf_compare(), ldns_rdf_deep_free(), ldns_rdf_get_type(), and LDNS_RDF_TYPE_DNAME.

int ldns_dname_compare ( const ldns_rdf dname1,
const ldns_rdf dname2 
)

Compares the two dname rdf's according to the algorithm for ordering in RFC4034 Section 6.

Parameters:
[in]dname1First dname rdf to compare
[in]dname2Second dname rdf to compare
Returns:
-1 if dname1 comes before dname2, 1 if dname1 comes after dname2, and 0 if they are equal.

Definition at line 338 of file dname.c.

References ldns_dname_label_count(), LDNS_DNAME_NORMALIZE, ldns_rdf_data(), ldns_rdf_get_type(), and LDNS_RDF_TYPE_DNAME.

int ldns_dname_is_wildcard ( const ldns_rdf dname)

Check if dname is a wildcard, starts with *.

Parameters:
[in]dname,:the rdf to look in
Returns:
true if a wildcard, false if not.

Definition at line 435 of file dname.c.

References ldns_dname_label_count(), and ldns_rdf_data().

int ldns_dname_match_wildcard ( const ldns_rdf dname,
const ldns_rdf wildcard 
)

Checks whether the dname matches the given wildcard.

Parameters:
[in]dnameThe dname to check
[in]wildcardThe wildcard to check with
Returns:
1 If the wildcard matches, OR if 'wildcard' is not a wildcard and the names are *exactly* the same 0 If the wildcard does not match, or if it is not a wildcard and the names are not the same

Definition at line 443 of file dname.c.

References ldns_dname_compare(), ldns_dname_is_subdomain(), ldns_dname_is_wildcard(), ldns_dname_left_chop(), and ldns_rdf_deep_free().

int ldns_dname_interval ( const ldns_rdf prev,
const ldns_rdf middle,
const ldns_rdf next 
)

check if middle lays in the interval defined by prev and next prev <= middle < next.

This is usefull for nsec checking

Parameters:
[in]prevthe previous dname
[in]middlethe dname to check
[in]nextthe next dname return 0 on error or unknown, -1 when middle is in the interval, +1 when not

Definition at line 467 of file dname.c.

References ldns_dname_compare(), ldns_rdf_get_type(), and LDNS_RDF_TYPE_DNAME.

bool ldns_dname_str_absolute ( const char *  dname_str)

Checks whether the given dname string is absolute (i.e.

ends with a '.')

Parameters:
[in]*dname_stra string representing the dname
Returns:
true or false

Definition at line 497 of file dname.c.

ldns_rdf* ldns_dname_label ( const ldns_rdf rdf,
uint8_t  labelpos 
)

look inside the rdf and if it is an LDNS_RDF_TYPE_DNAME try and retrieve a specific label.

The labels are numbered starting from 0 (left most).

Parameters:
[in]rdfthe rdf to look in
[in]labelposreturn the label with this number
Returns:
a ldns_rdf* with the label as name or NULL on error

Definition at line 526 of file dname.c.

References ldns_struct_rdf::_data, ldns_struct_rdf::_size, ldns_struct_rdf::_type, LDNS_FREE, LDNS_MALLOC, ldns_rdf_data(), ldns_rdf_get_type(), ldns_rdf_size(), LDNS_RDF_TYPE_DNAME, and LDNS_XMALLOC.