Sophie

Sophie

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

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.c 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.c File Reference</h1>This file contains domain name handling functions.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;config.h&quot;</code><br>
<code>#include &quot;<a class="el" href="dname_8h.html">util/data/dname.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="msgparse_8h.html">util/data/msgparse.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="log_8h.html">util/log.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="lookup3_8h.html">util/storage/lookup3.h</a>&quot;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></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_8c.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_8c.html#a42ada23be7eaaa801344348c449a1a3">dname_valid</a> (uint8_t *dname, size_t maxlen)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determine if dname in memory is correct.  <a href="#a42ada23be7eaaa801344348c449a1a3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="900dc0a1af2b2038bd642ee868975202"></a><!-- doxytag: member="dname.c::query_dname_compare" ref="900dc0a1af2b2038bd642ee868975202" args="(register uint8_t *d1, register uint8_t *d2)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8c.html#900dc0a1af2b2038bd642ee868975202">query_dname_compare</a> (register uint8_t *d1, register uint8_t *d2)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compare uncompressed, noncanonical, registers are hints for speed <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5902f151de79714d05aaa20288e69b8e"></a><!-- doxytag: member="dname.c::query_dname_tolower" ref="5902f151de79714d05aaa20288e69b8e" args="(uint8_t *dname)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8c.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_8c.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">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8c.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_8c.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_8c.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_8c.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_8c.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">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8c.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">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8c.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_8c.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">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8c.html#87302fca87a136e9e47ffd715db59136">memlowercmp</a> (uint8_t *p1, uint8_t *p2, uint8_t len)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compare labels in memory, lowercase while comparing.  <a href="#87302fca87a136e9e47ffd715db59136"></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_8c.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_8c.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">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8c.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_8c.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_8c.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_8c.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">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8c.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_8c.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_8c.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_8c.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_8c.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">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dname_8c.html#23cbb7733196e40425ef46f98ea5fb5b">memcanoncmp</a> (uint8_t *p1, uint8_t len1, uint8_t *p2, uint8_t len2)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compare labels in memory, lowercase while comparing.  <a href="#23cbb7733196e40425ef46f98ea5fb5b"></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_8c.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_8c.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_8c.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 domain name handling functions. 
<p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="4bdfbd50f1512972b4cb60abfe35afdb"></a><!-- doxytag: member="dname.c::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="a42ada23be7eaaa801344348c449a1a3"></a><!-- doxytag: member="dname.c::dname_valid" ref="a42ada23be7eaaa801344348c449a1a3" args="(uint8_t *dname, size_t maxlen)" -->
<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.c::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="fc026d967e97e8e4ec677482d1df3ab6"></a><!-- doxytag: member="dname.c::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.c::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.c::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.c::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.c::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="10b8a48ddaa650daeb6dea09c6bb9d68"></a><!-- doxytag: member="dname.c::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="2867a6c6baac2b46f226f33a1f013df4"></a><!-- doxytag: member="dname.c::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.c::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="87302fca87a136e9e47ffd715db59136"></a><!-- doxytag: member="dname.c::memlowercmp" ref="87302fca87a136e9e47ffd715db59136" args="(uint8_t *p1, uint8_t *p2, uint8_t len)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int memlowercmp           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>p1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>p2</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t&nbsp;</td>
          <td class="paramname"> <em>len</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Compare labels in memory, lowercase while comparing. 
<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>p1,:</em>&nbsp;</td><td>label 1 </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p2,:</em>&nbsp;</td><td>label 2 </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len,:</em>&nbsp;</td><td>number of bytes to compare. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0, -1, +1 comparison result. </dd></dl>

<p>Referenced by <a class="el" href="dname_8c_source.html#l00673">memcanoncmp()</a>.</p>

</div>
</div><p>
<a class="anchor" name="41229c864bc20f2539283c9275b58a43"></a><!-- doxytag: member="dname.c::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="55a4648b62debad5402ae0b4aece436d"></a><!-- doxytag: member="dname.c::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="4fdabe253d0be3516315d8c930cc47b5"></a><!-- doxytag: member="dname.c::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="df7bfb27cab9360b52b6c66c45e59903"></a><!-- doxytag: member="dname.c::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.c::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.c::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="564ada6d11f2be1acbfff72a8ce69819"></a><!-- doxytag: member="dname.c::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.c::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.c::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.c::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.c::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="23cbb7733196e40425ef46f98ea5fb5b"></a><!-- doxytag: member="dname.c::memcanoncmp" ref="23cbb7733196e40425ef46f98ea5fb5b" args="(uint8_t *p1, uint8_t len1, uint8_t *p2, uint8_t len2)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int memcanoncmp           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>p1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t&nbsp;</td>
          <td class="paramname"> <em>len1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>p2</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t&nbsp;</td>
          <td class="paramname"> <em>len2</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Compare labels in memory, lowercase while comparing. 
<p>
Returns canonical order for labels. If all is equal, the shortest is first.<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>p1,:</em>&nbsp;</td><td>label 1 </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len1,:</em>&nbsp;</td><td>length of label 1. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p2,:</em>&nbsp;</td><td>label 2 </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len2,:</em>&nbsp;</td><td>length of label 2. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0, -1, +1 comparison result. </dd></dl>

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

<p>Referenced by <a class="el" href="dname_8c_source.html#l00689">dname_canon_lab_cmp()</a>.</p>

</div>
</div><p>
<a class="anchor" name="79dc51990821adecf8a5796f03f9644e"></a><!-- doxytag: member="dname.c::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.c::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.c::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>