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 *dname)
 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.
bool ldns_dname_absolute (const ldns_rdf *rdf)
 Checks whether the given dname 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] rd1 the leftside
[in] rd2 the rightside
Returns:
a new rdf with leftside/rightside

Definition at line 52 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] rd1 the leftside
[in] rd2 the rightside
Returns:
LDNS_STATUS_OK on success

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

ldns_rdf* ldns_dname_reverse ( const ldns_rdf d  ) 

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

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

Definition at line 124 of file dname.c.

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

ldns_rdf* ldns_dname_clone_from ( const ldns_rdf d,
uint16_t  n 
)

Clones the given dname from the nth label on.

Parameters:
[in] d The dname to clone
[in] n the 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 160 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.

ldns_rdf* ldns_dname_left_chop ( const ldns_rdf d  ) 

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] d the dname to chop
Returns:
the remaining dname

Definition at line 189 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] *r the rdf
Returns:
the number of labels

Definition at line 214 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] s the size of the new dname
[in] *data pointer to the actual data
Returns:
ldns_rdf*

Definition at line 250 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] str string to use
Returns:
ldns_rdf* or NULL in case of an error

Definition at line 265 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] size the size of the data
[in] *data pointer to the actual data
Returns:
ldns_rdf*

Definition at line 271 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] rdf the dname to lowercase
Returns:
void

Definition at line 277 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] sub the name to test
[in] parent the parent's name
Returns:
true if sub falls under parent, otherwise false

Definition at line 293 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] dname1 First dname rdf to compare
[in] dname2 Second 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 356 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 453 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] dname The dname to check
[in] wildcard The 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 461 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] prev the previous dname
[in] middle the dname to check
[in] next the next dname return 0 on error or unknown, -1 when middle is in the interval, +1 when not

Definition at line 485 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_str a string representing the dname
Returns:
true or false

Definition at line 515 of file dname.c.

bool ldns_dname_absolute ( const ldns_rdf dname  ) 

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

ends with a '.')

Parameters:
[in] *dname a rdf representing the dname
Returns:
true or false

Definition at line 544 of file dname.c.

References ldns_dname_str_absolute(), LDNS_FREE, and ldns_rdf2str().

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] rdf the rdf to look in
[in] labelpos return the label with this number
Returns:
a ldns_rdf* with the label as name or NULL on error

Definition at line 556 of file dname.c.

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


Generated on 20 Mar 2013 for ldns by  doxygen 1.4.7