Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 550bbe86d83a7870fdddc73c68e5d2b2 > files > 49

libunbound-devel-1.3.4-1mdv2010.0.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>unbound: util/data/dname.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.9 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
  <div class="navpath"><a class="el" href="dir_4b581c88b01efb1cf178857b56f0f2fb.html">util</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_ee94850d65962e9d83c6a3a53d0a46bb.html">data</a>
  </div>
</div>
<div class="contents">
<h1>dname.h File Reference</h1>This file contains functions to deal with domain names (dnames).  
<a href="#_details">More...</a>
<p>
<code>#include &quot;<a class="el" href="lruhash_8h.html">util/storage/lruhash.h</a>&quot;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e4ea277d73159642faf53d0789c3ac54"></a><!-- doxytag: member="dname.h::MAX_COMPRESS_PTRS" ref="e4ea277d73159642faf53d0789c3ac54" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#e4ea277d73159642faf53d0789c3ac54">MAX_COMPRESS_PTRS</a>&nbsp;&nbsp;&nbsp;256</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">max number of compression ptrs to follow <br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#4bdfbd50f1512972b4cb60abfe35afdb">query_dname_len</a> (ldns_buffer *query)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determine length of dname in buffer, no compression ptrs allowed,.  <a href="#4bdfbd50f1512972b4cb60abfe35afdb"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#241c0bf71262510a96f365d0022ce929">dname_valid</a> (uint8_t *dname, size_t len)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determine if dname in memory is correct.  <a href="#241c0bf71262510a96f365d0022ce929"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5902f151de79714d05aaa20288e69b8e"></a><!-- doxytag: member="dname.h::query_dname_tolower" ref="5902f151de79714d05aaa20288e69b8e" args="(uint8_t *dname)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#5902f151de79714d05aaa20288e69b8e">query_dname_tolower</a> (uint8_t *dname)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">lowercase query dname <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#530a985df48ca142e7189093ce5a5761">pkt_dname_tolower</a> (ldns_buffer *pkt, uint8_t *dname)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">lowercase pkt dname (follows compression pointers)  <a href="#530a985df48ca142e7189093ce5a5761"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#39b434bef0aa08a3781c8992c16a8855">query_dname_compare</a> (uint8_t *d1, uint8_t *d2)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compare query dnames (uncompressed storage).  <a href="#39b434bef0aa08a3781c8992c16a8855"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#fc026d967e97e8e4ec677482d1df3ab6">pkt_dname_len</a> (ldns_buffer *pkt)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determine correct, compressed, dname present in packet.  <a href="#fc026d967e97e8e4ec677482d1df3ab6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#1782675e1931b3f5adacc98bdbfc7b98">dname_pkt_compare</a> (ldns_buffer *pkt, uint8_t *d1, uint8_t *d2)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compare dnames in packet (compressed).  <a href="#1782675e1931b3f5adacc98bdbfc7b98"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#db67ba7e18a5bcd7ed1b2fd02f40ab84">dname_query_hash</a> (uint8_t *dname, <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> h)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Hash dname, label by label, lowercasing, into hashvalue.  <a href="#db67ba7e18a5bcd7ed1b2fd02f40ab84"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#98a944495646ed1beb23400977248dca">dname_pkt_hash</a> (ldns_buffer *pkt, uint8_t *dname, <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> h)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Hash dname, label by label, lowercasing, into hashvalue.  <a href="#98a944495646ed1beb23400977248dca"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#0261dd52fa561bb9df9dde8a1bcf026e">dname_pkt_copy</a> (ldns_buffer *pkt, uint8_t *to, uint8_t *dname)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy over a valid dname and decompress it.  <a href="#0261dd52fa561bb9df9dde8a1bcf026e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#55a4648b62debad5402ae0b4aece436d">dname_buffer_write</a> (ldns_buffer *pkt, uint8_t *dname)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy over a valid dname to a packet.  <a href="#55a4648b62debad5402ae0b4aece436d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#2867a6c6baac2b46f226f33a1f013df4">dname_count_labels</a> (uint8_t *dname)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Count the number of labels in an uncompressed dname in memory.  <a href="#2867a6c6baac2b46f226f33a1f013df4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#e38d9d703b31a9b99c2b5cc8e27d29d3">dname_count_size_labels</a> (uint8_t *dname, size_t *size)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Count labels and dname length both, for uncompressed dname in memory.  <a href="#e38d9d703b31a9b99c2b5cc8e27d29d3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#41229c864bc20f2539283c9275b58a43">dname_lab_cmp</a> (uint8_t *d1, int labs1, uint8_t *d2, int labs2, int *mlabs)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compare dnames, sorted not canonical, but by label.  <a href="#41229c864bc20f2539283c9275b58a43"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#df7bfb27cab9360b52b6c66c45e59903">dname_strict_subdomain</a> (uint8_t *d1, int labs1, uint8_t *d2, int labs2)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">See if domain name d1 is a strict subdomain of d2.  <a href="#df7bfb27cab9360b52b6c66c45e59903"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#84a24ff1a6db10736fe38fec02cfcae6">dname_strict_subdomain_c</a> (uint8_t *d1, uint8_t *d2)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Like dname_strict_subdomain but counts labels.  <a href="#84a24ff1a6db10736fe38fec02cfcae6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#dfeb23e5c911323d5801a5ca6268ca6e">dname_subdomain_c</a> (uint8_t *d1, uint8_t *d2)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Counts labels.  <a href="#dfeb23e5c911323d5801a5ca6268ca6e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#10b8a48ddaa650daeb6dea09c6bb9d68">dname_print</a> (FILE *out, ldns_buffer *pkt, uint8_t *dname)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Debug helper.  <a href="#10b8a48ddaa650daeb6dea09c6bb9d68"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#4fdabe253d0be3516315d8c930cc47b5">dname_str</a> (uint8_t *dname, char *str)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Debug helper.  <a href="#4fdabe253d0be3516315d8c930cc47b5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#564ada6d11f2be1acbfff72a8ce69819">dname_is_root</a> (uint8_t *dname)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns true if the uncompressed wireformat dname is the root ".".  <a href="#564ada6d11f2be1acbfff72a8ce69819"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#dc67d7a526acbeeff1f91282b28cc144">dname_remove_label</a> (uint8_t **dname, size_t *len)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Snip off first label from a dname, returning the parent zone.  <a href="#dc67d7a526acbeeff1f91282b28cc144"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#bf6d14843b3090c7612455edc9cbec6a">dname_remove_labels</a> (uint8_t **dname, size_t *len, int n)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Snip off first N labels from a dname, returning the parent zone.  <a href="#bf6d14843b3090c7612455edc9cbec6a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#7b813b96a10faee8b717c64642268b7e">dname_signame_label_count</a> (uint8_t *dname)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Count labels for the RRSIG signature label field.  <a href="#7b813b96a10faee8b717c64642268b7e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#f6f89528c87603b81e5a2fbae175803e">dname_is_wild</a> (uint8_t *dname)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return true if the label is a wildcard, *.example.com.  <a href="#f6f89528c87603b81e5a2fbae175803e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#79dc51990821adecf8a5796f03f9644e">dname_canon_lab_cmp</a> (uint8_t *d1, int labs1, uint8_t *d2, int labs2, int *mlabs)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compare dnames, Canonical in rfc4034 sense, but by label.  <a href="#79dc51990821adecf8a5796f03f9644e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#61b6e87f13bd8ba8b0f977a6064bb7ab">dname_canonical_compare</a> (uint8_t *d1, uint8_t *d2)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Canonical dname compare.  <a href="#61b6e87f13bd8ba8b0f977a6064bb7ab"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8h.html#d4274a545c69732f6d0bd4c5bf9f7665">dname_get_shared_topdomain</a> (uint8_t *d1, uint8_t *d2)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the shared topdomain between two names.  <a href="#d4274a545c69732f6d0bd4c5bf9f7665"></a><br></td></tr>
</table>
<hr><h2>Detailed Description</h2>
This file contains functions to deal with domain names (dnames). 
<p>
Some of the functions deal with domain names as a wireformat buffer, with a length. <hr><h2>Function Documentation</h2>
<a class="anchor" name="4bdfbd50f1512972b4cb60abfe35afdb"></a><!-- doxytag: member="dname.h::query_dname_len" ref="4bdfbd50f1512972b4cb60abfe35afdb" args="(ldns_buffer *query)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t query_dname_len           </td>
          <td>(</td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>query</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Determine length of dname in buffer, no compression ptrs allowed,. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>query,:</em>&nbsp;</td><td>the ldns buffer, current position at start of dname. at end, position is at end of the dname. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 on parse failure, or length including ending 0 of dname. </dd></dl>

<p>Referenced by <a class="el" href="worker_8c_source.html#l00598">chaos_replystr()</a>, <a class="el" href="unitdname_8c_source.html#l00065">dname_test_qdl()</a>, and <a class="el" href="msgreply_8c_source.html#l00495">query_info_parse()</a>.</p>

</div>
</div><p>
<a class="anchor" name="241c0bf71262510a96f365d0022ce929"></a><!-- doxytag: member="dname.h::dname_valid" ref="241c0bf71262510a96f365d0022ce929" args="(uint8_t *dname, size_t len)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t dname_valid           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>len</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Determine if dname in memory is correct. 
<p>
no compression ptrs allowed. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>where dname starts in memory. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len,:</em>&nbsp;</td><td>dname is not allowed to exceed this length (i.e. of allocation). </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>length of dname if dname is ok, 0 on a parse error. </dd></dl>

<p>Referenced by <a class="el" href="val__sigcrypt_8c_source.html#l00862">canonicalize_rdata()</a>, <a class="el" href="iter__delegpt_8c_source.html#l00346">delegpt_rrset_add_ns()</a>, <a class="el" href="val__sigcrypt_8c_source.html#l01373">dnskey_verify_rrset_sig()</a>, <a class="el" href="packed__rrset_8c_source.html#l00193">get_cname_target()</a>, <a class="el" href="val__nsec_8c_source.html#l00118">nsec_get_next()</a>, <a class="el" href="val__nsec_8c_source.html#l00095">nsec_has_type()</a>, <a class="el" href="val__utils_8c_source.html#l00128">rrsig_get_signer()</a>, <a class="el" href="iter__scrub_8c_source.html#l00527">sanitize_nsec_is_overreach()</a>, and <a class="el" href="val__neg_8c_source.html#l00664">wipeout()</a>.</p>

</div>
</div><p>
<a class="anchor" name="530a985df48ca142e7189093ce5a5761"></a><!-- doxytag: member="dname.h::pkt_dname_tolower" ref="530a985df48ca142e7189093ce5a5761" args="(ldns_buffer *pkt, uint8_t *dname)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void pkt_dname_tolower           </td>
          <td>(</td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>pkt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
lowercase pkt dname (follows compression pointers) 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pkt,:</em>&nbsp;</td><td>the packet, used to follow compression pointers. Position is unchanged. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>start of dname in packet. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="msgparse_8h_source.html#l00186">LABEL_IS_PTR</a>, and <a class="el" href="msgparse_8h_source.html#l00189">PTR_OFFSET</a>.</p>

<p>Referenced by <a class="el" href="outside__network_8c_source.html#l01308">serviced_callbacks()</a>.</p>

</div>
</div><p>
<a class="anchor" name="39b434bef0aa08a3781c8992c16a8855"></a><!-- doxytag: member="dname.h::query_dname_compare" ref="39b434bef0aa08a3781c8992c16a8855" args="(uint8_t *d1, uint8_t *d2)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int query_dname_compare           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d2</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Compare query dnames (uncompressed storage). 
<p>
The Dnames passed do not have to be lowercased, comparison routine does this.<p>
This routine is special, in that the comparison that it does corresponds with the canonical comparison needed when comparing dnames inside rdata for RR types that need canonicalization. That means that the first byte that is smaller (possibly after lowercasing) makes an RR smaller, or the shortest name makes an RR smaller.<p>
This routine does not compute the canonical order needed for NSEC processing.<p>
Dnames have to be valid format. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>d1,:</em>&nbsp;</td><td>dname to compare </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>d2,:</em>&nbsp;</td><td>dname to compare </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: -1, 0, or +1 depending on comparison results. Sort order is first difference found. not the canonical ordering. </dd></dl>

</div>
</div><p>
<a class="anchor" name="fc026d967e97e8e4ec677482d1df3ab6"></a><!-- doxytag: member="dname.h::pkt_dname_len" ref="fc026d967e97e8e4ec677482d1df3ab6" args="(ldns_buffer *pkt)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t pkt_dname_len           </td>
          <td>(</td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>pkt</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Determine correct, compressed, dname present in packet. 
<p>
Checks for parse errors. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pkt,:</em>&nbsp;</td><td>packet to read from (from current start position). </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 on parse error. At exit the position is right after the (compressed) dname. Compression pointers are followed and checked for loops. The uncompressed wireformat length is returned. </dd></dl>

<p>References <a class="el" href="msgparse_8h_source.html#l00186">LABEL_IS_PTR</a>, <a class="el" href="dname_8h_source.html#l00050">MAX_COMPRESS_PTRS</a>, and <a class="el" href="msgparse_8h_source.html#l00189">PTR_OFFSET</a>.</p>

<p>Referenced by <a class="el" href="pktview_8c_source.html#l00071">analyze_dname()</a>, <a class="el" href="msgparse_8c_source.html#l00605">calc_size()</a>, <a class="el" href="unitdname_8c_source.html#l00160">dname_test_pkt_dname_len()</a>, <a class="el" href="iter__scrub_8c_source.html#l00110">get_additional_name()</a>, <a class="el" href="msgparse_8c_source.html#l00102">nsec_at_apex()</a>, <a class="el" href="msgparse_8c_source.html#l00953">parse_edns_from_pkt()</a>, <a class="el" href="msgparse_8c_source.html#l00550">parse_query_section()</a>, <a class="el" href="msgparse_8c_source.html#l00790">parse_section()</a>, and <a class="el" href="msgreply_8c_source.html#l00154">rdata_copy()</a>.</p>

</div>
</div><p>
<a class="anchor" name="1782675e1931b3f5adacc98bdbfc7b98"></a><!-- doxytag: member="dname.h::dname_pkt_compare" ref="1782675e1931b3f5adacc98bdbfc7b98" args="(ldns_buffer *pkt, uint8_t *d1, uint8_t *d2)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int dname_pkt_compare           </td>
          <td>(</td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>pkt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d2</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Compare dnames in packet (compressed). 
<p>
Dnames must be valid. routine performs lowercasing, so the packet casing is preserved. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pkt,:</em>&nbsp;</td><td>packet, used to resolve compression pointers. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>d1,:</em>&nbsp;</td><td>dname to compare </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>d2,:</em>&nbsp;</td><td>dname to compare </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: -1, 0, or +1 depending on comparison results. Sort order is first difference found. not the canonical ordering. </dd></dl>

<p>References <a class="el" href="msgparse_8h_source.html#l00186">LABEL_IS_PTR</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, and <a class="el" href="msgparse_8h_source.html#l00189">PTR_OFFSET</a>.</p>

<p>Referenced by <a class="el" href="msgparse_8c_source.html#l00198">rrset_parse_equals()</a>, <a class="el" href="iter__scrub_8c_source.html#l00668">scrub_message()</a>, <a class="el" href="iter__scrub_8c_source.html#l00318">scrub_normalize()</a>, <a class="el" href="iter__scrub_8c_source.html#l00565">scrub_sanitize()</a>, and <a class="el" href="msgparse_8c_source.html#l00049">smart_compare()</a>.</p>

</div>
</div><p>
<a class="anchor" name="db67ba7e18a5bcd7ed1b2fd02f40ab84"></a><!-- doxytag: member="dname.h::dname_query_hash" ref="db67ba7e18a5bcd7ed1b2fd02f40ab84" args="(uint8_t *dname, hashvalue_t h)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> dname_query_hash           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td>
          <td class="paramname"> <em>h</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Hash dname, label by label, lowercasing, into hashvalue. 
<p>
Dname in query format (not compressed). <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>dname to hash. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>h,:</em>&nbsp;</td><td>initial hash value. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: result hash value. </dd></dl>

<p>References <a class="el" href="log_8h_source.html#l00185">log_assert</a>.</p>

<p>Referenced by <a class="el" href="infra_8c_source.html#l00271">hash_lameness()</a>, <a class="el" href="val__kentry_8c_source.html#l00094">key_entry_hash()</a>, <a class="el" href="msgreply_8c_source.html#l00586">query_info_hash()</a>, and <a class="el" href="packed__rrset_8c_source.html#l00160">rrset_key_hash()</a>.</p>

</div>
</div><p>
<a class="anchor" name="98a944495646ed1beb23400977248dca"></a><!-- doxytag: member="dname.h::dname_pkt_hash" ref="98a944495646ed1beb23400977248dca" args="(ldns_buffer *pkt, uint8_t *dname, hashvalue_t h)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> dname_pkt_hash           </td>
          <td>(</td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>pkt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td>
          <td class="paramname"> <em>h</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Hash dname, label by label, lowercasing, into hashvalue. 
<p>
Dname in pkt format (compressed). <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pkt,:</em>&nbsp;</td><td>packet, for resolving compression pointers. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>dname to hash, pointer to the pkt buffer. Must be valid format. No loops, etc. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>h,:</em>&nbsp;</td><td>initial hash value. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: result hash value. Result is the same as dname_query_hash, even if compression is used. </dd></dl>

<p>References <a class="el" href="msgparse_8h_source.html#l00186">LABEL_IS_PTR</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, and <a class="el" href="msgparse_8h_source.html#l00189">PTR_OFFSET</a>.</p>

<p>Referenced by <a class="el" href="msgparse_8c_source.html#l00157">pkt_hash_rrset()</a>, and <a class="el" href="msgparse_8c_source.html#l00172">pkt_hash_rrset_first()</a>.</p>

</div>
</div><p>
<a class="anchor" name="0261dd52fa561bb9df9dde8a1bcf026e"></a><!-- doxytag: member="dname.h::dname_pkt_copy" ref="0261dd52fa561bb9df9dde8a1bcf026e" args="(ldns_buffer *pkt, uint8_t *to, uint8_t *dname)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void dname_pkt_copy           </td>
          <td>(</td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>pkt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>to</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Copy over a valid dname and decompress it. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pkt,:</em>&nbsp;</td><td>packet to resolve compression pointers. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>to,:</em>&nbsp;</td><td>buffer of size from pkt_len function to hold result. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>pointer into packet where dname starts. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="msgparse_8h_source.html#l00186">LABEL_IS_PTR</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="log_8c_source.html#l00241">log_err()</a>, and <a class="el" href="msgparse_8h_source.html#l00189">PTR_OFFSET</a>.</p>

<p>Referenced by <a class="el" href="msgreply_8c_source.html#l00333">parse_copy_decompress_rrset()</a>, <a class="el" href="msgreply_8c_source.html#l00061">parse_create_qinfo()</a>, <a class="el" href="iter__scrub_8c_source.html#l00287">pkt_strict_sub()</a>, <a class="el" href="iter__scrub_8c_source.html#l00299">pkt_sub()</a>, <a class="el" href="iter__priv_8c_source.html#l00190">priv_lookup_name()</a>, <a class="el" href="msgreply_8c_source.html#l00154">rdata_copy()</a>, <a class="el" href="iter__scrub_8c_source.html#l00062">remove_rrset()</a>, <a class="el" href="iter__scrub_8c_source.html#l00208">synth_cname()</a>, and <a class="el" href="iter__scrub_8c_source.html#l00230">synth_cname_rrset()</a>.</p>

</div>
</div><p>
<a class="anchor" name="55a4648b62debad5402ae0b4aece436d"></a><!-- doxytag: member="dname.h::dname_buffer_write" ref="55a4648b62debad5402ae0b4aece436d" args="(ldns_buffer *pkt, uint8_t *dname)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int dname_buffer_write           </td>
          <td>(</td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>pkt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Copy over a valid dname to a packet. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pkt,:</em>&nbsp;</td><td>packet to copy to. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>dname to copy. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 if not enough space in buffer. </dd></dl>

<p>Referenced by <a class="el" href="msgencode_8c_source.html#l00329">compress_any_dname()</a>.</p>

</div>
</div><p>
<a class="anchor" name="2867a6c6baac2b46f226f33a1f013df4"></a><!-- doxytag: member="dname.h::dname_count_labels" ref="2867a6c6baac2b46f226f33a1f013df4" args="(uint8_t *dname)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int dname_count_labels           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Count the number of labels in an uncompressed dname in memory. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>pointer to uncompressed dname. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: count of labels, including root label, "com." has 2 labels. </dd></dl>

<p>Referenced by <a class="el" href="val__anchor_8c_source.html#l01008">anchors_lookup()</a>, <a class="el" href="val__nsec_8c_source.html#l00480">dlv_topdomain()</a>, <a class="el" href="dname_8c_source.html#l00751">dname_canonical_compare()</a>, <a class="el" href="dname_8c_source.html#l00759">dname_get_shared_topdomain()</a>, <a class="el" href="dname_8c_source.html#l00580">dname_strict_subdomain_c()</a>, <a class="el" href="dname_8c_source.html#l00587">dname_subdomain_c()</a>, <a class="el" href="unitdname_8c_source.html#l00128">dname_test_count_labels()</a>, <a class="el" href="msgencode_8c_source.html#l00578">insert_query()</a>, <a class="el" href="iter__utils_8c_source.html#l00510">iter_msg_from_zone()</a>, <a class="el" href="localzone_8c_source.html#l01115">local_zones_answer()</a>, <a class="el" href="val__neg_8c_source.html#l00521">neg_create_zone()</a>, <a class="el" href="val__neg_8c_source.html#l00271">neg_find_zone()</a>, <a class="el" href="val__neg_8c_source.html#l00739">neg_insert_data()</a>, <a class="el" href="val__nsec3_8c_source.html#l00911">next_closer()</a>, <a class="el" href="val__nsec_8c_source.html#l00405">nsec_closest_encloser()</a>, <a class="el" href="msgencode_8c_source.html#l00442">packed_rrset_encode()</a>, <a class="el" href="validator_8c_source.html#l01319">processFindKey()</a>, <a class="el" href="val__utils_8c_source.html#l00180">val_find_best_signer()</a>, <a class="el" href="val__neg_8c_source.html#l00913">val_neg_dlvlookup()</a>, <a class="el" href="val__neg_8c_source.html#l01315">val_neg_getmsg()</a>, <a class="el" href="val__nsec_8c_source.html#l00440">val_nsec_proves_no_wc()</a>, <a class="el" href="val__utils_8c_source.html#l00516">val_rrset_wildcard()</a>, and <a class="el" href="val__neg_8c_source.html#l00664">wipeout()</a>.</p>

</div>
</div><p>
<a class="anchor" name="e38d9d703b31a9b99c2b5cc8e27d29d3"></a><!-- doxytag: member="dname.h::dname_count_size_labels" ref="e38d9d703b31a9b99c2b5cc8e27d29d3" args="(uint8_t *dname, size_t *size)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int dname_count_size_labels           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&nbsp;</td>
          <td class="paramname"> <em>size</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Count labels and dname length both, for uncompressed dname in memory. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>pointer to uncompressed dname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>size,:</em>&nbsp;</td><td>length of dname, including root label. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: count of labels, including root label, "com." has 2 labels. </dd></dl>

<p>Referenced by <a class="el" href="val__anchor_8c_source.html#l00214">anchor_store_new_key()</a>, <a class="el" href="msgencode_8c_source.html#l00360">compress_rdata()</a>, <a class="el" href="iter__delegpt_8c_source.html#l00096">delegpt_add_ns()</a>, <a class="el" href="iter__delegpt_8c_source.html#l00088">delegpt_set_name()</a>, <a class="el" href="unitdname_8c_source.html#l00140">dname_test_count_size_labels()</a>, <a class="el" href="iter__fwd_8c_source.html#l00374">forwards_delete_zone()</a>, <a class="el" href="iter__fwd_8c_source.html#l00315">forwards_lookup()</a>, <a class="el" href="iter__hints_8c_source.html#l00435">hints_lookup_stub()</a>, <a class="el" href="localzone_8c_source.html#l01229">local_zones_add_RR()</a>, <a class="el" href="localzone_8c_source.html#l00441">lz_enter_rr_into_zone()</a>, <a class="el" href="localzone_8c_source.html#l00497">lz_enter_rr_str()</a>, <a class="el" href="localzone_8c_source.html#l00740">lz_setup_implicit()</a>, <a class="el" href="iter__fwd_8c_source.html#l00267">make_stub_holes()</a>, <a class="el" href="val__nsec3_8c_source.html#l01199">nsec3_prove_wildcard()</a>, <a class="el" href="remote_8c_source.html#l00898">parse_arg_name()</a>, <a class="el" href="localzone_8c_source.html#l00124">parse_dname()</a>, <a class="el" href="iter__priv_8c_source.html#l00190">priv_lookup_name()</a>, <a class="el" href="iter__priv_8c_source.html#l00107">read_names()</a>, <a class="el" href="val__utils_8c_source.html#l00180">val_find_best_signer()</a>, <a class="el" href="val__neg_8c_source.html#l00664">wipeout()</a>, and <a class="el" href="streamtcp_8c_source.html#l00099">write_q()</a>.</p>

</div>
</div><p>
<a class="anchor" name="41229c864bc20f2539283c9275b58a43"></a><!-- doxytag: member="dname.h::dname_lab_cmp" ref="41229c864bc20f2539283c9275b58a43" args="(uint8_t *d1, int labs1, uint8_t *d2, int labs2, int *mlabs)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int dname_lab_cmp           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>labs1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d2</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>labs2</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>mlabs</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Compare dnames, sorted not canonical, but by label. 
<p>
Such that zone contents follows zone apex. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>d1,:</em>&nbsp;</td><td>first dname. pointer to uncompressed wireformat. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>labs1,:</em>&nbsp;</td><td>number of labels in first dname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>d2,:</em>&nbsp;</td><td>second dname. pointer to uncompressed wireformat. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>labs2,:</em>&nbsp;</td><td>number of labels in second dname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>mlabs,:</em>&nbsp;</td><td>number of labels that matched exactly (the shared topdomain). </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 for equal, -1 smaller, or +1 d1 larger than d2. </dd></dl>

<p>References <a class="el" href="log_8h_source.html#l00185">log_assert</a>.</p>

<p>Referenced by <a class="el" href="val__anchor_8c_source.html#l00055">anchor_cmp()</a>, <a class="el" href="val__anchor_8c_source.html#l01008">anchors_lookup()</a>, <a class="el" href="msgencode_8c_source.html#l00100">compress_tree_search()</a>, <a class="el" href="dname_8c_source.html#l00759">dname_get_shared_topdomain()</a>, <a class="el" href="dname_8c_source.html#l00566">dname_strict_subdomain()</a>, <a class="el" href="dname_8c_source.html#l00587">dname_subdomain_c()</a>, <a class="el" href="unitdname_8c_source.html#l00265">dname_test_dname_lab_cmp()</a>, <a class="el" href="iter__fwd_8c_source.html#l00315">forwards_lookup()</a>, <a class="el" href="iter__fwd_8c_source.html#l00052">fwd_cmp()</a>, <a class="el" href="iter__fwd_8c_source.html#l00124">fwd_init_parents()</a>, <a class="el" href="localzone_8c_source.html#l00706">init_parents()</a>, <a class="el" href="localzone_8c_source.html#l00097">local_zone_cmp()</a>, <a class="el" href="localzone_8c_source.html#l00881">local_zones_lookup()</a>, <a class="el" href="localzone_8c_source.html#l00740">lz_setup_implicit()</a>, <a class="el" href="dnstree_8c_source.html#l00047">name_tree_compare()</a>, <a class="el" href="dnstree_8c_source.html#l00133">name_tree_init_parents()</a>, <a class="el" href="dnstree_8c_source.html#l00171">name_tree_lookup()</a>, <a class="el" href="val__neg_8c_source.html#l00401">neg_closest_data_parent()</a>, <a class="el" href="val__neg_8c_source.html#l00361">neg_closest_zone_parent()</a>, and <a class="el" href="val__utils_8c_source.html#l00180">val_find_best_signer()</a>.</p>

</div>
</div><p>
<a class="anchor" name="df7bfb27cab9360b52b6c66c45e59903"></a><!-- doxytag: member="dname.h::dname_strict_subdomain" ref="df7bfb27cab9360b52b6c66c45e59903" args="(uint8_t *d1, int labs1, uint8_t *d2, int labs2)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int dname_strict_subdomain           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>labs1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d2</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>labs2</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
See if domain name d1 is a strict subdomain of d2. 
<p>
That is a subdomain, but not equal. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>d1,:</em>&nbsp;</td><td>domain name, uncompressed wireformat </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>labs1,:</em>&nbsp;</td><td>number of labels in d1, including root label. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>d2,:</em>&nbsp;</td><td>domain name, uncompressed wireformat </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>labs2,:</em>&nbsp;</td><td>number of labels in d2, including root label. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if d1 is a subdomain of d2, but not equal to d2. </dd></dl>

<p>References <a class="el" href="dname_8c_source.html#l00424">dname_lab_cmp()</a>.</p>

<p>Referenced by <a class="el" href="dname_8c_source.html#l00580">dname_strict_subdomain_c()</a>, <a class="el" href="unitdname_8c_source.html#l00402">dname_test_strict_subdomain()</a>, <a class="el" href="iter__hints_8c_source.html#l00435">hints_lookup_stub()</a>, <a class="el" href="localzone_8c_source.html#l01262">is_terminal()</a>, <a class="el" href="iter__utils_8c_source.html#l00510">iter_msg_from_zone()</a>, and <a class="el" href="localzone_8c_source.html#l01162">set_kiddo_parents()</a>.</p>

</div>
</div><p>
<a class="anchor" name="84a24ff1a6db10736fe38fec02cfcae6"></a><!-- doxytag: member="dname.h::dname_strict_subdomain_c" ref="84a24ff1a6db10736fe38fec02cfcae6" args="(uint8_t *d1, uint8_t *d2)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int dname_strict_subdomain_c           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d2</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Like dname_strict_subdomain but counts labels. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>d1,:</em>&nbsp;</td><td>domain name, uncompressed wireformat </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>d2,:</em>&nbsp;</td><td>domain name, uncompressed wireformat </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if d1 is a subdomain of d2, but not equal to d2. </dd></dl>

<p>References <a class="el" href="dname_8c_source.html#l00369">dname_count_labels()</a>, and <a class="el" href="dname_8c_source.html#l00566">dname_strict_subdomain()</a>.</p>

<p>Referenced by <a class="el" href="iterator_8c_source.html#l00394">handle_cname_response()</a>, <a class="el" href="val__nsec_8c_source.html#l00263">nsec_proves_nodata()</a>, <a class="el" href="iter__scrub_8c_source.html#l00287">pkt_strict_sub()</a>, <a class="el" href="validator_8c_source.html#l01158">processInit()</a>, <a class="el" href="iterator_8c_source.html#l01454">processQueryResponse()</a>, <a class="el" href="iter__resptype_8c_source.html#l00103">response_type_from_server()</a>, <a class="el" href="val__nsec_8c_source.html#l00499">val_nsec_check_dlv()</a>, and <a class="el" href="val__nsec_8c_source.html#l00355">val_nsec_proves_name_error()</a>.</p>

</div>
</div><p>
<a class="anchor" name="dfeb23e5c911323d5801a5ca6268ca6e"></a><!-- doxytag: member="dname.h::dname_subdomain_c" ref="dfeb23e5c911323d5801a5ca6268ca6e" args="(uint8_t *d1, uint8_t *d2)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int dname_subdomain_c           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d2</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Counts labels. 
<p>
Tests is d1 is a subdomain of d2. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>d1,:</em>&nbsp;</td><td>domain name, uncompressed wireformat </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>d2,:</em>&nbsp;</td><td>domain name, uncompressed wireformat </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if d1 is a subdomain of d2. </dd></dl>

<p>References <a class="el" href="dname_8c_source.html#l00369">dname_count_labels()</a>, and <a class="el" href="dname_8c_source.html#l00424">dname_lab_cmp()</a>.</p>

<p>Referenced by <a class="el" href="unitdname_8c_source.html#l00366">dname_test_subdomain()</a>, <a class="el" href="val__sigcrypt_8c_source.html#l01373">dnskey_verify_rrset_sig()</a>, <a class="el" href="val__nsec3_8c_source.html#l00402">filter_init()</a>, <a class="el" href="iterator_8c_source.html#l01125">generate_target_query()</a>, <a class="el" href="iter__utils_8c_source.html#l00439">iter_dp_is_useless()</a>, <a class="el" href="val__nsec3_8c_source.html#l00872">nsec3_find_closest_encloser()</a>, <a class="el" href="iter__scrub_8c_source.html#l00299">pkt_sub()</a>, <a class="el" href="validator_8c_source.html#l02453">process_dlv_response()</a>, <a class="el" href="validator_8c_source.html#l01837">processDLVLookup()</a>, <a class="el" href="validator_8c_source.html#l01319">processFindKey()</a>, <a class="el" href="iterator_8c_source.html#l01454">processQueryResponse()</a>, <a class="el" href="iter__resptype_8c_source.html#l00103">response_type_from_server()</a>, <a class="el" href="iter__scrub_8c_source.html#l00527">sanitize_nsec_is_overreach()</a>, <a class="el" href="unitneg_8c_source.html#l00362">sum_subtree_inuse()</a>, <a class="el" href="unitneg_8c_source.html#l00377">sum_zone_subtree_inuse()</a>, <a class="el" href="validator_8c_source.html#l01605">val_dlv_init()</a>, <a class="el" href="val__utils_8c_source.html#l00180">val_find_best_signer()</a>, <a class="el" href="val__utils_8c_source.html#l00736">val_mark_insecure()</a>, <a class="el" href="val__neg_8c_source.html#l01041">val_neg_addreferral()</a>, <a class="el" href="val__neg_8c_source.html#l00833">val_neg_addreply()</a>, <a class="el" href="val__nsec_8c_source.html#l00355">val_nsec_proves_name_error()</a>, <a class="el" href="val__neg_8c_source.html#l00664">wipeout()</a>, <a class="el" href="remote_8c_source.html#l01151">zone_del_kcache()</a>, <a class="el" href="remote_8c_source.html#l01137">zone_del_msg()</a>, and <a class="el" href="remote_8c_source.html#l01122">zone_del_rrset()</a>.</p>

</div>
</div><p>
<a class="anchor" name="10b8a48ddaa650daeb6dea09c6bb9d68"></a><!-- doxytag: member="dname.h::dname_print" ref="10b8a48ddaa650daeb6dea09c6bb9d68" args="(FILE *out, ldns_buffer *pkt, uint8_t *dname)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void dname_print           </td>
          <td>(</td>
          <td class="paramtype">FILE *&nbsp;</td>
          <td class="paramname"> <em>out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>pkt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Debug helper. 
<p>
Print wireformat dname to output. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>out,:</em>&nbsp;</td><td>like stdout or a file. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>pkt,:</em>&nbsp;</td><td>if not NULL, the packet for resolving compression ptrs. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>pointer to (start of) dname. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="msgparse_8h_source.html#l00186">LABEL_IS_PTR</a>, and <a class="el" href="msgparse_8h_source.html#l00189">PTR_OFFSET</a>.</p>

<p>Referenced by <a class="el" href="pktview_8c_source.html#l00071">analyze_dname()</a>, <a class="el" href="msgparse_8c_source.html#l00790">parse_section()</a>, and <a class="el" href="unitneg_8c_source.html#l00053">print_neg_cache()</a>.</p>

</div>
</div><p>
<a class="anchor" name="4fdabe253d0be3516315d8c930cc47b5"></a><!-- doxytag: member="dname.h::dname_str" ref="4fdabe253d0be3516315d8c930cc47b5" args="(uint8_t *dname, char *str)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void dname_str           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&nbsp;</td>
          <td class="paramname"> <em>str</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Debug helper. 
<p>
Print dname to given string buffer (string buffer must be at least 255 chars + 1 for the 0, in printable form. This may lose information (? for nonprintable characters, or &amp; if the name is too long, # for a bad label length). <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>uncompressed wireformat. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>str,:</em>&nbsp;</td><td>buffer of 255+1 length. </td></tr>
  </table>
</dl>

<p>Referenced by <a class="el" href="val__anchor_8c_source.html#l00886">anchors_assemble_rrsets()</a>, <a class="el" href="iter__delegpt_8c_source.html#l00226">delegpt_log()</a>, <a class="el" href="remote_8c_source.html#l01429">do_dump_requestlist()</a>, <a class="el" href="libworker_8c_source.html#l00364">fill_canon()</a>, <a class="el" href="remote_8c_source.html#l01376">get_mesh_status()</a>, <a class="el" href="net__help_8c_source.html#l00296">log_name_addr()</a>, <a class="el" href="net__help_8c_source.html#l00265">log_nametypeclass()</a>, <a class="el" href="cachedump_8c_source.html#l00782">print_deleg_lookup()</a>, <a class="el" href="unitneg_8c_source.html#l00053">print_neg_cache()</a>, <a class="el" href="remote_8c_source.html#l01230">print_root_fwds()</a>, and <a class="el" href="outside__network_8c_source.html#l01154">serviced_perturb_qname()</a>.</p>

</div>
</div><p>
<a class="anchor" name="564ada6d11f2be1acbfff72a8ce69819"></a><!-- doxytag: member="dname.h::dname_is_root" ref="564ada6d11f2be1acbfff72a8ce69819" args="(uint8_t *dname)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int dname_is_root           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Returns true if the uncompressed wireformat dname is the root ".". 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>the dname to check </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if ".", false if not. </dd></dl>

<p>References <a class="el" href="msgparse_8h_source.html#l00186">LABEL_IS_PTR</a>, and <a class="el" href="log_8h_source.html#l00185">log_assert</a>.</p>

<p>Referenced by <a class="el" href="val__neg_8c_source.html#l00315">calc_data_need()</a>, <a class="el" href="val__neg_8c_source.html#l00341">calc_zone_need()</a>, <a class="el" href="unitneg_8c_source.html#l00392">check_data()</a>, <a class="el" href="unitneg_8c_source.html#l00425">check_zone_invariants()</a>, <a class="el" href="localzone_8c_source.html#l01277">del_empty_term()</a>, <a class="el" href="unitdname_8c_source.html#l00438">dname_test_isroot()</a>, <a class="el" href="iterator_8c_source.html#l00788">forward_request()</a>, <a class="el" href="val__kcache_8c_source.html#l00121">key_cache_obtain()</a>, <a class="el" href="iterator_8c_source.html#l00600">prime_stub()</a>, <a class="el" href="cachedump_8c_source.html#l00782">print_deleg_lookup()</a>, and <a class="el" href="iterator_8c_source.html#l00827">processInitRequest()</a>.</p>

</div>
</div><p>
<a class="anchor" name="dc67d7a526acbeeff1f91282b28cc144"></a><!-- doxytag: member="dname.h::dname_remove_label" ref="dc67d7a526acbeeff1f91282b28cc144" args="(uint8_t **dname, size_t *len)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void dname_remove_label           </td>
          <td>(</td>
          <td class="paramtype">uint8_t **&nbsp;</td>
          <td class="paramname"> <em>dname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&nbsp;</td>
          <td class="paramname"> <em>len</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Snip off first label from a dname, returning the parent zone. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>from what to strip off. uncompressed wireformat. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len,:</em>&nbsp;</td><td>length, adjusted to become less. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>stripped off, or "." if input was ".". </dd></dl>

<p>References <a class="el" href="msgparse_8h_source.html#l00186">LABEL_IS_PTR</a>, and <a class="el" href="log_8h_source.html#l00185">log_assert</a>.</p>

<p>Referenced by <a class="el" href="val__neg_8c_source.html#l00315">calc_data_need()</a>, <a class="el" href="val__neg_8c_source.html#l00341">calc_zone_need()</a>, <a class="el" href="localzone_8c_source.html#l01277">del_empty_term()</a>, <a class="el" href="dname_8c_source.html#l00629">dname_remove_labels()</a>, <a class="el" href="unitdname_8c_source.html#l00450">dname_test_removelabel()</a>, <a class="el" href="val__nsec3_8c_source.html#l00402">filter_init()</a>, <a class="el" href="val__nsec3_8c_source.html#l00323">filter_next()</a>, <a class="el" href="iterator_8c_source.html#l00788">forward_request()</a>, <a class="el" href="val__sigcrypt_8c_source.html#l00825">insert_can_owner()</a>, <a class="el" href="val__kcache_8c_source.html#l00121">key_cache_obtain()</a>, <a class="el" href="localzone_8c_source.html#l00405">lz_find_create_node()</a>, <a class="el" href="iter__fwd_8c_source.html#l00248">need_hole_insert()</a>, <a class="el" href="val__neg_8c_source.html#l00620">neg_data_chain()</a>, <a class="el" href="val__neg_8c_source.html#l01149">neg_find_nsec3_ce()</a>, <a class="el" href="val__neg_8c_source.html#l00473">neg_zone_chain()</a>, <a class="el" href="val__nsec3_8c_source.html#l00872">nsec3_find_closest_encloser()</a>, <a class="el" href="val__nsec3_8c_source.html#l00264">nsec3_get_nextowner_b32()</a>, <a class="el" href="val__nsec_8c_source.html#l00263">nsec_proves_nodata()</a>, <a class="el" href="iterator_8c_source.html#l00600">prime_stub()</a>, <a class="el" href="cachedump_8c_source.html#l00782">print_deleg_lookup()</a>, <a class="el" href="validator_8c_source.html#l01158">processInit()</a>, <a class="el" href="iterator_8c_source.html#l00827">processInitRequest()</a>, <a class="el" href="val__neg_8c_source.html#l01315">val_neg_getmsg()</a>, and <a class="el" href="val__nsec_8c_source.html#l00499">val_nsec_check_dlv()</a>.</p>

</div>
</div><p>
<a class="anchor" name="bf6d14843b3090c7612455edc9cbec6a"></a><!-- doxytag: member="dname.h::dname_remove_labels" ref="bf6d14843b3090c7612455edc9cbec6a" args="(uint8_t **dname, size_t *len, int n)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void dname_remove_labels           </td>
          <td>(</td>
          <td class="paramtype">uint8_t **&nbsp;</td>
          <td class="paramname"> <em>dname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&nbsp;</td>
          <td class="paramname"> <em>len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>n</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Snip off first N labels from a dname, returning the parent zone. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>from what to strip off. uncompressed wireformat. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len,:</em>&nbsp;</td><td>length, adjusted to become less. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>n,:</em>&nbsp;</td><td>number of labels to strip off (from the left). if 0, nothing happens. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>stripped off, or "." if input was ".". </dd></dl>

<p>References <a class="el" href="dname_8c_source.html#l00615">dname_remove_label()</a>.</p>

<p>Referenced by <a class="el" href="val__nsec_8c_source.html#l00480">dlv_topdomain()</a>, <a class="el" href="dname_8c_source.html#l00759">dname_get_shared_topdomain()</a>, <a class="el" href="localzone_8c_source.html#l00740">lz_setup_implicit()</a>, <a class="el" href="val__nsec3_8c_source.html#l00911">next_closer()</a>, <a class="el" href="validator_8c_source.html#l01319">processFindKey()</a>, <a class="el" href="val__nsec_8c_source.html#l00440">val_nsec_proves_no_wc()</a>, and <a class="el" href="val__utils_8c_source.html#l00516">val_rrset_wildcard()</a>.</p>

</div>
</div><p>
<a class="anchor" name="7b813b96a10faee8b717c64642268b7e"></a><!-- doxytag: member="dname.h::dname_signame_label_count" ref="7b813b96a10faee8b717c64642268b7e" args="(uint8_t *dname)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int dname_signame_label_count           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Count labels for the RRSIG signature label field. 
<p>
Like a normal labelcount, but "*" wildcard and "." root are not counted. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>valid uncompressed wireformat. </td></tr>
  </table>
</dl>

<p>Referenced by <a class="el" href="unitdname_8c_source.html#l00468">dname_test_sigcount()</a>, <a class="el" href="val__sigcrypt_8c_source.html#l01373">dnskey_verify_rrset_sig()</a>, and <a class="el" href="val__sigcrypt_8c_source.html#l00825">insert_can_owner()</a>.</p>

</div>
</div><p>
<a class="anchor" name="f6f89528c87603b81e5a2fbae175803e"></a><!-- doxytag: member="dname.h::dname_is_wild" ref="f6f89528c87603b81e5a2fbae175803e" args="(uint8_t *dname)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int dname_is_wild           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Return true if the label is a wildcard, *.example.com. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>valid uncompressed wireformat. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if wildcard, or false. </dd></dl>

<p>Referenced by <a class="el" href="unitdname_8c_source.html#l00487">dname_test_iswild()</a>, <a class="el" href="val__nsec_8c_source.html#l00263">nsec_proves_nodata()</a>, and <a class="el" href="val__nsec_8c_source.html#l00174">val_nsec_prove_nodata_dsreply()</a>.</p>

</div>
</div><p>
<a class="anchor" name="79dc51990821adecf8a5796f03f9644e"></a><!-- doxytag: member="dname.h::dname_canon_lab_cmp" ref="79dc51990821adecf8a5796f03f9644e" args="(uint8_t *d1, int labs1, uint8_t *d2, int labs2, int *mlabs)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int dname_canon_lab_cmp           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>labs1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d2</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>labs2</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>mlabs</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Compare dnames, Canonical in rfc4034 sense, but by label. 
<p>
Such that zone contents follows zone apex.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>d1,:</em>&nbsp;</td><td>first dname. pointer to uncompressed wireformat. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>labs1,:</em>&nbsp;</td><td>number of labels in first dname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>d2,:</em>&nbsp;</td><td>second dname. pointer to uncompressed wireformat. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>labs2,:</em>&nbsp;</td><td>number of labels in second dname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>mlabs,:</em>&nbsp;</td><td>number of labels that matched exactly (the shared topdomain). </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 for equal, -1 smaller, or +1 d1 larger than d2. </dd></dl>

<p>References <a class="el" href="log_8h_source.html#l00185">log_assert</a>, and <a class="el" href="dname_8c_source.html#l00673">memcanoncmp()</a>.</p>

<p>Referenced by <a class="el" href="dname_8c_source.html#l00751">dname_canonical_compare()</a>, <a class="el" href="localzone_8c_source.html#l00113">local_data_cmp()</a>, <a class="el" href="val__neg_8c_source.html#l00057">val_neg_data_compare()</a>, <a class="el" href="val__neg_8c_source.html#l00065">val_neg_zone_compare()</a>, and <a class="el" href="val__neg_8c_source.html#l00664">wipeout()</a>.</p>

</div>
</div><p>
<a class="anchor" name="61b6e87f13bd8ba8b0f977a6064bb7ab"></a><!-- doxytag: member="dname.h::dname_canonical_compare" ref="61b6e87f13bd8ba8b0f977a6064bb7ab" args="(uint8_t *d1, uint8_t *d2)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int dname_canonical_compare           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d2</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Canonical dname compare. 
<p>
Takes care of counting labels. Per rfc 4034 canonical order.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>d1,:</em>&nbsp;</td><td>first dname. pointer to uncompressed wireformat. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>d2,:</em>&nbsp;</td><td>second dname. pointer to uncompressed wireformat. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 for equal, -1 smaller, or +1 d1 larger than d2. </dd></dl>

<p>References <a class="el" href="dname_8c_source.html#l00689">dname_canon_lab_cmp()</a>, and <a class="el" href="dname_8c_source.html#l00369">dname_count_labels()</a>.</p>

<p>Referenced by <a class="el" href="unitdname_8c_source.html#l00497">dname_test_canoncmp()</a>, <a class="el" href="val__nsec_8c_source.html#l00263">nsec_proves_nodata()</a>, <a class="el" href="val__nsec_8c_source.html#l00499">val_nsec_check_dlv()</a>, and <a class="el" href="val__nsec_8c_source.html#l00355">val_nsec_proves_name_error()</a>.</p>

</div>
</div><p>
<a class="anchor" name="d4274a545c69732f6d0bd4c5bf9f7665"></a><!-- doxytag: member="dname.h::dname_get_shared_topdomain" ref="d4274a545c69732f6d0bd4c5bf9f7665" args="(uint8_t *d1, uint8_t *d2)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint8_t* dname_get_shared_topdomain           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>d2</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Get the shared topdomain between two names. 
<p>
Root "." or longer. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>d1,:</em>&nbsp;</td><td>first dname. pointer to uncompressed wireformat. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>d2,:</em>&nbsp;</td><td>second dname. pointer to uncompressed wireformat. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>pointer to shared topdomain. Ptr to a part of d1. </dd></dl>

<p>References <a class="el" href="dname_8c_source.html#l00369">dname_count_labels()</a>, <a class="el" href="dname_8c_source.html#l00424">dname_lab_cmp()</a>, and <a class="el" href="dname_8c_source.html#l00629">dname_remove_labels()</a>.</p>

<p>Referenced by <a class="el" href="val__nsec_8c_source.html#l00480">dlv_topdomain()</a>, <a class="el" href="unitdname_8c_source.html#l00716">dname_test_topdomain()</a>, and <a class="el" href="val__nsec_8c_source.html#l00405">nsec_closest_encloser()</a>.</p>

</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Tue Oct 13 06:46:32 2009 for unbound by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
</body>
</html>