]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Remove offsets from the dns_name and dns_fixedname structures
authorOndřej Surý <ondrej@isc.org>
Fri, 21 Feb 2025 11:09:28 +0000 (12:09 +0100)
committerOndřej Surý <ondrej@isc.org>
Tue, 25 Feb 2025 11:17:34 +0000 (12:17 +0100)
The offsets were meant to speed-up the repeated dns_name operations, but
it was experimentally proven that there's actually no real-world
benefit.  Remove the offsets and labels fields from the dns_name and the
static offsets fields to save 128 bytes from the fixedname in favor of
calculating labels and offsets only when needed.

67 files changed:
bin/named/builtin.c
bin/nsupdate/nsupdate.c
bin/tests/system/dyndb/driver/db.c
doc/dev/dev.md
fuzz/dns_name_fromwire.c
fuzz/old.c
lib/dns/catz.c
lib/dns/compress.c
lib/dns/fixedname.c
lib/dns/forward.c
lib/dns/include/dns/fixedname.h
lib/dns/include/dns/message.h
lib/dns/include/dns/name.h
lib/dns/keytable.c
lib/dns/master.c
lib/dns/message.c
lib/dns/name.c
lib/dns/nametree.c
lib/dns/nta.c
lib/dns/qp.c
lib/dns/qpcache.c
lib/dns/qpzone.c
lib/dns/rdata.c
lib/dns/rdata/any_255/tsig_250.c
lib/dns/rdata/ch_3/a_1.c
lib/dns/rdata/generic/afsdb_18.c
lib/dns/rdata/generic/cname_5.c
lib/dns/rdata/generic/dname_39.c
lib/dns/rdata/generic/lp_107.c
lib/dns/rdata/generic/mb_7.c
lib/dns/rdata/generic/md_3.c
lib/dns/rdata/generic/mf_4.c
lib/dns/rdata/generic/mg_8.c
lib/dns/rdata/generic/minfo_14.c
lib/dns/rdata/generic/mr_9.c
lib/dns/rdata/generic/mx_15.c
lib/dns/rdata/generic/naptr_35.c
lib/dns/rdata/generic/ns_2.c
lib/dns/rdata/generic/nsec_47.c
lib/dns/rdata/generic/nxt_30.c
lib/dns/rdata/generic/ptr_12.c
lib/dns/rdata/generic/rp_17.c
lib/dns/rdata/generic/rrsig_46.c
lib/dns/rdata/generic/rt_21.c
lib/dns/rdata/generic/sig_24.c
lib/dns/rdata/generic/soa_6.c
lib/dns/rdata/generic/talink_58.c
lib/dns/rdata/generic/tkey_249.c
lib/dns/rdata/in_1/a6_38.c
lib/dns/rdata/in_1/kx_36.c
lib/dns/rdata/in_1/nsap-ptr_23.c
lib/dns/rdata/in_1/px_26.c
lib/dns/rdata/in_1/srv_33.c
lib/dns/rdata/in_1/svcb_64.c
lib/dns/resolver.c
lib/dns/rootns.c
lib/dns/rpz.c
lib/dns/rrl.c
lib/dns/sdlz.c
lib/dns/tsig.c
lib/dns/zone.c
lib/ns/query.c
tests/bench/load-names.c
tests/bench/qp-dump.c
tests/bench/qplookups.c
tests/dns/diff_test.c
tests/dns/name_test.c

index 797c9505d214060536e02a22a95d2b5aae0bd5a8..1964ae5ccdb0020cc2d06e1ba68ed8ebcd781fc2 100644 (file)
@@ -459,7 +459,7 @@ dns64_cname(const dns_name_t *zone, const dns_name_t *name, bdbnode_t *node) {
 
 static isc_result_t
 builtin_lookup(bdb_t *bdb, const dns_name_t *name, bdbnode_t *node) {
-       if (name->labels == 0 && name->length == 0) {
+       if (name->length == 0) {
                return bdb->lookup(node);
        } else if ((node->bdb->implementation->flags & BDB_DNS64) != 0) {
                return dns64_cname(&bdb->common.origin, name, node);
@@ -1198,7 +1198,7 @@ create(isc_mem_t *mctx, const dns_name_t *origin, dns_dbtype_t type,
        isc_refcount_init(&bdb->common.references, 1);
        isc_mem_attach(mctx, &bdb->common.mctx);
        dns_name_init(&bdb->common.origin, NULL);
-       dns_name_dupwithoffsets(origin, mctx, &bdb->common.origin);
+       dns_name_dup(origin, mctx, &bdb->common.origin);
 
        INSIST(argc >= 1);
        if (strcmp(argv[0], "authors") == 0) {
index 93e05a30fa03aafedd578c146b167d99ef35855d..56949181a9c8b1bcd6dacdb4a851ad17515d6fe4 100644 (file)
@@ -2614,8 +2614,8 @@ done:
        if (usegsstsig) {
                dns_name_free(&tmpzonename, gmctx);
                dns_name_free(&restart_primary, gmctx);
-               dns_name_init(&tmpzonename, 0);
-               dns_name_init(&restart_primary, 0);
+               dns_name_init(&tmpzonename, NULL);
+               dns_name_init(&restart_primary, NULL);
        }
        done_update();
 }
index 99f5c7531d3930246e1237139cae4130d2b71861..06c22a8c35e1dc52aad0ee332d3b24b74df4443a 100644 (file)
@@ -610,7 +610,7 @@ create_db(isc_mem_t *mctx, const dns_name_t *origin, dns_dbtype_t type,
        isc_mem_attach(mctx, &sampledb->common.mctx);
        dns_name_init(&sampledb->common.origin, NULL);
 
-       dns_name_dupwithoffsets(origin, mctx, &sampledb->common.origin);
+       dns_name_dup(origin, mctx, &sampledb->common.origin);
 
        isc_refcount_init(&sampledb->common.references, 1);
 
index 330ee672b649d6e38d8cb9234389f5bbc885de54..51fec899443bbda5be1581c60e523312545ec027 100644 (file)
@@ -650,10 +650,8 @@ There are three methods for copying name objects:
   a buffer.
 
 - `dns_name_dup()` copies a name into a new name object, dynamically
-  allocating buffer space as needed. `dns_name_dupwithoffsets()` does
-  the same, but also dynamically allocates space for the copied offset
-  table.  Targets created by these functions must be freed by calling
-  `dns_name_free()`.
+  allocating buffer space as needed.  Target created by this function
+  must be freed by calling `dns_name_free()`.
 
 ##### Wire format
 
index 4bbe4c28b20ee8438d74ecf256984700983b55ec..0ec8f8710d4e7bb7bb3d56769c6dd5c91a40b952 100644 (file)
@@ -41,8 +41,6 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
        dns_fixedname_t old_fixed;
        dns_name_t *new_name = dns_fixedname_initname(&new_fixed);
        dns_name_t *old_name = dns_fixedname_initname(&old_fixed);
-       uint8_t *new_offsets;
-       uint8_t *old_offsets;
        dns_decompress_t dctx = DNS_DECOMPRESS_PERMITTED;
        isc_buffer_t new_buf;
        isc_buffer_t old_buf;
@@ -81,12 +79,6 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
 
        REQUIRE(new_result == old_result);
        REQUIRE(dns_name_equal(new_name, old_name));
-       REQUIRE(new_name->labels == old_name->labels);
-
-       new_offsets = new_name->offsets;
-       old_offsets = old_name->offsets;
-       REQUIRE(new_offsets != NULL && old_offsets != NULL);
-       REQUIRE(memcmp(new_offsets, old_offsets, old_name->labels) == 0);
 
        REQUIRE(new_fixed.buffer.current == old_fixed.buffer.current);
        REQUIRE(new_fixed.buffer.active == old_fixed.buffer.active);
index 9ee32a52ac5cf1b33d3ac5b6a653b4e822ff9051..6f0400ff9b77806b6148b3d0df076eac81a23bb7 100644 (file)
@@ -34,17 +34,12 @@ typedef enum { fw_start = 0, fw_ordinary, fw_newcurrent } fw_state;
 
 #define VALID_NAME(n) ISC_MAGIC_VALID(n, DNS_NAME_MAGIC)
 
-#define INIT_OFFSETS(name, var, default_offsets) \
-       if ((name)->offsets != NULL)             \
-               var = (name)->offsets;           \
-       else                                     \
-               var = (default_offsets);
+#define INIT_OFFSETS(name, var, default_offsets) (var) = (default_offsets)
 
 #define MAKE_EMPTY(name)                           \
        do {                                       \
                name->ndata = NULL;                \
                name->length = 0;                  \
-               name->labels = 0;                  \
                name->attributes.absolute = false; \
        } while (0)
 
@@ -197,7 +192,6 @@ old_name_fromwire(dns_name_t *name, isc_buffer_t *source, dns_decompress_t dctx,
        }
 
        name->ndata = (unsigned char *)target->base + target->used;
-       name->labels = labels;
        name->length = nused;
        name->attributes.absolute = true;
 
index 39a81e1ef59f6ddf107855982fbdeee9f53c1542..0f4e529f233f332eb9173dbf99d3b86e4efccfb5 100644 (file)
@@ -17,6 +17,7 @@
 #include <stdbool.h>
 #include <stdint.h>
 #include <stdlib.h>
+#include <unistd.h>
 
 #include <isc/async.h>
 #include <isc/hex.h>
@@ -34,6 +35,8 @@
 #include <dns/view.h>
 #include <dns/zone.h>
 
+#include "dns/name.h"
+
 #define DNS_CATZ_ZONE_MAGIC  ISC_MAGIC('c', 'a', 't', 'z')
 #define DNS_CATZ_ZONES_MAGIC ISC_MAGIC('c', 'a', 't', 's')
 #define DNS_CATZ_ENTRY_MAGIC ISC_MAGIC('c', 'a', 't', 'e')
@@ -557,7 +560,7 @@ dns__catz_zones_merge(dns_catz_zone_t *catz, dns_catz_zone_t *newcatz) {
                 * record, removed.
                 * xxxwpk: make it a separate verification phase?
                 */
-               if (dns_name_countlabels(&nentry->name) == 0) {
+               if (nentry->name.length == 0) {
                        dns_catz_entry_detach(newcatz, &nentry);
                        delcur = true;
                        continue;
@@ -1154,13 +1157,15 @@ catz_process_zones(dns_catz_zone_t *catz, dns_rdataset_t *value,
        REQUIRE(DNS_RDATASET_VALID(value));
        REQUIRE(ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
 
-       if (name->labels == 0) {
+       uint8_t labels = dns_name_countlabels(name);
+
+       if (labels == 0) {
                return ISC_R_FAILURE;
        }
 
-       dns_name_getlabel(name, name->labels - 1, &mhash);
+       dns_name_getlabel(name, labels - 1, &mhash);
 
-       if (name->labels == 1) {
+       if (labels == 1) {
                return catz_process_zones_entry(catz, value, &mhash);
        } else {
                dns_name_init(&opt, NULL);
@@ -1405,7 +1410,7 @@ catz_process_primaries(dns_catz_zone_t *catz, dns_ipkeylist_t *ipkl,
         * - label and IN A/IN AAAA
         * - label and IN TXT - TSIG key name
         */
-       if (name->labels > 0) {
+       if (name->length != 0) {
                isc_sockaddr_t sockaddr;
                size_t i;
 
@@ -1455,7 +1460,7 @@ catz_process_primaries(dns_catz_zone_t *catz, dns_ipkeylist_t *ipkl,
 
                        /* rdatastr.length < DNS_NAME_MAXTEXT */
                        keyname = isc_mem_get(mctx, sizeof(*keyname));
-                       dns_name_init(keyname, 0);
+                       dns_name_init(keyname, NULL);
                        memmove(keycbuf, rdatastr.data, rdatastr.length);
                        keycbuf[rdatastr.length] = 0;
                        dns_rdata_freestruct(&rdata_txt);
@@ -1644,10 +1649,12 @@ catz_process_zones_suboption(dns_catz_zone_t *catz, dns_rdataset_t *value,
        REQUIRE(DNS_RDATASET_VALID(value));
        REQUIRE(ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
 
-       if (name->labels < 1) {
+       uint8_t labels = dns_name_countlabels(name);
+
+       if (labels < 1) {
                return ISC_R_FAILURE;
        }
-       dns_name_getlabel(name, name->labels - 1, &option);
+       dns_name_getlabel(name, labels - 1, &option);
        opt = catz_get_option(&option);
 
        /*
@@ -1655,11 +1662,11 @@ catz_process_zones_suboption(dns_catz_zone_t *catz, dns_rdataset_t *value,
         * "ext" label.
         */
        if (catz->version >= 2 && opt >= CATZ_OPT_CUSTOM_START) {
-               if (opt != CATZ_OPT_EXT || name->labels < 2) {
+               if (opt != CATZ_OPT_EXT || labels < 2) {
                        return ISC_R_FAILURE;
                }
                suffix_labels++;
-               dns_name_getlabel(name, name->labels - 2, &option);
+               dns_name_getlabel(name, labels - 2, &option);
                opt = catz_get_option(&option);
        }
 
@@ -1684,13 +1691,13 @@ catz_process_zones_suboption(dns_catz_zone_t *catz, dns_rdataset_t *value,
        case CATZ_OPT_PRIMARIES:
                return catz_process_primaries(catz, &entry->opts.masters, value,
                                              &prefix);
-       case CATZ_OPT_ALLOW_QUERY:
-               if (prefix.labels != 0) {
+       case CATZ_OPT_ALLOW_QUERY:;
+               if (prefix.length != 0) {
                        return ISC_R_FAILURE;
                }
                return catz_process_apl(catz, &entry->opts.allow_query, value);
        case CATZ_OPT_ALLOW_TRANSFER:
-               if (prefix.labels != 0) {
+               if (prefix.length != 0) {
                        return ISC_R_FAILURE;
                }
                return catz_process_apl(catz, &entry->opts.allow_transfer,
@@ -1734,10 +1741,12 @@ catz_process_value(dns_catz_zone_t *catz, dns_name_t *name,
        REQUIRE(ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
        REQUIRE(DNS_RDATASET_VALID(rdataset));
 
-       if (name->labels < 1) {
+       uint8_t labels = dns_name_countlabels(name);
+
+       if (labels < 1) {
                return ISC_R_FAILURE;
        }
-       dns_name_getlabel(name, name->labels - 1, &option);
+       dns_name_getlabel(name, labels - 1, &option);
        opt = catz_get_option(&option);
 
        /*
@@ -1745,11 +1754,11 @@ catz_process_value(dns_catz_zone_t *catz, dns_name_t *name,
         * "ext" label.
         */
        if (catz->version >= 2 && opt >= CATZ_OPT_CUSTOM_START) {
-               if (opt != CATZ_OPT_EXT || name->labels < 2) {
+               if (opt != CATZ_OPT_EXT || labels < 2) {
                        return ISC_R_FAILURE;
                }
                suffix_labels++;
-               dns_name_getlabel(name, name->labels - 2, &option);
+               dns_name_getlabel(name, labels - 2, &option);
                opt = catz_get_option(&option);
        }
 
@@ -1763,19 +1772,19 @@ catz_process_value(dns_catz_zone_t *catz, dns_name_t *name,
                return catz_process_primaries(catz, &catz->zoneoptions.masters,
                                              rdataset, &prefix);
        case CATZ_OPT_ALLOW_QUERY:
-               if (prefix.labels != 0) {
+               if (prefix.length != 0) {
                        return ISC_R_FAILURE;
                }
                return catz_process_apl(catz, &catz->zoneoptions.allow_query,
                                        rdataset);
        case CATZ_OPT_ALLOW_TRANSFER:
-               if (prefix.labels != 0) {
+               if (prefix.length != 0) {
                        return ISC_R_FAILURE;
                }
                return catz_process_apl(catz, &catz->zoneoptions.allow_transfer,
                                        rdataset);
        case CATZ_OPT_VERSION:
-               if (prefix.labels != 0) {
+               if (prefix.length != 0) {
                        return ISC_R_FAILURE;
                }
                return catz_process_version(catz, rdataset);
@@ -1841,8 +1850,9 @@ dns__catz_update_process(dns_catz_zone_t *catz, const dns_name_t *src_name,
                return ISC_R_UNEXPECTED;
        }
 
+       uint8_t labels = dns_name_countlabels(&catz->name);
        dns_name_init(&prefix, NULL);
-       dns_name_split(src_name, catz->name.labels, &prefix, NULL);
+       dns_name_split(src_name, labels, &prefix, NULL);
        result = catz_process_value(catz, &prefix, rdataset);
 
        return result;
index 626d91b620e389213072c1af4737df631de640fc..9490d2a7f763b09608da2f5efe2ed4a65b77b6d9 100644 (file)
@@ -218,13 +218,14 @@ slot_index(dns_compress_t *cctx, unsigned int hash, unsigned int probe) {
 }
 
 static bool
-insert_label(dns_compress_t *cctx, isc_buffer_t *buffer, const dns_name_t *name,
-            unsigned int label, uint16_t hash, unsigned int probe) {
+insert_label(dns_compress_t *cctx, isc_buffer_t *buffer,
+            const dns_offsets_t offsets, unsigned int label, uint16_t hash,
+            unsigned int probe) {
        /*
         * hash set entries must have valid compression offsets
         * and the hash set must not get too full (75% load)
         */
-       unsigned int prefix_len = name->offsets[label];
+       unsigned int prefix_len = offsets[label];
        unsigned int coff = isc_buffer_usedlength(buffer) + prefix_len;
        if (coff >= 0x4000 || cctx->count > cctx->mask * 3 / 4) {
                return false;
@@ -253,17 +254,18 @@ insert_label(dns_compress_t *cctx, isc_buffer_t *buffer, const dns_name_t *name,
  */
 static void
 insert(dns_compress_t *cctx, isc_buffer_t *buffer, const dns_name_t *name,
-       unsigned int label, uint16_t hash, unsigned int probe) {
+       const dns_offsets_t offsets, unsigned int label, uint16_t hash,
+       unsigned int probe) {
        bool sensitive = (cctx->flags & DNS_COMPRESS_CASE) != 0;
        /*
         * this insertion loop continues from the search loop inside
         * dns_compress_name() below, iterating over the remaining labels
         * of the name and accumulating the hash in the same manner
         */
-       while (insert_label(cctx, buffer, name, label, hash, probe) &&
+       while (insert_label(cctx, buffer, offsets, label, hash, probe) &&
               label-- > 0)
        {
-               unsigned int prefix_len = name->offsets[label];
+               unsigned int prefix_len = offsets[label];
                uint8_t *suffix_ptr = name->ndata + prefix_len;
                hash = hash_label(hash, suffix_ptr, sensitive);
                probe = 0;
@@ -277,8 +279,6 @@ dns_compress_name(dns_compress_t *cctx, isc_buffer_t *buffer,
        REQUIRE(CCTX_VALID(cctx));
        REQUIRE(ISC_BUFFER_VALID(buffer));
        REQUIRE(dns_name_isabsolute(name));
-       REQUIRE(name->labels > 0);
-       REQUIRE(name->offsets != NULL);
        REQUIRE(return_prefix != NULL);
        REQUIRE(return_coff != NULL);
        REQUIRE(*return_coff == 0);
@@ -287,17 +287,21 @@ dns_compress_name(dns_compress_t *cctx, isc_buffer_t *buffer,
                return;
        }
 
+       dns_offsets_t offsets;
+       size_t labels = dns_name_offsets(name, offsets);
+       INSIST(labels > 0);
+
        bool sensitive = (cctx->flags & DNS_COMPRESS_CASE) != 0;
 
        uint16_t hash = HASH_INIT_DJB2;
-       unsigned int label = name->labels - 1; /* skip the root label */
+       size_t label = labels - 1; /* skip the root label */
 
        /*
         * find out how much of the name's suffix is in the hash set,
         * stepping backwards from the end one label at a time
         */
        while (label-- > 0) {
-               unsigned int prefix_len = name->offsets[label];
+               unsigned int prefix_len = offsets[label];
                unsigned int suffix_len = name->length - prefix_len;
                uint8_t *suffix_ptr = name->ndata + prefix_len;
                hash = hash_label(hash, suffix_ptr, sensitive);
@@ -313,7 +317,8 @@ dns_compress_name(dns_compress_t *cctx, isc_buffer_t *buffer,
                         * the rest of the name (its prefix) into the set
                         */
                        if (coff == 0 || probe > probe_distance(cctx, slot)) {
-                               insert(cctx, buffer, name, label, hash, probe);
+                               insert(cctx, buffer, name, offsets, label, hash,
+                                      probe);
                                return;
                        }
 
index d24996e5e73c86eff4888b5bb456df33a2608917..1bdc4a057e690feee3f3525ac4075cbd4d6057c2 100644 (file)
@@ -17,7 +17,7 @@
 
 void
 dns_fixedname_init(dns_fixedname_t *fixed) {
-       dns_name_init(&fixed->name, fixed->offsets);
+       dns_name_init(&fixed->name, NULL);
        isc_buffer_init(&fixed->buffer, fixed->data, DNS_NAME_MAXWIRE);
        dns_name_setbuffer(&fixed->name, &fixed->buffer);
 }
index e7bb86e6501a222755d040ec7880d247675f0d1e..b4bb66e0b21cc384d00e1ab403c8af318f976d9f 100644 (file)
@@ -81,7 +81,7 @@ new_forwarders(isc_mem_t *mctx, const dns_name_t *name,
        isc_mem_attach(mctx, &forwarders->mctx);
        isc_refcount_init(&forwarders->references, 1);
 
-       dns_name_dupwithoffsets(name, mctx, &forwarders->name);
+       dns_name_dup(name, mctx, &forwarders->name);
 
        return forwarders;
 }
index 95ce7e083666a1e08cb75342ad6ceaa0e059cf1e..ce3e7351775ddc70d6285f400ca8fd7b34467d0e 100644 (file)
@@ -59,7 +59,6 @@
 
 struct dns_fixedname {
        dns_name_t    name;
-       dns_offsets_t offsets;
        isc_buffer_t  buffer;
        unsigned char data[DNS_NAME_MAXWIRE];
 };
index 4e65d9414b4c4e00a4b0365497cecefc95e84597..a467ea447f45153fb097c89d98ca9982a7145f9a 100644 (file)
@@ -61,7 +61,7 @@
  *
  * The same applies to rdatasets.
  *
- * On the other hand, offsets, rdatalists and rdatas allocated using
+ * On the other hand, rdatalists and rdatas allocated using
  * dns_message_gettemp*() will always be freed automatically
  * when the message is reset or destroyed; calling dns_message_puttemp*()
  * on rdatalists and rdatas is optional and serves only to enable the item
@@ -275,7 +275,6 @@ struct dns_message {
 
        ISC_LIST(dns_msgblock_t) rdatas;
        ISC_LIST(dns_msgblock_t) rdatalists;
-       ISC_LIST(dns_msgblock_t) offsets;
 
        ISC_LIST(dns_rdata_t) freerdata;
        ISC_LIST(dns_rdatalist_t) freerdatalist;
index 68e4bc495e598627ad5b0488d9a4d9a0fa0c0230..5fd89a6cbf9426fc04cfa82683f00d69ee81da1f 100644 (file)
@@ -67,6 +67,7 @@
 #include <stdbool.h>
 #include <stdio.h>
 
+#include <isc/attributes.h>
 #include <isc/buffer.h>
 #include <isc/hashmap.h>
 #include <isc/magic.h>
 struct dns_name {
        unsigned int magic;
        uint8_t      length;
-       uint8_t      labels;
        struct dns_name_attrs {
                bool absolute     : 1; /*%< Used by name.c */
                bool readonly     : 1; /*%< Used by name.c */
                bool dynamic      : 1; /*%< Used by name.c */
-               bool dynoffsets   : 1; /*%< Used by name.c */
                bool nocompress   : 1; /*%< Used by name.c */
                bool cache        : 1; /*%< Used by resolver. */
                bool answer       : 1; /*%< Used by resolver. */
@@ -113,7 +112,6 @@ struct dns_name {
                bool hasupdaterec : 1; /*%< Used by client. */
        } attributes;
        unsigned char *ndata;
-       unsigned char *offsets;
        isc_buffer_t  *buffer;
        ISC_LINK(dns_name_t) link;
        ISC_LIST(dns_rdataset_t) list;
@@ -151,38 +149,29 @@ extern const dns_name_t *dns_wildcardname;
  * and sizeof(A) in DNS_NAME_INITABSOLUTE to allow C strings to be used
  * to initialize 'ndata'.
  *
- * Note[2]: The final value of offsets for DNS_NAME_INITABSOLUTE should
- * match (sizeof(A) - 1) which is the offset of the root label.
- *
  * Typical usage:
  *     unsigned char data[] = "\005value";
- *     unsigned char offsets[] = { 0 };
- *     dns_name_t value = DNS_NAME_INITNONABSOLUTE(data, offsets);
+ *     dns_name_t value = DNS_NAME_INITNONABSOLUTE(data, 1);
  *
  *     unsigned char data[] = "\005value";
- *     unsigned char offsets[] = { 0, 6 };
- *     dns_name_t value = DNS_NAME_INITABSOLUTE(data, offsets);
+ *     dns_name_t value = DNS_NAME_INITABSOLUTE(data, 1);
  */
-#define DNS_NAME_INITNONABSOLUTE(A, B)              \
-       {                                           \
-               .magic = DNS_NAME_MAGIC,            \
-               .ndata = A,                         \
-               .length = (sizeof(A) - 1),          \
-               .labels = sizeof(B),                \
-               .attributes = { .readonly = true }, \
-               .offsets = B,                       \
-               .link = ISC_LINK_INITIALIZER,       \
-               .list = ISC_LIST_INITIALIZER,       \
+#define DNS_NAME_INITNONABSOLUTE(__ndata, __labels)             \
+       {                                                       \
+               .magic = 0 ? sizeof(__labels) : DNS_NAME_MAGIC, \
+               .ndata = (__ndata),                             \
+               .length = (sizeof(__ndata) - 1),                \
+               .attributes = { .readonly = true },             \
+               .link = ISC_LINK_INITIALIZER,                   \
+               .list = ISC_LIST_INITIALIZER,                   \
        }
 
-#define DNS_NAME_INITABSOLUTE(A, B)                                   \
+#define DNS_NAME_INITABSOLUTE(__ndata, __labels)                      \
        {                                                             \
-               .magic = DNS_NAME_MAGIC,                              \
-               .ndata = A,                                           \
-               .length = sizeof(A),                                  \
-               .labels = sizeof(B),                                  \
+               .magic = 0 ? sizeof(__labels) : DNS_NAME_MAGIC,       \
+               .ndata = (__ndata),                                   \
+               .length = sizeof(__ndata),                            \
                .attributes = { .readonly = true, .absolute = true }, \
-               .offsets = B,                                         \
                .link = ISC_LINK_INITIALIZER,                         \
                .list = ISC_LIST_INITIALIZER,                         \
        }
@@ -199,7 +188,7 @@ extern const dns_name_t *dns_wildcardname;
 #define DNS_NAME_MAXLABELS 128
 #define DNS_NAME_LABELLEN  63
 
-typedef unsigned char dns_offsets_t[DNS_NAME_MAXLABELS];
+typedef uint8_t dns_offsets_t[DNS_NAME_MAXLABELS];
 
 /*
  * Text output filter procedure.
@@ -214,10 +203,9 @@ typedef isc_result_t(dns_name_totextfilter_t)(isc_buffer_t *target,
  ***/
 
 static inline void
-dns_name_init(dns_name_t *name, unsigned char *offsets) {
+dns_name_init(dns_name_t *name, unsigned char *offsets ISC_ATTR_UNUSED) {
        *name = (dns_name_t){
                .magic = DNS_NAME_MAGIC,
-               .offsets = (offsets),
                .link = ISC_LINK_INITIALIZER,
                .list = ISC_LIST_INITIALIZER,
        };
@@ -225,16 +213,9 @@ dns_name_init(dns_name_t *name, unsigned char *offsets) {
 /*%<
  * Initialize 'name'.
  *
- * Notes:
- * \li 'offsets' is never required to be non-NULL, but specifying a
- *     dns_offsets_t for 'offsets' will improve the performance of most
- *     name operations if the name is used more than once.
- *
  * Requires:
  * \li 'name' is not NULL and points to a struct dns_name.
  *
- * \li offsets == NULL or offsets is a dns_offsets_t.
- *
  * Ensures:
  * \li 'name' is a valid name.
  * \li dns_name_countlabels(name) == 0
@@ -248,7 +229,6 @@ dns_name_reset(dns_name_t *name) {
 
        name->ndata = NULL;
        name->length = 0;
-       name->labels = 0;
        name->attributes.absolute = false;
        if (name->buffer != NULL) {
                isc_buffer_clear(name->buffer);
@@ -284,9 +264,7 @@ dns_name_invalidate(dns_name_t *name) {
        name->magic = 0;
        name->ndata = NULL;
        name->length = 0;
-       name->labels = 0;
        name->attributes = (struct dns_name_attrs){};
-       name->offsets = NULL;
        name->buffer = NULL;
        ISC_LINK_INIT(name, link);
 }
@@ -485,8 +463,6 @@ dns_name_equal(const dns_name_t *name1, const dns_name_t *name2);
  * \li Because it only needs to test for equality, dns_name_equal() can be
  *     significantly faster than dns_name_fullcompare() or dns_name_compare().
  *
- * \li Offsets tables are not used in the comparison.
- *
  * \li It makes no sense for one of the names to be relative and the
  *     other absolute.  If both names are relative, then to be meaningfully
  *     compared the caller must ensure that they are both relative to the
@@ -594,12 +570,28 @@ dns_name_matcheswildcard(const dns_name_t *name, const dns_name_t *wname);
  *** Labels
  ***/
 
-static inline unsigned int
+uint8_t
+dns_name_offsets(const dns_name_t *name, uint8_t *offsets);
+/*%<
+ * Returns the number of the labels in the DNS name and optionally fills their
+ * offsets into the table.
+ *
+ * Requires:
+ *\li  'name' is a valid DNS name
+ *
+ * Returns:
+ *\li  number of labels in the DNS name
+ *
+ * Note:
+ *\li  if the 'offsets' is non-NULL, it will fill the offsets of
+ *     individual labels in the name
+ */
+
+static inline uint8_t
 dns_name_countlabels(const dns_name_t *name) {
        REQUIRE(DNS_NAME_VALID(name));
-       REQUIRE(name->labels <= DNS_NAME_MAXLABELS);
 
-       return name->labels;
+       return dns_name_offsets(name, NULL);
 }
 /*%<
  * How many labels does 'name' have?
@@ -793,8 +785,6 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx,
  *
  * \li target is a valid buffer.
  *
- * \li Any offsets in the compression table are valid for buffer.
- *
  * Ensures:
  *
  *     If the result is success:
@@ -1007,19 +997,21 @@ dns_name_split(const dns_name_t *name, unsigned int suffixlabels,
               dns_name_t *prefix, dns_name_t *suffix) {
        REQUIRE(DNS_NAME_VALID(name));
        REQUIRE(suffixlabels > 0);
-       REQUIRE(suffixlabels <= name->labels);
        REQUIRE(prefix != NULL || suffix != NULL);
        REQUIRE(prefix == NULL ||
                (DNS_NAME_VALID(prefix) && DNS_NAME_BINDABLE(prefix)));
        REQUIRE(suffix == NULL ||
                (DNS_NAME_VALID(suffix) && DNS_NAME_BINDABLE(suffix)));
 
+       uint8_t labels = dns_name_countlabels(name);
+       INSIST(suffixlabels <= labels);
+
        if (prefix != NULL) {
-               dns_name_getlabelsequence(name, 0, name->labels - suffixlabels,
+               dns_name_getlabelsequence(name, 0, labels - suffixlabels,
                                          prefix);
        }
        if (suffix != NULL) {
-               dns_name_getlabelsequence(name, name->labels - suffixlabels,
+               dns_name_getlabelsequence(name, labels - suffixlabels,
                                          suffixlabels, suffix);
        }
 }
@@ -1081,24 +1073,6 @@ dns_name_dup(const dns_name_t *source, isc_mem_t *mctx, dns_name_t *target);
  *\li  'mctx' is a valid memory context.
  */
 
-void
-dns_name_dupwithoffsets(const dns_name_t *source, isc_mem_t *mctx,
-                       dns_name_t *target);
-/*%<
- * Make 'target' a read-only dynamically allocated copy of 'source'.
- * 'target' will also have a dynamically allocated offsets table.
- *
- * Requires:
- *
- *\li  'source' is a valid non-empty name.
- *
- *\li  'target' is a valid name that is not read-only.
- *
- *\li  'target' has no offsets table.
- *
- *\li  'mctx' is a valid memory context.
- */
-
 void
 dns_name_free(dns_name_t *name, isc_mem_t *mctx);
 /*%<
index 159740aa746f1ccc4b2166fab664e76b29fac0c8..0a95f235f0c249ed069cd722e7fa1fc1057ed4fd 100644 (file)
@@ -319,7 +319,7 @@ new_keynode(const dns_name_t *name, dns_rdata_ds_t *ds,
        isc_refcount_init(&knode->references, 1);
        isc_rwlock_init(&knode->rwlock);
 
-       dns_name_dupwithoffsets(name, keytable->mctx, &knode->name);
+       dns_name_dup(name, keytable->mctx, &knode->name);
 
        /*
         * If a DS was supplied, initialize an rdatalist.
index e5982f14e4c6bf81655262a8340f4354484934b9..8bd88bc8985d33e30ef9cf4842121c075988438e 100644 (file)
@@ -324,19 +324,14 @@ loadctx_destroy(dns_loadctx_t *lctx);
                            source, line, isc_result_totext(result))
 
 static unsigned char in_addr_arpa_data[] = "\007IN-ADDR\004ARPA";
-static unsigned char in_addr_arpa_offsets[] = { 0, 8, 13 };
-static dns_name_t const in_addr_arpa =
-       DNS_NAME_INITABSOLUTE(in_addr_arpa_data, in_addr_arpa_offsets);
+static dns_name_t const in_addr_arpa = DNS_NAME_INITABSOLUTE(in_addr_arpa_data,
+                                                            NULL);
 
 static unsigned char ip6_int_data[] = "\003IP6\003INT";
-static unsigned char ip6_int_offsets[] = { 0, 4, 8 };
-static dns_name_t const ip6_int = DNS_NAME_INITABSOLUTE(ip6_int_data,
-                                                       ip6_int_offsets);
+static dns_name_t const ip6_int = DNS_NAME_INITABSOLUTE(ip6_int_data, NULL);
 
 static unsigned char ip6_arpa_data[] = "\003IP6\004ARPA";
-static unsigned char ip6_arpa_offsets[] = { 0, 4, 9 };
-static dns_name_t const ip6_arpa = DNS_NAME_INITABSOLUTE(ip6_arpa_data,
-                                                        ip6_arpa_offsets);
+static dns_name_t const ip6_arpa = DNS_NAME_INITABSOLUTE(ip6_arpa_data, NULL);
 
 static bool
 dns_master_isprimary(dns_loadctx_t *lctx) {
index 661dd40ce1618c33896ff7a662ab3c1e653566a2..cbd18d3c8add52db95f4f5940a55e7dccd6d2009 100644 (file)
@@ -366,24 +366,6 @@ out:
        return rdatalist;
 }
 
-static dns_offsets_t *
-newoffsets(dns_message_t *msg) {
-       dns_msgblock_t *msgblock;
-       dns_offsets_t *offsets;
-
-       msgblock = ISC_LIST_TAIL(msg->offsets);
-       offsets = msgblock_get(msgblock, dns_offsets_t);
-       if (offsets == NULL) {
-               msgblock = msgblock_allocate(msg->mctx, sizeof(dns_offsets_t),
-                                            OFFSET_COUNT);
-               ISC_LIST_APPEND(msg->offsets, msgblock, link);
-
-               offsets = msgblock_get(msgblock, dns_offsets_t);
-       }
-
-       return offsets;
-}
-
 static void
 msginitheader(dns_message_t *m) {
        m->id = 0;
@@ -608,18 +590,6 @@ msgreset(dns_message_t *msg, bool everything) {
                msgblock = next_msgblock;
        }
 
-       msgblock = ISC_LIST_HEAD(msg->offsets);
-       if (!everything && msgblock != NULL) {
-               msgblock_reset(msgblock);
-               msgblock = ISC_LIST_NEXT(msgblock, link);
-       }
-       while (msgblock != NULL) {
-               next_msgblock = ISC_LIST_NEXT(msgblock, link);
-               ISC_LIST_UNLINK(msg->offsets, msgblock, link);
-               msgblock_free(msg->mctx, msgblock, sizeof(dns_offsets_t));
-               msgblock = next_msgblock;
-       }
-
        if (msg->tsigkey != NULL) {
                dns_tsigkey_detach(&msg->tsigkey);
                msg->tsigkey = NULL;
@@ -726,7 +696,6 @@ dns_message_create(isc_mem_t *mctx, isc_mempool_t *namepool,
                .cleanup = ISC_LIST_INITIALIZER,
                .rdatas = ISC_LIST_INITIALIZER,
                .rdatalists = ISC_LIST_INITIALIZER,
-               .offsets = ISC_LIST_INITIALIZER,
                .freerdata = ISC_LIST_INITIALIZER,
                .freerdatalist = ISC_LIST_INITIALIZER,
                .magic = DNS_MESSAGE_MAGIC,
@@ -981,7 +950,6 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t dctx,
        for (count = 0; count < msg->counts[DNS_SECTION_QUESTION]; count++) {
                name = NULL;
                dns_message_gettempname(msg, &name);
-               name->offsets = (unsigned char *)newoffsets(msg);
                free_name = true;
 
                /*
@@ -1121,7 +1089,6 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t dctx,
 
                name = NULL;
                dns_message_gettempname(msg, &name);
-               name->offsets = (unsigned char *)newoffsets(msg);
                free_name = true;
 
                /*
index 4ac40ae0de05cd4bc325d04e78be41708d2f7571..04d708bcccfa68bf4efe6978584478737a1e1f61 100644 (file)
 #include <inttypes.h>
 #include <stdbool.h>
 #include <stdlib.h>
+#include <unistd.h>
 
 #include <isc/ascii.h>
+#include <isc/attributes.h>
 #include <isc/buffer.h>
 #include <isc/hash.h>
 #include <isc/hex.h>
@@ -45,30 +47,26 @@ typedef enum {
 } ft_state;
 
 #define INIT_OFFSETS(name, var, default_offsets) \
-       if ((name)->offsets != NULL)             \
-               var = (name)->offsets;           \
-       else                                     \
-               var = (default_offsets);
+       {                                        \
+               (var) = (default_offsets);       \
+       }
 
 #define SETUP_OFFSETS(name, var, default_offsets) \
-       if ((name)->offsets != NULL) {            \
-               var = (name)->offsets;            \
-       } else {                                  \
-               var = (default_offsets);          \
+       ({                                        \
+               (var) = (default_offsets);        \
                set_offsets(name, var, NULL);     \
-       }
+       })
 
 /*%
  * Note:  If additional attributes are added that should not be set for
  *       empty names, MAKE_EMPTY() must be changed so it clears them.
  */
 #define MAKE_EMPTY(name)                           \
-       do {                                       \
+       {                                          \
                name->ndata = NULL;                \
                name->length = 0;                  \
-               name->labels = 0;                  \
                name->attributes.absolute = false; \
-       } while (0);
+       }
 
 /*%
  * Note that the name data must be a char array, not a string
@@ -76,17 +74,12 @@ typedef enum {
  * the const attribute of a string.
  */
 static unsigned char root_ndata[] = { "" };
-static unsigned char root_offsets[] = { 0 };
-
-static dns_name_t root = DNS_NAME_INITABSOLUTE(root_ndata, root_offsets);
+static dns_name_t root = DNS_NAME_INITABSOLUTE(root_ndata, NULL);
 const dns_name_t *dns_rootname = &root;
 
 static unsigned char wild_ndata[] = { "\001*" };
-static unsigned char wild_offsets[] = { 0 };
-
-static dns_name_t const wild = DNS_NAME_INITNONABSOLUTE(wild_ndata,
-                                                       wild_offsets);
 
+static dns_name_t const wild = DNS_NAME_INITNONABSOLUTE(wild_ndata, NULL);
 const dns_name_t *dns_wildcardname = &wild;
 
 /*
@@ -94,26 +87,21 @@ const dns_name_t *dns_wildcardname = &wild;
  */
 static thread_local dns_name_totextfilter_t *totext_filter_proc = NULL;
 
-static void
+static uint8_t
 set_offsets(const dns_name_t *name, unsigned char *offsets,
            dns_name_t *set_name);
 
 bool
 dns_name_isvalid(const dns_name_t *name) {
-       unsigned char *ndata, *offsets;
+       unsigned char *ndata;
        unsigned int offset, count, length, nlabels;
 
        if (!DNS_NAME_VALID(name)) {
                return false;
        }
 
-       if (name->labels > DNS_NAME_MAXLABELS) {
-               return false;
-       }
-
        ndata = name->ndata;
        length = name->length;
-       offsets = name->offsets;
        offset = 0;
        nlabels = 0;
 
@@ -122,9 +110,6 @@ dns_name_isvalid(const dns_name_t *name) {
                if (count > DNS_NAME_LABELLEN) {
                        return false;
                }
-               if (offsets != NULL && offsets[nlabels] != offset) {
-                       return false;
-               }
 
                nlabels++;
                offset += count + 1;
@@ -138,7 +123,7 @@ dns_name_isvalid(const dns_name_t *name) {
                }
        }
 
-       if (nlabels != name->labels || offset != name->length) {
+       if (nlabels > DNS_NAME_MAXLABELS || offset != name->length) {
                return false;
        }
 
@@ -187,7 +172,7 @@ dns_name_ismailbox(const dns_name_t *name) {
        bool first;
 
        REQUIRE(DNS_NAME_VALID(name));
-       REQUIRE(name->labels > 0);
+       REQUIRE(name->length > 0);
        REQUIRE(name->attributes.absolute);
 
        /*
@@ -242,7 +227,7 @@ dns_name_ishostname(const dns_name_t *name, bool wildcard) {
        bool first;
 
        REQUIRE(DNS_NAME_VALID(name));
-       REQUIRE(name->labels > 0);
+       REQUIRE(name->length > 0);
        REQUIRE(name->attributes.absolute);
 
        /*
@@ -293,7 +278,7 @@ dns_name_iswildcard(const dns_name_t *name) {
         */
 
        REQUIRE(DNS_NAME_VALID(name));
-       REQUIRE(name->labels > 0);
+       REQUIRE(name->length > 0);
 
        if (name->length >= 2) {
                ndata = name->ndata;
@@ -316,7 +301,6 @@ dns_name_internalwildcard(const dns_name_t *name) {
         */
 
        REQUIRE(DNS_NAME_VALID(name));
-       REQUIRE(name->labels > 0);
 
        /*
         * Skip first label.
@@ -326,12 +310,12 @@ dns_name_internalwildcard(const dns_name_t *name) {
        INSIST(count <= DNS_NAME_LABELLEN);
        ndata += count;
        label = 1;
-       /*
-        * Check all but the last of the remaining labels.
-        */
-       while (label + 1 < name->labels) {
+
+       uint8_t labels = dns_name_countlabels(name);
+       while (label + 1 < labels) {
                count = *ndata++;
                INSIST(count <= DNS_NAME_LABELLEN);
+
                if (count == 1 && *ndata == '*') {
                        return true;
                }
@@ -380,16 +364,15 @@ dns_name_fullcompare(const dns_name_t *name1, const dns_name_t *name2,
 
        if (name1 == name2) {
                *orderp = 0;
-               *nlabelsp = name1->labels;
+               *nlabelsp = dns_name_countlabels(name1);
+
                return dns_namereln_equal;
        }
 
-       SETUP_OFFSETS(name1, offsets1, odata1);
-       SETUP_OFFSETS(name2, offsets2, odata2);
+       l1 = SETUP_OFFSETS(name1, offsets1, odata1);
+       l2 = SETUP_OFFSETS(name2, offsets2, odata2);
 
        nlabels = 0;
-       l1 = name1->labels;
-       l2 = name2->labels;
        if (l2 > l1) {
                l = l1;
                ldiff = 0 - (l2 - l1);
@@ -538,10 +521,10 @@ dns_name_rdatacompare(const dns_name_t *name1, const dns_name_t *name2) {
         */
 
        REQUIRE(DNS_NAME_VALID(name1));
-       REQUIRE(name1->labels > 0);
+       REQUIRE(name1->length > 0);
        REQUIRE(name1->attributes.absolute);
        REQUIRE(DNS_NAME_VALID(name2));
-       REQUIRE(name2->labels > 0);
+       REQUIRE(name2->length > 0);
        REQUIRE(name2->attributes.absolute);
 
        /* label lengths are < 64 so tolower() does not affect them */
@@ -581,9 +564,9 @@ dns_name_matcheswildcard(const dns_name_t *name, const dns_name_t *wname) {
        dns_name_t tname;
 
        REQUIRE(DNS_NAME_VALID(name));
-       REQUIRE(name->labels > 0);
+       REQUIRE(name->length > 0);
        REQUIRE(DNS_NAME_VALID(wname));
-       labels = wname->labels;
+       labels = dns_name_countlabels(wname);
        REQUIRE(labels > 0);
        REQUIRE(dns_name_iswildcard(wname));
 
@@ -607,14 +590,15 @@ dns_name_getlabel(const dns_name_t *name, unsigned int n, dns_label_t *label) {
         */
 
        REQUIRE(DNS_NAME_VALID(name));
-       REQUIRE(name->labels > 0);
-       REQUIRE(n < name->labels);
        REQUIRE(label != NULL);
 
-       SETUP_OFFSETS(name, offsets, odata);
+       uint8_t labels = SETUP_OFFSETS(name, offsets, odata);
+
+       REQUIRE(labels > 0);
+       REQUIRE(n < labels);
 
        label->base = &name->ndata[offsets[n]];
-       if (n == (unsigned int)name->labels - 1) {
+       if (n == (unsigned int)labels - 1) {
                label->length = name->length - offsets[n];
        } else {
                label->length = offsets[n + 1] - offsets[n];
@@ -635,12 +619,13 @@ dns_name_getlabelsequence(const dns_name_t *source, unsigned int first,
 
        REQUIRE(DNS_NAME_VALID(source));
        REQUIRE(DNS_NAME_VALID(target));
-       REQUIRE(first <= source->labels);
-       REQUIRE(n <= source->labels - first); /* note first+n could overflow */
        REQUIRE(DNS_NAME_BINDABLE(target));
 
+       uint8_t labels = dns_name_countlabels(source);
+       REQUIRE(first <= labels && n <= labels - first);
+
        p = source->ndata;
-       if (first == source->labels) {
+       if (first == labels) {
                firstoffset = source->length;
        } else {
                for (i = 0; i < first; i++) {
@@ -650,7 +635,7 @@ dns_name_getlabelsequence(const dns_name_t *source, unsigned int first,
                firstoffset = (unsigned int)(p - source->ndata);
        }
 
-       if (first + n == source->labels) {
+       if (first + n == labels) {
                endoffset = source->length;
        } else {
                for (i = 0; i < n; i++) {
@@ -663,23 +648,11 @@ dns_name_getlabelsequence(const dns_name_t *source, unsigned int first,
        target->ndata = &source->ndata[firstoffset];
        target->length = endoffset - firstoffset;
 
-       if (first + n == source->labels && n > 0 && source->attributes.absolute)
-       {
+       if (first + n == labels && n > 0 && source->attributes.absolute) {
                target->attributes.absolute = true;
        } else {
                target->attributes.absolute = false;
        }
-
-       target->labels = n;
-
-       /*
-        * If source and target are the same, and we're making target
-        * a prefix of source, the offsets table is correct already
-        * so we don't need to call set_offsets().
-        */
-       if (target->offsets != NULL && (target != source || first != 0)) {
-               set_offsets(target, target->offsets, NULL);
-       }
 }
 
 void
@@ -694,19 +667,9 @@ dns_name_clone(const dns_name_t *source, dns_name_t *target) {
 
        target->ndata = source->ndata;
        target->length = source->length;
-       target->labels = source->labels;
        target->attributes = source->attributes;
        target->attributes.readonly = false;
        target->attributes.dynamic = false;
-       target->attributes.dynoffsets = false;
-       if (target->offsets != NULL && source->labels > 0) {
-               if (source->offsets != NULL) {
-                       memmove(target->offsets, source->offsets,
-                               source->labels);
-               } else {
-                       set_offsets(target, target->offsets, NULL);
-               }
-       }
 }
 
 void
@@ -744,7 +707,6 @@ dns_name_fromregion(dns_name_t *name, const isc_region_t *r) {
        if (r->length > 0) {
                set_offsets(name, offsets, name);
        } else {
-               name->labels = 0;
                name->attributes.absolute = false;
        }
 
@@ -1012,7 +974,6 @@ dns_name_fromtext(dns_name_t *name, isc_buffer_t *source,
        }
 
        name->ndata = (unsigned char *)target->base + target->used;
-       name->labels = labels;
        name->length = nused;
 
        isc_buffer_forward(source, tused);
@@ -1045,7 +1006,7 @@ dns_name_totext(const dns_name_t *name, unsigned int options,
 
        ndata = name->ndata;
        nlen = name->length;
-       labels = name->labels;
+       labels = dns_name_countlabels(name);
        tdata = isc_buffer_used(target);
        tlen = isc_buffer_availablelength(target);
 
@@ -1215,7 +1176,7 @@ dns_name_tofilenametext(const dns_name_t *name, bool omit_final_dot,
 
        ndata = name->ndata;
        nlen = name->length;
-       labels = name->labels;
+       labels = dns_name_countlabels(name);
        tdata = isc_buffer_used(target);
        tlen = isc_buffer_availablelength(target);
 
@@ -1348,14 +1309,10 @@ dns_name_downcase(const dns_name_t *source, dns_name_t *name,
        isc_ascii_lowercopy(ndata, source->ndata, source->length);
 
        if (source != name) {
-               name->labels = source->labels;
                name->length = source->length;
                name->attributes = (struct dns_name_attrs){
                        .absolute = source->attributes.absolute
                };
-               if (name->labels > 0 && name->offsets != NULL) {
-                       set_offsets(name, name->offsets, NULL);
-               }
        }
 
        isc_buffer_add(target, name->length);
@@ -1363,7 +1320,7 @@ dns_name_downcase(const dns_name_t *source, dns_name_t *name,
        return ISC_R_SUCCESS;
 }
 
-static void
+static uint8_t
 set_offsets(const dns_name_t *name, unsigned char *offsets,
            dns_name_t *set_name) {
        unsigned int offset, count, length, nlabels;
@@ -1377,7 +1334,10 @@ set_offsets(const dns_name_t *name, unsigned char *offsets,
        absolute = false;
        while (offset != length) {
                INSIST(nlabels < DNS_NAME_MAXLABELS);
-               offsets[nlabels++] = offset;
+               if (offsets != NULL) {
+                       offsets[nlabels] = offset;
+               }
+               nlabels++;
                count = *ndata;
                INSIST(count <= DNS_NAME_LABELLEN);
                offset += count + 1;
@@ -1391,12 +1351,12 @@ set_offsets(const dns_name_t *name, unsigned char *offsets,
        if (set_name != NULL) {
                INSIST(set_name == name);
 
-               set_name->labels = nlabels;
                set_name->length = offset;
                set_name->attributes.absolute = absolute;
        }
-       INSIST(nlabels == name->labels);
        INSIST(offset == name->length);
+
+       return nlabels;
 }
 
 isc_result_t
@@ -1561,7 +1521,6 @@ root_label:;
 
        name->attributes.absolute = true;
        name->ndata = name_buf;
-       name->labels = labels;
        name->length = name_len;
        isc_buffer_add(target, name_len);
 
@@ -1572,8 +1531,6 @@ isc_result_t
 dns_name_towire(const dns_name_t *name, dns_compress_t *cctx,
                isc_buffer_t *target, uint16_t *name_coff) {
        bool compress;
-       dns_offsets_t clo;
-       dns_name_t clname;
        unsigned int here;
        unsigned int prefix_length;
        unsigned int suffix_coff;
@@ -1602,12 +1559,6 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx,
                return ISC_R_SUCCESS;
        }
 
-       if (name->offsets == NULL) {
-               dns_name_init(&clname, clo);
-               dns_name_clone(name, &clname);
-               name = &clname;
-       }
-
        /*
         * Always add the name to the compression context; if compression
         * is off, reset the return values before writing the name.
@@ -1653,13 +1604,12 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx,
 isc_result_t
 dns_name_concatenate(const dns_name_t *prefix, const dns_name_t *suffix,
                     dns_name_t *name, isc_buffer_t *target) {
-       unsigned char *ndata, *offsets;
-       unsigned int nrem, labels, prefix_length, length;
+       unsigned char *ndata;
+       unsigned int nrem, prefix_length, length;
        bool copy_prefix = true;
        bool copy_suffix = true;
        bool absolute = false;
        dns_name_t tmp_name;
-       dns_offsets_t odata;
 
        /*
         * Concatenate 'prefix' and 'suffix'.
@@ -1671,10 +1621,10 @@ dns_name_concatenate(const dns_name_t *prefix, const dns_name_t *suffix,
        REQUIRE((target != NULL && ISC_BUFFER_VALID(target)) ||
                (target == NULL && name != NULL &&
                 ISC_BUFFER_VALID(name->buffer)));
-       if (prefix == NULL || prefix->labels == 0) {
+       if (prefix == NULL || prefix->length == 0) {
                copy_prefix = false;
        }
-       if (suffix == NULL || suffix->labels == 0) {
+       if (suffix == NULL || suffix->length == 0) {
                copy_suffix = false;
        }
        if (copy_prefix && prefix->attributes.absolute) {
@@ -1682,7 +1632,7 @@ dns_name_concatenate(const dns_name_t *prefix, const dns_name_t *suffix,
                REQUIRE(!copy_suffix);
        }
        if (name == NULL) {
-               dns_name_init(&tmp_name, odata);
+               dns_name_init(&tmp_name, NULL);
                name = &tmp_name;
        }
        if (target == NULL) {
@@ -1703,15 +1653,12 @@ dns_name_concatenate(const dns_name_t *prefix, const dns_name_t *suffix,
        }
        length = 0;
        prefix_length = 0;
-       labels = 0;
        if (copy_prefix) {
                prefix_length = prefix->length;
                length += prefix_length;
-               labels += prefix->labels;
        }
        if (copy_suffix) {
                length += suffix->length;
-               labels += suffix->labels;
        }
        if (length > DNS_NAME_MAXWIRE) {
                MAKE_EMPTY(name);
@@ -1739,15 +1686,9 @@ dns_name_concatenate(const dns_name_t *prefix, const dns_name_t *suffix,
        }
 
        name->ndata = ndata;
-       name->labels = labels;
        name->length = length;
        name->attributes.absolute = absolute;
 
-       if (name->labels > 0 && name->offsets != NULL) {
-               INIT_OFFSETS(name, offsets, odata);
-               set_offsets(name, offsets, NULL);
-       }
-
        isc_buffer_add(target, name->length);
 
        return ISC_R_SUCCESS;
@@ -1774,54 +1715,8 @@ dns_name_dup(const dns_name_t *source, isc_mem_t *mctx, dns_name_t *target) {
        memmove(target->ndata, source->ndata, source->length);
 
        target->length = source->length;
-       target->labels = source->labels;
        target->attributes = (struct dns_name_attrs){ .dynamic = true };
        target->attributes.absolute = source->attributes.absolute;
-       if (target->offsets != NULL) {
-               if (source->offsets != NULL) {
-                       memmove(target->offsets, source->offsets,
-                               source->labels);
-               } else {
-                       set_offsets(target, target->offsets, NULL);
-               }
-       }
-}
-
-void
-dns_name_dupwithoffsets(const dns_name_t *source, isc_mem_t *mctx,
-                       dns_name_t *target) {
-       /*
-        * Make 'target' a read-only dynamically allocated copy of 'source'.
-        * 'target' will also have a dynamically allocated offsets table.
-        */
-
-       REQUIRE(DNS_NAME_VALID(source));
-       REQUIRE(source->length > 0);
-       REQUIRE(DNS_NAME_VALID(target));
-       REQUIRE(DNS_NAME_BINDABLE(target));
-       REQUIRE(target->offsets == NULL);
-
-       /*
-        * Make 'target' empty in case of failure.
-        */
-       MAKE_EMPTY(target);
-
-       target->ndata = isc_mem_get(mctx, source->length + source->labels);
-
-       memmove(target->ndata, source->ndata, source->length);
-
-       target->length = source->length;
-       target->labels = source->labels;
-       target->attributes = (struct dns_name_attrs){ .dynamic = true,
-                                                     .dynoffsets = true,
-                                                     .readonly = true };
-       target->attributes.absolute = source->attributes.absolute;
-       target->offsets = target->ndata + source->length;
-       if (source->offsets != NULL) {
-               memmove(target->offsets, source->offsets, source->labels);
-       } else {
-               set_offsets(target, target->offsets, NULL);
-       }
 }
 
 void
@@ -1836,9 +1731,6 @@ dns_name_free(dns_name_t *name, isc_mem_t *mctx) {
        REQUIRE(name->attributes.dynamic);
 
        size = name->length;
-       if (name->attributes.dynoffsets) {
-               size += name->labels;
-       }
        isc_mem_put(mctx, name->ndata, size);
        dns_name_invalidate(name);
 }
@@ -1854,9 +1746,6 @@ dns_name_size(const dns_name_t *name) {
        }
 
        size = name->length;
-       if (name->attributes.dynoffsets) {
-               size += name->labels;
-       }
 
        return size;
 }
@@ -2018,7 +1907,7 @@ dns_name_fromstring(dns_name_t *target, const char *src,
        }
 
        if (name != target) {
-               dns_name_dupwithoffsets(name, mctx, target);
+               dns_name_dup(name, mctx, target);
        }
        return result;
 }
@@ -2047,18 +1936,9 @@ dns_name_copy(const dns_name_t *source, dns_name_t *dest) {
        }
 
        dest->ndata = ndata;
-       dest->labels = source->labels;
        dest->length = source->length;
        dest->attributes.absolute = source->attributes.absolute;
 
-       if (dest->labels > 0 && dest->offsets != NULL) {
-               if (source->offsets != NULL && source->labels != 0) {
-                       memmove(dest->offsets, source->offsets, source->labels);
-               } else {
-                       set_offsets(dest, dest->offsets, NULL);
-               }
-       }
-
        isc_buffer_add(target, dest->length);
 }
 
@@ -2066,22 +1946,17 @@ dns_name_copy(const dns_name_t *source, dns_name_t *dest) {
  * Service Discovery Prefixes RFC 6763.
  */
 static unsigned char b_dns_sd_udp_data[] = "\001b\007_dns-sd\004_udp";
-static unsigned char b_dns_sd_udp_offsets[] = { 0, 2, 10 };
 static unsigned char db_dns_sd_udp_data[] = "\002db\007_dns-sd\004_udp";
-static unsigned char db_dns_sd_udp_offsets[] = { 0, 3, 11 };
 static unsigned char r_dns_sd_udp_data[] = "\001r\007_dns-sd\004_udp";
-static unsigned char r_dns_sd_udp_offsets[] = { 0, 2, 10 };
 static unsigned char dr_dns_sd_udp_data[] = "\002dr\007_dns-sd\004_udp";
-static unsigned char dr_dns_sd_udp_offsets[] = { 0, 3, 11 };
 static unsigned char lb_dns_sd_udp_data[] = "\002lb\007_dns-sd\004_udp";
-static unsigned char lb_dns_sd_udp_offsets[] = { 0, 3, 11 };
 
 static dns_name_t const dns_sd[] = {
-       DNS_NAME_INITNONABSOLUTE(b_dns_sd_udp_data, b_dns_sd_udp_offsets),
-       DNS_NAME_INITNONABSOLUTE(db_dns_sd_udp_data, db_dns_sd_udp_offsets),
-       DNS_NAME_INITNONABSOLUTE(r_dns_sd_udp_data, r_dns_sd_udp_offsets),
-       DNS_NAME_INITNONABSOLUTE(dr_dns_sd_udp_data, dr_dns_sd_udp_offsets),
-       DNS_NAME_INITNONABSOLUTE(lb_dns_sd_udp_data, lb_dns_sd_udp_offsets)
+       DNS_NAME_INITNONABSOLUTE(b_dns_sd_udp_data, NULL),
+       DNS_NAME_INITNONABSOLUTE(db_dns_sd_udp_data, NULL),
+       DNS_NAME_INITNONABSOLUTE(r_dns_sd_udp_data, NULL),
+       DNS_NAME_INITNONABSOLUTE(dr_dns_sd_udp_data, NULL),
+       DNS_NAME_INITNONABSOLUTE(lb_dns_sd_udp_data, NULL)
 };
 
 bool
@@ -2102,10 +1977,6 @@ dns_name_isdnssd(const dns_name_t *name) {
        return false;
 }
 
-static unsigned char inaddr10_offsets[] = { 0, 3, 11, 16 };
-static unsigned char inaddr172_offsets[] = { 0, 3, 7, 15, 20 };
-static unsigned char inaddr192_offsets[] = { 0, 4, 8, 16, 21 };
-
 static unsigned char inaddr10[] = "\00210\007IN-ADDR\004ARPA";
 
 static unsigned char inaddr16172[] = "\00216\003172\007IN-ADDR\004ARPA";
@@ -2128,24 +1999,24 @@ static unsigned char inaddr31172[] = "\00231\003172\007IN-ADDR\004ARPA";
 static unsigned char inaddr168192[] = "\003168\003192\007IN-ADDR\004ARPA";
 
 static dns_name_t const rfc1918names[] = {
-       DNS_NAME_INITABSOLUTE(inaddr10, inaddr10_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr16172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr17172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr18172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr19172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr20172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr21172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr22172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr23172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr24172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr25172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr26172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr27172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr28172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr29172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr30172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr31172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr168192, inaddr192_offsets)
+       DNS_NAME_INITABSOLUTE(inaddr10, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr16172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr17172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr18172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr19172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr20172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr21172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr22172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr23172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr24172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr25172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr26172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr27172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr28172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr29172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr30172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr31172, NULL),
+       DNS_NAME_INITABSOLUTE(inaddr168192, NULL)
 };
 
 bool
@@ -2160,7 +2031,8 @@ dns_name_isrfc1918(const dns_name_t *name) {
        return false;
 }
 
-static unsigned char ulaoffsets[] = { 0, 2, 4, 8, 13 };
+static unsigned char
+       __attribute((__unused__)) ulaoffsets[] = { 0, 2, 4, 8, 13 };
 static unsigned char ip6fc[] = "\001c\001f\003ip6\004ARPA";
 static unsigned char ip6fd[] = "\001d\001f\003ip6\004ARPA";
 
@@ -2187,7 +2059,7 @@ dns_name_istat(const dns_name_t *name) {
 
        REQUIRE(DNS_NAME_VALID(name));
 
-       if (name->labels < 1) {
+       if (name->length == 0) {
                return false;
        }
 
@@ -2233,7 +2105,7 @@ dns_name_isdnssvcb(const dns_name_t *name) {
 
        REQUIRE(DNS_NAME_VALID(name));
 
-       if (name->labels < 1 || name->length < 5) {
+       if (name->length < 5) {
                return false;
        }
 
@@ -2245,7 +2117,7 @@ dns_name_isdnssvcb(const dns_name_t *name) {
        if (len < 2 || ndata[0] != '_') {
                return false;
        }
-       if (isdigit(ndata[1]) && name->labels > 1) {
+       if (isdigit(ndata[1]) && name->length > len + 1) {
                char buf[sizeof("65000")];
                long port;
                char *endp;
@@ -2283,7 +2155,6 @@ dns_name_isdnssvcb(const dns_name_t *name) {
 bool
 dns_name_israd(const dns_name_t *name, const dns_name_t *rad) {
        dns_name_t suffix;
-       dns_offsets_t offsets;
        char labelbuf[64];
        unsigned long v, last = ULONG_MAX;
        char *end, *l;
@@ -2291,7 +2162,10 @@ dns_name_israd(const dns_name_t *name, const dns_name_t *rad) {
        REQUIRE(DNS_NAME_VALID(name));
        REQUIRE(DNS_NAME_VALID(rad));
 
-       if (name->labels < rad->labels + 4U || name->length < 4U) {
+       uint8_t name_labels = dns_name_countlabels(name);
+       uint8_t rad_labels = dns_name_countlabels(rad);
+
+       if (name_labels < rad_labels + 4U || name->length < 4U) {
                return false;
        }
 
@@ -2301,8 +2175,8 @@ dns_name_israd(const dns_name_t *name, const dns_name_t *rad) {
                return false;
        }
 
-       dns_name_init(&suffix, offsets);
-       dns_name_split(name, rad->labels + 1, NULL, &suffix);
+       dns_name_init(&suffix, NULL);
+       dns_name_split(name, rad_labels + 1, NULL, &suffix);
 
        if (suffix.ndata[0] != 3 || suffix.ndata[1] != '_' ||
            tolower(suffix.ndata[2]) != 'e' || tolower(suffix.ndata[3]) != 'r')
@@ -2311,7 +2185,7 @@ dns_name_israd(const dns_name_t *name, const dns_name_t *rad) {
        }
 
        /* type list */
-       dns_name_split(name, name->labels - 1, NULL, &suffix);
+       dns_name_split(name, name_labels - 1, NULL, &suffix);
        INSIST(*suffix.ndata < sizeof(labelbuf));
        memmove(labelbuf, suffix.ndata + 1, *suffix.ndata);
        labelbuf[*suffix.ndata] = 0;
@@ -2334,7 +2208,7 @@ dns_name_israd(const dns_name_t *name, const dns_name_t *rad) {
        } while (*end != 0);
 
        /* extended error code */
-       dns_name_split(name, rad->labels + 2, NULL, &suffix);
+       dns_name_split(name, rad_labels + 2, NULL, &suffix);
        INSIST(*suffix.ndata < sizeof(labelbuf));
        memmove(labelbuf, suffix.ndata + 1, *suffix.ndata);
        labelbuf[*suffix.ndata] = 0;
@@ -2348,3 +2222,9 @@ dns_name_israd(const dns_name_t *name, const dns_name_t *rad) {
 
        return dns_name_issubdomain(name, rad);
 }
+
+uint8_t
+dns_name_offsets(const dns_name_t *name, uint8_t *offsets) {
+       REQUIRE(DNS_NAME_VALID(name));
+       return set_offsets(name, offsets, NULL);
+}
index 9b50bca34c89f6c64e00110a28f520bc48d9d1bd..3084c25ece2208f2f70bb443e3732c41747cf0de 100644 (file)
@@ -126,7 +126,7 @@ newnode(isc_mem_t *mctx, const dns_name_t *name) {
        isc_mem_attach(mctx, &node->mctx);
        isc_refcount_init(&node->references, 1);
 
-       dns_name_dupwithoffsets(name, mctx, &node->name);
+       dns_name_dup(name, mctx, &node->name);
 
        return node;
 }
index 43f663ce91c67f020eae17a8a9edd7a19df44b76..0a020821b89a4af0cb5ca32d3bde53506e6b8b48 100644 (file)
@@ -289,7 +289,7 @@ nta_create(dns_ntatable_t *ntatable, const dns_name_t *name,
 
        isc_refcount_init(&nta->references, 1);
 
-       dns_name_dupwithoffsets(name, nta->mctx, &nta->name);
+       dns_name_dup(name, nta->mctx, &nta->name);
 
        *target = nta;
 }
index f7f38afb25be7b73d841339f67a76e708badff12..5f1f13c02917637f57a8321d76adde971b694fc6 100644 (file)
@@ -215,26 +215,20 @@ dns__qp_shutdown(void) {
  */
 size_t
 dns_qpkey_fromname(dns_qpkey_t key, const dns_name_t *name) {
-       size_t len, label;
-       dns_fixedname_t fixed;
-
        REQUIRE(ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
 
-       if (name->labels == 0) {
+       dns_offsets_t offsets;
+       size_t labels = dns_name_offsets(name, offsets);
+
+       if (labels == 0) {
                key[0] = SHIFT_NOBYTE;
                return 0;
        }
 
-       if (name->offsets == NULL) {
-               dns_name_t *clone = dns_fixedname_initname(&fixed);
-               dns_name_clone(name, clone);
-               name = clone;
-       }
-
-       len = 0;
-       label = name->labels;
+       size_t len = 0;
+       size_t label = labels;
        while (label-- > 0) {
-               const uint8_t *ldata = name->ndata + name->offsets[label];
+               const uint8_t *ldata = name->ndata + offsets[label];
                size_t label_len = *ldata++;
                while (label_len-- > 0) {
                        uint16_t bits = dns_qp_bits_for_byte[*ldata++];
@@ -255,12 +249,11 @@ dns_qpkey_fromname(dns_qpkey_t key, const dns_name_t *name) {
 void
 dns_qpkey_toname(const dns_qpkey_t key, size_t keylen, dns_name_t *name) {
        size_t locs[DNS_NAME_MAXLABELS];
-       size_t loc = 0, opos = 0;
+       size_t loc = 0;
        size_t offset;
 
        REQUIRE(ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
        REQUIRE(name->buffer != NULL);
-       REQUIRE(name->offsets != NULL);
 
        dns_name_reset(name);
 
@@ -293,14 +286,15 @@ scanned:
         * we step backward through the label boundaries, then forward
         * through the labels, to create the DNS wire format data.
         */
-       name->labels = loc;
        while (loc-- > 0) {
                uint8_t len = 0, *lenp = NULL;
 
-               /* Add a length byte to the name data and set an offset */
+               /* Store the location of the length byte */
                lenp = isc_buffer_used(name->buffer);
+
+               /* Add a length byte to the name data */
                isc_buffer_putuint8(name->buffer, 0);
-               name->offsets[opos++] = name->length++;
+               name->length++;
 
                /* Convert from escaped byte ranges to ASCII */
                for (offset = locs[loc]; offset < locs[loc + 1] - 1; offset++) {
@@ -316,6 +310,8 @@ scanned:
                }
 
                name->length += len;
+
+               /* Write the final label length to the length byte */
                *lenp = len;
        }
 
@@ -323,8 +319,7 @@ scanned:
        if (key[0] == SHIFT_NOBYTE) {
                name->attributes.absolute = true;
                isc_buffer_putuint8(name->buffer, 0);
-               name->offsets[opos++] = name->length++;
-               name->labels++;
+               name->length++;
        }
 
        name->ndata = isc_buffer_base(name->buffer);
index ff3381c91f5802ff2fb86c63d01d407e1cf0a550..bc2fd005ebfec0ae2e188a5bae93b96f49686495 100644 (file)
@@ -2553,7 +2553,7 @@ new_qpcnode(qpcache_t *qpdb, const dns_name_t *name) {
        };
 
        isc_mem_attach(qpdb->common.mctx, &newdata->mctx);
-       dns_name_dupwithoffsets(name, newdata->mctx, &newdata->name);
+       dns_name_dup(name, newdata->mctx, &newdata->name);
 
 #ifdef DNS_DB_NODETRACE
        fprintf(stderr, "new_qpcnode:%s:%s:%d:%p->references = 1\n", __func__,
@@ -3493,7 +3493,7 @@ dns__qpcache_create(isc_mem_t *mctx, const dns_name_t *origin,
        /*
         * Make a copy of the origin name.
         */
-       dns_name_dupwithoffsets(origin, mctx, &qpdb->common.origin);
+       dns_name_dup(origin, mctx, &qpdb->common.origin);
 
        /*
         * Make the qp tries.
index dc2b3d073d1d9c4fcc84fa46fe106c53ea64ede5..4b336bc26ca1d5d1e9b7dec991dcdbe0678e7d07 100644 (file)
@@ -599,7 +599,7 @@ new_qpznode(qpzonedb_t *qpdb, const dns_name_t *name) {
        };
 
        isc_mem_attach(qpdb->common.mctx, &newdata->mctx);
-       dns_name_dupwithoffsets(name, qpdb->common.mctx, &newdata->name);
+       dns_name_dup(name, qpdb->common.mctx, &newdata->name);
 
 #if DNS_DB_NODETRACE
        fprintf(stderr, "new_qpznode:%s:%s:%d:%p->references = 1\n", __func__,
@@ -676,7 +676,7 @@ dns__qpzone_create(isc_mem_t *mctx, const dns_name_t *origin, dns_dbtype_t type,
        /*
         * Make a copy of the origin name.
         */
-       dns_name_dupwithoffsets(origin, mctx, &qpdb->common.origin);
+       dns_name_dup(origin, mctx, &qpdb->common.origin);
 
        dns_qpmulti_create(mctx, &qpmethods, qpdb, &qpdb->tree);
        dns_qpmulti_create(mctx, &qpmethods, qpdb, &qpdb->nsec);
@@ -2153,11 +2153,10 @@ static void
 wildcardmagic(qpzonedb_t *qpdb, dns_qp_t *qp, const dns_name_t *name) {
        isc_result_t result;
        dns_name_t foundname;
-       dns_offsets_t offsets;
        unsigned int n;
        qpznode_t *node = NULL;
 
-       dns_name_init(&foundname, offsets);
+       dns_name_init(&foundname, NULL);
        n = dns_name_countlabels(name);
        INSIST(n >= 2);
        n--;
@@ -2179,10 +2178,9 @@ wildcardmagic(qpzonedb_t *qpdb, dns_qp_t *qp, const dns_name_t *name) {
 static void
 addwildcards(qpzonedb_t *qpdb, dns_qp_t *qp, const dns_name_t *name) {
        dns_name_t foundname;
-       dns_offsets_t offsets;
        unsigned int n, l, i;
 
-       dns_name_init(&foundname, offsets);
+       dns_name_init(&foundname, NULL);
        n = dns_name_countlabels(name);
        l = dns_name_countlabels(&qpdb->common.origin);
        i = l + 1;
index 976b3c6d9c9ff175d2469abff337089e04fabf46..558ea00b03489d09362a240477e8e5ad6f2257ee 100644 (file)
@@ -343,10 +343,9 @@ generic_rdata_in_svcb_current(dns_rdata_in_svcb_t *, isc_region_t *);
  * Active Directory gc._msdcs.<forest> prefix.
  */
 static unsigned char gc_msdcs_data[] = "\002gc\006_msdcs";
-static unsigned char gc_msdcs_offset[] = { 0, 3 };
 
 static dns_name_t const gc_msdcs = DNS_NAME_INITNONABSOLUTE(gc_msdcs_data,
-                                                           gc_msdcs_offset);
+                                                           NULL);
 
 /*%
  *     convert presentation level address to network order binary form.
index 0d6704164a9755a42ebbda0b04ab9a771c8e61ba..8c38ba38e668e388f304a4ada1400120eb03bb52 100644 (file)
@@ -326,7 +326,6 @@ static isc_result_t
 towire_any_tsig(ARGS_TOWIRE) {
        isc_region_t sr;
        dns_name_t name;
-       dns_offsets_t offsets;
 
        REQUIRE(rdata->type == dns_rdatatype_tsig);
        REQUIRE(rdata->rdclass == dns_rdataclass_any);
@@ -334,7 +333,7 @@ towire_any_tsig(ARGS_TOWIRE) {
 
        dns_compress_setpermitted(cctx, false);
        dns_rdata_toregion(rdata, &sr);
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_fromregion(&name, &sr);
        RETERR(dns_name_towire(&name, cctx, target, NULL));
        isc_region_consume(&sr, name_length(&name));
index 814a4c9b6f929011dff7b47fdbe92fdcb98baa92..d3f253afe5c368e5ed97295c5423ff4cc8a15cb3 100644 (file)
@@ -131,7 +131,6 @@ fromwire_ch_a(ARGS_FROMWIRE) {
 static isc_result_t
 towire_ch_a(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t sregion;
        isc_region_t tregion;
 
@@ -141,7 +140,7 @@ towire_ch_a(ARGS_TOWIRE) {
 
        dns_compress_setpermitted(cctx, true);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
 
        dns_rdata_toregion(rdata, &sregion);
 
index 00c046cd3e291b60e5b5b475ea2d73009527bf5b..b2827f87260da0295dcbd27906ec0115f4773fce 100644 (file)
@@ -124,7 +124,6 @@ towire_afsdb(ARGS_TOWIRE) {
        isc_region_t tr;
        isc_region_t sr;
        dns_name_t name;
-       dns_offsets_t offsets;
 
        REQUIRE(rdata->type == dns_rdatatype_afsdb);
        REQUIRE(rdata->length != 0);
@@ -139,7 +138,7 @@ towire_afsdb(ARGS_TOWIRE) {
        isc_region_consume(&sr, 2);
        isc_buffer_add(target, 2);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_fromregion(&name, &sr);
 
        return dns_name_towire(&name, cctx, target, NULL);
@@ -244,14 +243,13 @@ freestruct_afsdb(ARGS_FREESTRUCT) {
 static isc_result_t
 additionaldata_afsdb(ARGS_ADDLDATA) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_afsdb);
 
        UNUSED(owner);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        isc_region_consume(&region, 2);
        dns_name_fromregion(&name, &region);
index 962117f9d718001b27044f9bb17b989f93f9d55e..b4ba0ddd894033ddfb4b24d91fa117c19ec957e7 100644 (file)
@@ -80,7 +80,6 @@ fromwire_cname(ARGS_FROMWIRE) {
 static isc_result_t
 towire_cname(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_cname);
@@ -88,7 +87,7 @@ towire_cname(ARGS_TOWIRE) {
 
        dns_compress_setpermitted(cctx, true);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        dns_name_fromregion(&name, &region);
 
index bb72c28a8572042c46a1ab5f549292981ac8aa47..1057a2b418b18d42d4bb9f06ef76af1375fcb0f9 100644 (file)
@@ -81,14 +81,13 @@ fromwire_dname(ARGS_FROMWIRE) {
 static isc_result_t
 towire_dname(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_dname);
        REQUIRE(rdata->length != 0);
 
        dns_compress_setpermitted(cctx, false);
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        dns_name_fromregion(&name, &region);
 
index c2c53d1ef48d2b01e072f7d8fb8748c376bfa7d7..3c416f2361ed59d978f4e69e02f3669a427baf1b 100644 (file)
@@ -190,7 +190,6 @@ freestruct_lp(ARGS_FREESTRUCT) {
 static isc_result_t
 additionaldata_lp(ARGS_ADDLDATA) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
        isc_result_t result;
 
@@ -198,7 +197,7 @@ additionaldata_lp(ARGS_ADDLDATA) {
 
        UNUSED(owner);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        isc_region_consume(&region, 2);
        dns_name_fromregion(&name, &region);
index 2823611a79c84f06dba00d5fc830f497f0ce7402..e2a7c1ef8ede78dc5d16856904228456723ced05 100644 (file)
@@ -79,7 +79,6 @@ fromwire_mb(ARGS_FROMWIRE) {
 static isc_result_t
 towire_mb(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_mb);
@@ -87,7 +86,7 @@ towire_mb(ARGS_TOWIRE) {
 
        dns_compress_setpermitted(cctx, true);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        dns_name_fromregion(&name, &region);
 
@@ -176,14 +175,13 @@ freestruct_mb(ARGS_FREESTRUCT) {
 static isc_result_t
 additionaldata_mb(ARGS_ADDLDATA) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_mb);
 
        UNUSED(owner);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        dns_name_fromregion(&name, &region);
 
index 471473ac78aa03ee8b13649bb8adb50f3e527ffb..247dbdbe19578ea15873ed3ca8145eae89ec9bd9 100644 (file)
@@ -79,7 +79,6 @@ fromwire_md(ARGS_FROMWIRE) {
 static isc_result_t
 towire_md(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_md);
@@ -87,7 +86,7 @@ towire_md(ARGS_TOWIRE) {
 
        dns_compress_setpermitted(cctx, true);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        dns_name_fromregion(&name, &region);
 
@@ -177,14 +176,13 @@ freestruct_md(ARGS_FREESTRUCT) {
 static isc_result_t
 additionaldata_md(ARGS_ADDLDATA) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_md);
 
        UNUSED(owner);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        dns_name_fromregion(&name, &region);
 
index 726534232c1645543733c15a944b0e5470728887..3f1606422f3584304ecd3ee7bd6d31b536c1657e 100644 (file)
@@ -79,7 +79,6 @@ fromwire_mf(ARGS_FROMWIRE) {
 static isc_result_t
 towire_mf(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_mf);
@@ -87,7 +86,7 @@ towire_mf(ARGS_TOWIRE) {
 
        dns_compress_setpermitted(cctx, true);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        dns_name_fromregion(&name, &region);
 
@@ -176,14 +175,13 @@ freestruct_mf(ARGS_FREESTRUCT) {
 static isc_result_t
 additionaldata_mf(ARGS_ADDLDATA) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_mf);
 
        UNUSED(owner);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        dns_name_fromregion(&name, &region);
 
index 26c2981b3c46d13de73e3f6319770750f3e856b2..97dc436115a945c7a2deae9e46664f0a8d28d350 100644 (file)
@@ -79,7 +79,6 @@ fromwire_mg(ARGS_FROMWIRE) {
 static isc_result_t
 towire_mg(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_mg);
@@ -87,7 +86,7 @@ towire_mg(ARGS_TOWIRE) {
 
        dns_compress_setpermitted(cctx, true);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        dns_name_fromregion(&name, &region);
 
index afd1160acaa57d7d6238e54a2f4480ff01ec640c..691e2691ff612421dbd9a373f288af0333ce78d9 100644 (file)
@@ -115,16 +115,14 @@ towire_minfo(ARGS_TOWIRE) {
        isc_region_t region;
        dns_name_t rmail;
        dns_name_t email;
-       dns_offsets_t roffsets;
-       dns_offsets_t eoffsets;
 
        REQUIRE(rdata->type == dns_rdatatype_minfo);
        REQUIRE(rdata->length != 0);
 
        dns_compress_setpermitted(cctx, true);
 
-       dns_name_init(&rmail, roffsets);
-       dns_name_init(&email, eoffsets);
+       dns_name_init(&rmail, NULL);
+       dns_name_init(&email, NULL);
 
        dns_rdata_toregion(rdata, &region);
 
index 6c1758d2126302bc2c45e34298c84cd31eaa08d5..b8b34089d78c330de615e1607374439f79b0b286 100644 (file)
@@ -79,7 +79,6 @@ fromwire_mr(ARGS_FROMWIRE) {
 static isc_result_t
 towire_mr(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_mr);
@@ -87,7 +86,7 @@ towire_mr(ARGS_TOWIRE) {
 
        dns_compress_setpermitted(cctx, true);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        dns_name_fromregion(&name, &region);
 
index 8baa31a29343ab439d0693cd78ab7b26328ca4a0..2a2032db0bbeaf299ff457e29a30b6c2d9f912f9 100644 (file)
@@ -151,7 +151,6 @@ fromwire_mx(ARGS_FROMWIRE) {
 static isc_result_t
 towire_mx(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_mx);
@@ -163,7 +162,7 @@ towire_mx(ARGS_TOWIRE) {
        RETERR(mem_tobuffer(target, region.base, 2));
        isc_region_consume(&region, 2);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_fromregion(&name, &region);
 
        return dns_name_towire(&name, cctx, target, NULL);
@@ -261,24 +260,21 @@ freestruct_mx(ARGS_FREESTRUCT) {
        mx->mctx = NULL;
 }
 
-static unsigned char port25_offset[] = { 0, 3 };
 static unsigned char port25_ndata[] = "\003_25\004_tcp";
-static dns_name_t port25 = DNS_NAME_INITNONABSOLUTE(port25_ndata,
-                                                   port25_offset);
+static dns_name_t port25 = DNS_NAME_INITNONABSOLUTE(port25_ndata, NULL);
 
 static isc_result_t
 additionaldata_mx(ARGS_ADDLDATA) {
        isc_result_t result;
        dns_fixedname_t fixed;
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_mx);
 
        UNUSED(owner);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        isc_region_consume(&region, 2);
        dns_name_fromregion(&name, &region);
index 2c1a5c777350c7a983e0ef5514f1fd6d70a7f5ed..9ea7ccd863d2919cb986623541253dc1ebdabc32 100644 (file)
@@ -352,7 +352,6 @@ fromwire_naptr(ARGS_FROMWIRE) {
 static isc_result_t
 towire_naptr(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t sr;
 
        REQUIRE(rdata->type == dns_rdatatype_naptr);
@@ -387,7 +386,7 @@ towire_naptr(ARGS_TOWIRE) {
        /*
         * Replacement.
         */
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_fromregion(&name, &sr);
        return dns_name_towire(&name, cctx, target, NULL);
 }
@@ -571,7 +570,6 @@ freestruct_naptr(ARGS_FREESTRUCT) {
 static isc_result_t
 additionaldata_naptr(ARGS_ADDLDATA) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t sr;
        dns_rdatatype_t atype;
        unsigned int i, flagslen;
@@ -618,7 +616,7 @@ additionaldata_naptr(ARGS_ADDLDATA) {
        /*
         * Replacement.
         */
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_fromregion(&name, &sr);
 
        if (atype != 0) {
index 1ddbd1b831c6ca5d38024b0619271bc04f17b9fa..fa70fbc888e2d8198e72912204dd0aa9a9779fb8 100644 (file)
@@ -90,7 +90,6 @@ fromwire_ns(ARGS_FROMWIRE) {
 static isc_result_t
 towire_ns(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_ns);
@@ -98,7 +97,7 @@ towire_ns(ARGS_TOWIRE) {
 
        dns_compress_setpermitted(cctx, true);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        dns_name_fromregion(&name, &region);
 
@@ -187,14 +186,13 @@ freestruct_ns(ARGS_FREESTRUCT) {
 static isc_result_t
 additionaldata_ns(ARGS_ADDLDATA) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_ns);
 
        UNUSED(owner);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        dns_name_fromregion(&name, &region);
 
index e8660e2b853e097e566532fb4c168d886342a5e2..0686e633ace3da01c5a83bfdfb6778ab7cc5bf71 100644 (file)
@@ -101,13 +101,12 @@ static isc_result_t
 towire_nsec(ARGS_TOWIRE) {
        isc_region_t sr;
        dns_name_t name;
-       dns_offsets_t offsets;
 
        REQUIRE(rdata->type == dns_rdatatype_nsec);
        REQUIRE(rdata->length != 0);
 
        dns_compress_setpermitted(cctx, false);
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &sr);
        dns_name_fromregion(&name, &sr);
        isc_region_consume(&sr, name_length(&name));
index 97019f9a55795cdacc5c259ca628fc80641f730e..f8df405771409257449d1b54e1d6ea65c9f936af 100644 (file)
@@ -164,13 +164,12 @@ static isc_result_t
 towire_nxt(ARGS_TOWIRE) {
        isc_region_t sr;
        dns_name_t name;
-       dns_offsets_t offsets;
 
        REQUIRE(rdata->type == dns_rdatatype_nxt);
        REQUIRE(rdata->length != 0);
 
        dns_compress_setpermitted(cctx, false);
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &sr);
        dns_name_fromregion(&name, &sr);
        isc_region_consume(&sr, name_length(&name));
index faf45aecf75033eb2ec3c09aa2b52e03c9e7e446..818320eec7238e78ea5c3310c378fb05ed945295 100644 (file)
@@ -92,7 +92,6 @@ fromwire_ptr(ARGS_FROMWIRE) {
 static isc_result_t
 towire_ptr(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_ptr);
@@ -100,7 +99,7 @@ towire_ptr(ARGS_TOWIRE) {
 
        dns_compress_setpermitted(cctx, true);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        dns_name_fromregion(&name, &region);
 
@@ -226,19 +225,14 @@ checkowner_ptr(ARGS_CHECKOWNER) {
 }
 
 static unsigned char ip6_arpa_data[] = "\003IP6\004ARPA";
-static unsigned char ip6_arpa_offsets[] = { 0, 4, 9 };
-static const dns_name_t ip6_arpa = DNS_NAME_INITABSOLUTE(ip6_arpa_data,
-                                                        ip6_arpa_offsets);
+static const dns_name_t ip6_arpa = DNS_NAME_INITABSOLUTE(ip6_arpa_data, NULL);
 
 static unsigned char ip6_int_data[] = "\003IP6\003INT";
-static unsigned char ip6_int_offsets[] = { 0, 4, 8 };
-static const dns_name_t ip6_int = DNS_NAME_INITABSOLUTE(ip6_int_data,
-                                                       ip6_int_offsets);
+static const dns_name_t ip6_int = DNS_NAME_INITABSOLUTE(ip6_int_data, NULL);
 
 static unsigned char in_addr_arpa_data[] = "\007IN-ADDR\004ARPA";
-static unsigned char in_addr_arpa_offsets[] = { 0, 8, 13 };
-static const dns_name_t in_addr_arpa =
-       DNS_NAME_INITABSOLUTE(in_addr_arpa_data, in_addr_arpa_offsets);
+static const dns_name_t in_addr_arpa = DNS_NAME_INITABSOLUTE(in_addr_arpa_data,
+                                                            NULL);
 
 static bool
 checknames_ptr(ARGS_CHECKNAMES) {
index c52d6c0e1fc6a51bf91896bd4cda5f333fc16ca9..516c30c3186584ad24842167b4e794e585311855 100644 (file)
@@ -117,15 +117,13 @@ towire_rp(ARGS_TOWIRE) {
        isc_region_t region;
        dns_name_t rmail;
        dns_name_t email;
-       dns_offsets_t roffsets;
-       dns_offsets_t eoffsets;
 
        REQUIRE(rdata->type == dns_rdatatype_rp);
        REQUIRE(rdata->length != 0);
 
        dns_compress_setpermitted(cctx, false);
-       dns_name_init(&rmail, roffsets);
-       dns_name_init(&email, eoffsets);
+       dns_name_init(&rmail, NULL);
+       dns_name_init(&email, NULL);
 
        dns_rdata_toregion(rdata, &region);
 
index b948f8bc86a2e8b76b336de77556557dc199ab64..67258d351d5b84af7fadb9bf24f650868c6cbe35 100644 (file)
@@ -353,7 +353,6 @@ static isc_result_t
 towire_rrsig(ARGS_TOWIRE) {
        isc_region_t sr;
        dns_name_t name;
-       dns_offsets_t offsets;
 
        REQUIRE(rdata->type == dns_rdatatype_rrsig);
        REQUIRE(rdata->length != 0);
@@ -375,7 +374,7 @@ towire_rrsig(ARGS_TOWIRE) {
        /*
         * Signer.
         */
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_fromregion(&name, &sr);
        isc_region_consume(&sr, name_length(&name));
        RETERR(dns_name_towire(&name, cctx, target, NULL));
index 4807e50c3449a3883e5b48d7180e4533f5b1d913..00e1a22a11194386220d6a8e05d3ef414207edf1 100644 (file)
@@ -119,7 +119,6 @@ fromwire_rt(ARGS_FROMWIRE) {
 static isc_result_t
 towire_rt(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
        isc_region_t tr;
 
@@ -136,7 +135,7 @@ towire_rt(ARGS_TOWIRE) {
        isc_region_consume(&region, 2);
        isc_buffer_add(target, 2);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_fromregion(&name, &region);
 
        return dns_name_towire(&name, cctx, target, NULL);
@@ -238,7 +237,6 @@ freestruct_rt(ARGS_FREESTRUCT) {
 static isc_result_t
 additionaldata_rt(ARGS_ADDLDATA) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
        isc_result_t result;
 
@@ -246,7 +244,7 @@ additionaldata_rt(ARGS_ADDLDATA) {
 
        UNUSED(owner);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        isc_region_consume(&region, 2);
        dns_name_fromregion(&name, &region);
index f96814913d8c192f42ce475e56bf8b799e699502..d9ef40d0d52030457db168259db1d6be41943d80 100644 (file)
@@ -317,7 +317,6 @@ static isc_result_t
 towire_sig(ARGS_TOWIRE) {
        isc_region_t sr;
        dns_name_t name;
-       dns_offsets_t offsets;
 
        REQUIRE(rdata->type == dns_rdatatype_sig);
        REQUIRE(rdata->length != 0);
@@ -339,7 +338,7 @@ towire_sig(ARGS_TOWIRE) {
        /*
         * Signer.
         */
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_fromregion(&name, &sr);
        isc_region_consume(&sr, name_length(&name));
        RETERR(dns_name_towire(&name, cctx, target, NULL));
index 1e8fa4ee0fa1c2c61cdfda20d1b5babf38be3331..bc806d68c4a5e8c2deeb2f3ef2f2fbe55c2f711b 100644 (file)
@@ -200,16 +200,14 @@ towire_soa(ARGS_TOWIRE) {
        isc_region_t tregion;
        dns_name_t mname;
        dns_name_t rname;
-       dns_offsets_t moffsets;
-       dns_offsets_t roffsets;
 
        REQUIRE(rdata->type == dns_rdatatype_soa);
        REQUIRE(rdata->length != 0);
 
        dns_compress_setpermitted(cctx, true);
 
-       dns_name_init(&mname, moffsets);
-       dns_name_init(&rname, roffsets);
+       dns_name_init(&mname, NULL);
+       dns_name_init(&rname, NULL);
 
        dns_rdata_toregion(rdata, &sregion);
 
index 5fd7ef3eedbf2e7a7681e53bd04ad1b92f6c9a2b..57b50aba4020bee64fac64de577ff0f547f5fe29 100644 (file)
@@ -104,16 +104,14 @@ towire_talink(ARGS_TOWIRE) {
        isc_region_t sregion;
        dns_name_t prev;
        dns_name_t next;
-       dns_offsets_t moffsets;
-       dns_offsets_t roffsets;
 
        REQUIRE(rdata->type == dns_rdatatype_talink);
        REQUIRE(rdata->length != 0);
 
        dns_compress_setpermitted(cctx, false);
 
-       dns_name_init(&prev, moffsets);
-       dns_name_init(&next, roffsets);
+       dns_name_init(&prev, NULL);
+       dns_name_init(&next, NULL);
 
        dns_rdata_toregion(rdata, &sregion);
 
index 5360b9e4674ee5c53ee5ee12d155688bc0042b99..22a6c2023020cc37a904a0f49802d425e13852bb 100644 (file)
@@ -309,7 +309,6 @@ static isc_result_t
 towire_tkey(ARGS_TOWIRE) {
        isc_region_t sr;
        dns_name_t name;
-       dns_offsets_t offsets;
 
        REQUIRE(rdata->type == dns_rdatatype_tkey);
        REQUIRE(rdata->length != 0);
@@ -319,7 +318,7 @@ towire_tkey(ARGS_TOWIRE) {
         * Algorithm.
         */
        dns_rdata_toregion(rdata, &sr);
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_fromregion(&name, &sr);
        RETERR(dns_name_towire(&name, cctx, target, NULL));
        isc_region_consume(&sr, name_length(&name));
index 018286f67d3ef7736187bf732a122cd061735534..5ef17aaf8dc31f3a35283451251db6ceece407d9 100644 (file)
@@ -204,7 +204,6 @@ static isc_result_t
 towire_in_a6(ARGS_TOWIRE) {
        isc_region_t sr;
        dns_name_t name;
-       dns_offsets_t offsets;
        unsigned char prefixlen;
        unsigned char octets;
 
@@ -225,7 +224,7 @@ towire_in_a6(ARGS_TOWIRE) {
                return ISC_R_SUCCESS;
        }
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_fromregion(&name, &sr);
        return dns_name_towire(&name, cctx, target, NULL);
 }
index 1328bc3b6ad17248258e8d798fc2c3b3e77f3c95..4c0cb564f8fa036d89fa17ece57520bb0c9dc4a3 100644 (file)
@@ -106,7 +106,6 @@ fromwire_in_kx(ARGS_FROMWIRE) {
 static isc_result_t
 towire_in_kx(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_kx);
@@ -118,7 +117,7 @@ towire_in_kx(ARGS_TOWIRE) {
        RETERR(mem_tobuffer(target, region.base, 2));
        isc_region_consume(&region, 2);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_fromregion(&name, &region);
 
        return dns_name_towire(&name, cctx, target, NULL);
@@ -225,7 +224,6 @@ freestruct_in_kx(ARGS_FREESTRUCT) {
 static isc_result_t
 additionaldata_in_kx(ARGS_ADDLDATA) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_kx);
@@ -233,7 +231,7 @@ additionaldata_in_kx(ARGS_ADDLDATA) {
 
        UNUSED(owner);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        isc_region_consume(&region, 2);
        dns_name_fromregion(&name, &region);
index 7ed384c9ef801ffd3793c32160409bf05de6563d..ac72c68e5def1fa399d44333a906a9d782f7af07 100644 (file)
@@ -84,7 +84,6 @@ fromwire_in_nsap_ptr(ARGS_FROMWIRE) {
 static isc_result_t
 towire_in_nsap_ptr(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_nsap_ptr);
@@ -92,7 +91,7 @@ towire_in_nsap_ptr(ARGS_TOWIRE) {
        REQUIRE(rdata->length != 0);
 
        dns_compress_setpermitted(cctx, false);
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        dns_name_fromregion(&name, &region);
 
index 6a3c99264559ee189e7504b71284e6e5918b787f..7b5a1fbc1e96c40e4ac096ddfa9cd043f3ce07ed 100644 (file)
@@ -149,7 +149,6 @@ fromwire_in_px(ARGS_FROMWIRE) {
 static isc_result_t
 towire_in_px(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->type == dns_rdatatype_px);
@@ -167,7 +166,7 @@ towire_in_px(ARGS_TOWIRE) {
        /*
         * MAP822.
         */
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_fromregion(&name, &region);
        RETERR(dns_name_towire(&name, cctx, target, NULL));
        isc_region_consume(&region, name_length(&name));
@@ -175,7 +174,7 @@ towire_in_px(ARGS_TOWIRE) {
        /*
         * MAPX400.
         */
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_fromregion(&name, &region);
        return dns_name_towire(&name, cctx, target, NULL);
 }
index 41c24381fd38379256fddad66f787161c2e6a7d9..dc89945702804be2607e695f2472096331fa796e 100644 (file)
@@ -173,7 +173,6 @@ fromwire_in_srv(ARGS_FROMWIRE) {
 static isc_result_t
 towire_in_srv(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t sr;
 
        REQUIRE(rdata->type == dns_rdatatype_srv);
@@ -190,7 +189,7 @@ towire_in_srv(ARGS_TOWIRE) {
        /*
         * Target.
         */
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_fromregion(&name, &sr);
        return dns_name_towire(&name, cctx, target, NULL);
 }
@@ -308,7 +307,6 @@ additionaldata_in_srv(ARGS_ADDLDATA) {
        char buf[sizeof("_65000._tcp")];
        dns_fixedname_t fixed;
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
        uint16_t port;
        isc_result_t result;
@@ -318,7 +316,7 @@ additionaldata_in_srv(ARGS_ADDLDATA) {
 
        UNUSED(owner);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        isc_region_consume(&region, 4);
        port = uint16_fromregion(&region);
index 99be9ad03ab06c9ad73d33c978b705933aa6d14a..25033ec704bdd4432485b0e53702f31b7a576bb0 100644 (file)
@@ -922,7 +922,6 @@ fromwire_in_svcb(ARGS_FROMWIRE) {
 static isc_result_t
 generic_towire_in_svcb(ARGS_TOWIRE) {
        dns_name_t name;
-       dns_offsets_t offsets;
        isc_region_t region;
 
        REQUIRE(rdata->length != 0);
@@ -939,7 +938,7 @@ generic_towire_in_svcb(ARGS_TOWIRE) {
        /*
         * TargetName.
         */
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_fromregion(&name, &region);
        RETERR(dns_name_towire(&name, cctx, target, NULL));
        isc_region_consume(&region, name_length(&name));
@@ -1084,12 +1083,11 @@ generic_additionaldata_in_svcb(ARGS_ADDLDATA) {
        bool alias, done = false;
        dns_fixedname_t fixed;
        dns_name_t name, *fname = NULL;
-       dns_offsets_t offsets;
        dns_rdataset_t rdataset;
        isc_region_t region;
        unsigned int cnames = 0;
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_rdata_toregion(rdata, &region);
        alias = uint16_fromregion(&region) == 0;
        isc_region_consume(&region, 2);
index 9655bfc85c7562bda59bfc172a0d62115592c5de..17acce6566b3945884366687921653993c04ba44 100644 (file)
@@ -632,9 +632,7 @@ dns_resolver_setfuzzing(void) {
 #endif /* ifdef ENABLE_AFL */
 
 static unsigned char ip6_arpa_data[] = "\003IP6\004ARPA";
-static unsigned char ip6_arpa_offsets[] = { 0, 4, 9 };
-static const dns_name_t ip6_arpa = DNS_NAME_INITABSOLUTE(ip6_arpa_data,
-                                                        ip6_arpa_offsets);
+static const dns_name_t ip6_arpa = DNS_NAME_INITABSOLUTE(ip6_arpa_data, NULL);
 
 static void
 dns_resolver__destroy(dns_resolver_t *res);
index 3e6333537fd3de6fd0f0bb79f9c46c9726db91fa..17442a103914e39ceabc7cde6f73188647c01252 100644 (file)
@@ -83,19 +83,18 @@ static char root_ns[] =
        "M.ROOT-SERVERS.NET.     3600000 IN      AAAA    2001:DC3::35\n";
 
 static unsigned char b_data[] = "\001b\014root-servers\003net";
-static unsigned char b_offsets[] = { 0, 2, 15, 19 };
 
 static struct upcoming {
        const dns_name_t name;
        dns_rdatatype_t type;
        isc_stdtime_t time;
 } upcoming[] = { {
-                        .name = DNS_NAME_INITABSOLUTE(b_data, b_offsets),
+                        .name = DNS_NAME_INITABSOLUTE(b_data, NULL),
                         .type = dns_rdatatype_a,
                         .time = 1701086400 /* November 27 2023, 12:00 UTC */
                 },
                 {
-                        .name = DNS_NAME_INITABSOLUTE(b_data, b_offsets),
+                        .name = DNS_NAME_INITABSOLUTE(b_data, NULL),
                         .type = dns_rdatatype_aaaa,
                         .time = 1701086400 /* November 27 2023, 12:00 UTC */
                 } };
index bd736895b9f13b7d27ee9d1394236a4fbd0c232b..5e1f2fc294d6ebb8d88dce9df10509e28303e47b 100644 (file)
@@ -861,7 +861,6 @@ name2ipkey(int log_level, dns_rpz_zone_t *rpz, dns_rpz_type_t rpz_type,
           const dns_name_t *src_name, dns_rpz_cidr_key_t *tgt_ip,
           dns_rpz_prefix_t *tgt_prefix, dns_rpz_addr_zbits_t *new_set) {
        char ip_str[DNS_NAME_FORMATSIZE];
-       dns_offsets_t ip_name_offsets;
        dns_fixedname_t ip_name2f;
        dns_name_t ip_name;
        const char *prefix_str = NULL, *cp = NULL, *end = NULL;
@@ -887,7 +886,7 @@ name2ipkey(int log_level, dns_rpz_zone_t *rpz, dns_rpz_type_t rpz_type,
                badname(log_level, src_name, "; too short", "");
                return ISC_R_FAILURE;
        }
-       dns_name_init(&ip_name, ip_name_offsets);
+       dns_name_init(&ip_name, NULL);
        dns_name_getlabelsequence(src_name, 0, ip_labels, &ip_name);
 
        /*
@@ -1042,7 +1041,6 @@ static void
 name2data(dns_rpz_zone_t *rpz, dns_rpz_type_t rpz_type,
          const dns_name_t *src_name, dns_name_t *trig_name,
          nmdata_t *new_data) {
-       dns_offsets_t tmp_name_offsets;
        dns_name_t tmp_name;
        unsigned int prefix_len, n;
 
@@ -1064,7 +1062,7 @@ name2data(dns_rpz_zone_t *rpz, dns_rpz_type_t rpz_type,
                memset(&new_data->wild, 0, sizeof(new_data->wild));
        }
 
-       dns_name_init(&tmp_name, tmp_name_offsets);
+       dns_name_init(&tmp_name, NULL);
        n = dns_name_countlabels(src_name);
        n -= prefix_len;
        if (rpz_type == DNS_RPZ_TYPE_QNAME) {
@@ -1406,7 +1404,7 @@ new_nmdata(isc_mem_t *mctx, const dns_name_t *name, const nmdata_t *data) {
                .name = DNS_NAME_INITEMPTY,
                .references = ISC_REFCOUNT_INITIALIZER(1),
        };
-       dns_name_dupwithoffsets(name, mctx, &newdata->name);
+       dns_name_dup(name, mctx, &newdata->name);
        isc_mem_attach(mctx, &newdata->mctx);
 
 #ifdef DNS_RPZ_TRACE
index 6442a3c0773e30b88ac5de44116bead56c9e5828..e9fa6171a3fdf1166e2ddaa5d5555891e1ddb37a 100644 (file)
@@ -416,7 +416,7 @@ make_key(const dns_rrl_t *rrl, dns_rrl_key_t *key,
                key->s.qclass = qclass & 0xff;
        }
 
-       if (qname != NULL && qname->labels != 0) {
+       if (qname != NULL && qname->length != 0) {
                dns_name_t *origin = NULL;
 
                if (qname->attributes.wildcard && zone != NULL &&
index 83d8764b84eb87ec439f0b657e6d9f75ec9bbdef..180658e803ab738e94d8c62779afb177289c1373 100644 (file)
@@ -1375,7 +1375,7 @@ dns_sdlzcreateDBP(isc_mem_t *mctx, void *driverarg, void *dbdata,
 
        /* initialize and set origin */
        dns_name_init(&sdlzdb->common.origin, NULL);
-       dns_name_dupwithoffsets(name, mctx, &sdlzdb->common.origin);
+       dns_name_dup(name, mctx, &sdlzdb->common.origin);
 
        isc_refcount_init(&sdlzdb->common.references, 1);
 
index 6564e580d351862c7d666f7f226743f2eb71b22b..94304f6b0849b3d4f5dddc15b79624d8b6d2b51d 100644 (file)
 #define BADTIMELEN 6
 
 static unsigned char hmacmd5_ndata[] = "\010hmac-md5\007sig-alg\003reg\003int";
-static unsigned char hmacmd5_offsets[] = { 0, 9, 17, 21, 25 };
 
-static dns_name_t const hmacmd5 = DNS_NAME_INITABSOLUTE(hmacmd5_ndata,
-                                                       hmacmd5_offsets);
+static dns_name_t const hmacmd5 = DNS_NAME_INITABSOLUTE(hmacmd5_ndata, NULL);
 const dns_name_t *dns_tsig_hmacmd5_name = &hmacmd5;
 
 static unsigned char gsstsig_ndata[] = "\010gss-tsig";
-static unsigned char gsstsig_offsets[] = { 0, 9 };
-static dns_name_t const gsstsig = DNS_NAME_INITABSOLUTE(gsstsig_ndata,
-                                                       gsstsig_offsets);
+static dns_name_t const gsstsig = DNS_NAME_INITABSOLUTE(gsstsig_ndata, NULL);
 const dns_name_t *dns_tsig_gssapi_name = &gsstsig;
 
 static unsigned char hmacsha1_ndata[] = "\011hmac-sha1";
-static unsigned char hmacsha1_offsets[] = { 0, 10 };
-static dns_name_t const hmacsha1 = DNS_NAME_INITABSOLUTE(hmacsha1_ndata,
-                                                        hmacsha1_offsets);
+static dns_name_t const hmacsha1 = DNS_NAME_INITABSOLUTE(hmacsha1_ndata, NULL);
 const dns_name_t *dns_tsig_hmacsha1_name = &hmacsha1;
 
 static unsigned char hmacsha224_ndata[] = "\013hmac-sha224";
-static unsigned char hmacsha224_offsets[] = { 0, 12 };
 static dns_name_t const hmacsha224 = DNS_NAME_INITABSOLUTE(hmacsha224_ndata,
-                                                          hmacsha224_offsets);
+                                                          NULL);
 const dns_name_t *dns_tsig_hmacsha224_name = &hmacsha224;
 
 static unsigned char hmacsha256_ndata[] = "\013hmac-sha256";
-static unsigned char hmacsha256_offsets[] = { 0, 12 };
 static dns_name_t const hmacsha256 = DNS_NAME_INITABSOLUTE(hmacsha256_ndata,
-                                                          hmacsha256_offsets);
+                                                          NULL);
 const dns_name_t *dns_tsig_hmacsha256_name = &hmacsha256;
 
 static unsigned char hmacsha384_ndata[] = "\013hmac-sha384";
-static unsigned char hmacsha384_offsets[] = { 0, 12 };
 static dns_name_t const hmacsha384 = DNS_NAME_INITABSOLUTE(hmacsha384_ndata,
-                                                          hmacsha384_offsets);
+                                                          NULL);
 const dns_name_t *dns_tsig_hmacsha384_name = &hmacsha384;
 
 static unsigned char hmacsha512_ndata[] = "\013hmac-sha512";
-static unsigned char hmacsha512_offsets[] = { 0, 12 };
 static dns_name_t const hmacsha512 = DNS_NAME_INITABSOLUTE(hmacsha512_ndata,
-                                                          hmacsha512_offsets);
+                                                          NULL);
 const dns_name_t *dns_tsig_hmacsha512_name = &hmacsha512;
 
 static const struct {
index 9c3eafb95dd6bffb79af96ff120e4db872c87cbe..01116eeeefcac4ec2f2d7eb2b5b220ca9a0b3a38 100644 (file)
@@ -4858,9 +4858,8 @@ process_zone_setnsec3param(dns_zone_t *zone) {
        }
 }
 
-static unsigned char er_offset[] = { 0, 1 };
 static unsigned char er_ndata[] = "\001*\003_er";
-static dns_name_t er = DNS_NAME_INITNONABSOLUTE(er_ndata, er_offset);
+static dns_name_t er = DNS_NAME_INITNONABSOLUTE(er_ndata, NULL);
 
 static isc_result_t
 check_reportchannel(dns_zone_t *zone, dns_db_t *db) {
index 022a6de7e84ce369ad12a4dc9b183f1467849f47..1f927a65876ecfd89eea47c25834787ce0c4d3cf 100644 (file)
@@ -3139,7 +3139,6 @@ rpz_rrset_find(ns_client_t *client, dns_name_t *name, dns_rdatatype_t type,
 static isc_result_t
 rpz_get_p_name(ns_client_t *client, dns_name_t *p_name, dns_rpz_zone_t *rpz,
               dns_rpz_type_t rpz_type, dns_name_t *trig_name) {
-       dns_offsets_t prefix_offsets;
        dns_name_t prefix, *suffix;
        unsigned int first, labels;
        isc_result_t result;
@@ -3176,7 +3175,7 @@ rpz_get_p_name(ns_client_t *client, dns_name_t *p_name, dns_rpz_zone_t *rpz,
         * Start with relative version of the full trigger name,
         * and trim enough allow the addition of the suffix.
         */
-       dns_name_init(&prefix, prefix_offsets);
+       dns_name_init(&prefix, NULL);
        labels = dns_name_countlabels(trig_name);
        first = 0;
        for (;;) {
@@ -4404,10 +4403,6 @@ rpz_ck_dnssec(ns_client_t *client, isc_result_t qresult,
        return true;
 }
 
-static unsigned char inaddr10_offsets[] = { 0, 3, 11, 16 };
-static unsigned char inaddr172_offsets[] = { 0, 3, 7, 15, 20 };
-static unsigned char inaddr192_offsets[] = { 0, 4, 8, 16, 21 };
-
 static unsigned char inaddr10[] = "\00210\007IN-ADDR\004ARPA";
 
 static unsigned char inaddr16172[] = "\00216\003172\007IN-ADDR\004ARPA";
@@ -4429,38 +4424,33 @@ static unsigned char inaddr31172[] = "\00231\003172\007IN-ADDR\004ARPA";
 
 static unsigned char inaddr168192[] = "\003168\003192\007IN-ADDR\004ARPA";
 
-static dns_name_t rfc1918names[] = {
-       DNS_NAME_INITABSOLUTE(inaddr10, inaddr10_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr16172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr17172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr18172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr19172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr20172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr21172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr22172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr23172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr24172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr25172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr26172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr27172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr28172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr29172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr30172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr31172, inaddr172_offsets),
-       DNS_NAME_INITABSOLUTE(inaddr168192, inaddr192_offsets)
-};
+static dns_name_t rfc1918names[] = { DNS_NAME_INITABSOLUTE(inaddr10, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr16172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr17172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr18172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr19172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr20172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr21172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr22172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr23172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr24172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr25172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr26172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr27172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr28172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr29172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr30172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr31172, NULL),
+                                    DNS_NAME_INITABSOLUTE(inaddr168192,
+                                                          NULL) };
 
 static unsigned char prisoner_data[] = "\010prisoner\004iana\003org";
 static unsigned char hostmaster_data[] = "\012hostmaster\014root-"
                                         "servers\003org";
 
-static unsigned char prisoner_offsets[] = { 0, 9, 14, 18 };
-static unsigned char hostmaster_offsets[] = { 0, 11, 24, 28 };
-
-static dns_name_t const prisoner = DNS_NAME_INITABSOLUTE(prisoner_data,
-                                                        prisoner_offsets);
+static dns_name_t const prisoner = DNS_NAME_INITABSOLUTE(prisoner_data, NULL);
 static dns_name_t const hostmaster = DNS_NAME_INITABSOLUTE(hostmaster_data,
-                                                          hostmaster_offsets);
+                                                          NULL);
 
 static void
 warn_rfc1918(ns_client_t *client, dns_name_t *fname, dns_rdataset_t *rdataset) {
index 86772841ad25e0437ce1353b7e19a37917b1bc4e..ca9aa0ac3a0a31082ed694b5b5125b9efd37a13e 100644 (file)
@@ -31,6 +31,7 @@
 #include <dns/qp.h>
 #include <dns/types.h>
 
+#include "dns/name.h"
 #include "qp_p.h"
 
 #include <tests/dns.h>
@@ -475,7 +476,7 @@ main(int argc, char *argv[]) {
                FILE_CHECK(result == ISC_R_SUCCESS, isc_result_totext(result));
 
                wirebytes += name->length;
-               labels += name->labels;
+               labels += dns_name_countlabels(name);
                lines++;
        }
 
index 5356511a132dacfbb49bd57637fde374e48d4f16..612a5b0446bf9783db7ae8db3a134f38407a42fa 100644 (file)
@@ -26,6 +26,8 @@
 #include <dns/qp.h>
 #include <dns/types.h>
 
+#include "dns/name.h"
+
 #include <tests/dns.h>
 #include <tests/qp.h>
 
@@ -52,19 +54,14 @@ smallname_ndata(void *pval, uint32_t ival) {
        return (uint8_t *)(smallname_refcount(pval, ival) + 1);
 }
 
-static inline uint8_t *
-smallname_offsets(void *pval, uint32_t ival) {
-       return smallname_ndata(pval, ival) + smallname_length(pval, ival);
-}
-
 static void
 smallname_from_name(const dns_name_t *name, void **valp, uint32_t *ctxp) {
-       size_t size = sizeof(isc_refcount_t) + name->length + name->labels;
+       uint8_t labels = dns_name_countlabels(name);
+       size_t size = sizeof(isc_refcount_t) + name->length + labels;
        *valp = isc_mem_get(mctx, size);
-       *ctxp = name->labels << 8 | name->length;
+       *ctxp = labels << 8 | name->length;
        isc_refcount_init(smallname_refcount(*valp, *ctxp), 0);
        memmove(smallname_ndata(*valp, *ctxp), name->ndata, name->length);
-       memmove(smallname_offsets(*valp, *ctxp), name->offsets, name->labels);
 }
 
 static void
@@ -79,10 +76,8 @@ name_from_smallname(dns_name_t *name, void *pval, uint32_t ival) {
        dns_name_reset(name);
        name->ndata = smallname_ndata(pval, ival);
        name->length = smallname_length(pval, ival);
-       name->labels = smallname_labels(pval, ival);
-       name->offsets = smallname_offsets(pval, ival);
        name->attributes.readonly = true;
-       if (name->ndata[name->offsets[name->labels - 1]] == '\0') {
+       if (name->ndata[name->length - 1] == '\0') {
                name->attributes.absolute = true;
        }
 }
@@ -225,7 +220,7 @@ main(int argc, char *argv[]) {
                }
 
                wirebytes += name->length;
-               labels += name->labels;
+               labels += dns_name_countlabels(name);
                names += 1;
        }
        dns_qp_compact(qp, DNS_QPGC_ALL);
index 12421c22f8f02489d9d2ef6499fea42ccd4c3b55..23130caedd0f3a87e903343b5dd100014b77c258 100644 (file)
 #include <dns/qp.h>
 #include <dns/types.h>
 
+#include "dns/name.h"
+
 #include <tests/dns.h>
 #include <tests/qp.h>
 
 static inline size_t
 smallname_length(void *pval, uint32_t ival) {
        UNUSED(pval);
-       return ival & 0xff;
-}
-
-static inline size_t
-smallname_labels(void *pval, uint32_t ival) {
-       UNUSED(pval);
-       return ival >> 8;
+       return ival;
 }
 
 static inline isc_refcount_t *
@@ -53,25 +49,19 @@ smallname_ndata(void *pval, uint32_t ival) {
        return (uint8_t *)(smallname_refcount(pval, ival) + 1);
 }
 
-static inline uint8_t *
-smallname_offsets(void *pval, uint32_t ival) {
-       return smallname_ndata(pval, ival) + smallname_length(pval, ival);
-}
-
 static void
 smallname_from_name(const dns_name_t *name, void **valp, uint32_t *ctxp) {
-       size_t size = sizeof(isc_refcount_t) + name->length + name->labels;
+       size_t size = sizeof(isc_refcount_t) + name->length;
        *valp = isc_mem_get(mctx, size);
-       *ctxp = name->labels << 8 | name->length;
+       *ctxp = name->length;
        isc_refcount_init(smallname_refcount(*valp, *ctxp), 0);
        memmove(smallname_ndata(*valp, *ctxp), name->ndata, name->length);
-       memmove(smallname_offsets(*valp, *ctxp), name->offsets, name->labels);
 }
 
 static void
 smallname_free(void *pval, uint32_t ival) {
        size_t size = sizeof(isc_refcount_t);
-       size += smallname_length(pval, ival) + smallname_labels(pval, ival);
+       size += smallname_length(pval, ival);
        isc_mem_put(mctx, pval, size);
 }
 
@@ -80,10 +70,8 @@ name_from_smallname(dns_name_t *name, void *pval, uint32_t ival) {
        dns_name_reset(name);
        name->ndata = smallname_ndata(pval, ival);
        name->length = smallname_length(pval, ival);
-       name->labels = smallname_labels(pval, ival);
-       name->offsets = smallname_offsets(pval, ival);
        name->attributes.readonly = true;
-       if (name->ndata[name->offsets[name->labels - 1]] == '\0') {
+       if (name->ndata[name->length - 1] == '\0') {
                name->attributes.absolute = true;
        }
 }
index ec93bb8c29bd5f505742ae7db15a064a11848c2a..d7c4b24d06d2905ed453b76361efbcbc26f897bf 100644 (file)
 #include <tests/dns.h>
 
 unsigned char data_1[] = "\006name_1";
-unsigned char offsets_1[] = { 0, 7 };
-dns_name_t name_1 = DNS_NAME_INITABSOLUTE(data_1, offsets_1);
+dns_name_t name_1 = DNS_NAME_INITABSOLUTE(data_1, NULL);
 
 unsigned char data_2[] = "\006name_2";
-unsigned char offsets_2[] = { 0, 7 };
-dns_name_t name_2 = DNS_NAME_INITABSOLUTE(data_2, offsets_2);
+dns_name_t name_2 = DNS_NAME_INITABSOLUTE(data_2, NULL);
 
 unsigned char data_3[] = "\006name_3";
-unsigned char offsets_3[] = { 0, 7 };
-dns_name_t name_3 = DNS_NAME_INITABSOLUTE(data_3, offsets_3);
+dns_name_t name_3 = DNS_NAME_INITABSOLUTE(data_3, NULL);
 
 unsigned char data_dup[] = "\006name_1";
-unsigned char offsets_dup[] = { 0, 7 };
-dns_name_t name_dup = DNS_NAME_INITABSOLUTE(data_dup, offsets_dup);
+dns_name_t name_dup = DNS_NAME_INITABSOLUTE(data_dup, NULL);
 
 unsigned char data_nodup[] = "\006name_1";
-unsigned char offsets_nodup[] = { 0, 7 };
-dns_name_t name_nodup = DNS_NAME_INITABSOLUTE(data_nodup, offsets_nodup);
+dns_name_t name_nodup = DNS_NAME_INITABSOLUTE(data_nodup, NULL);
 
 static size_t
 count_elements(const dns_diff_t *diff) {
index 8f159b9d278dd1b3f58673d37fcf09e30d5ba93a..da7f072604426d6ea7db0d4e7bc8d201639bea1a 100644 (file)
@@ -109,7 +109,9 @@ ISC_RUN_TEST_IMPL(fullcompare) {
                relation = dns_name_fullcompare(name1, name1, &order, &nlabels);
                assert_int_equal(relation, dns_namereln_equal);
                assert_int_equal(order, 0);
-               assert_int_equal(nlabels, name1->labels);
+
+               uint8_t labels = dns_name_countlabels(name1);
+               assert_int_equal(nlabels, labels);
 
                /* Some random initializer */
                order = 3001;
@@ -390,11 +392,10 @@ ISC_RUN_TEST_IMPL(collision) {
        uint8_t msgbuf[65536];
        dns_name_t name;
        char namebuf[256];
-       uint8_t offsets[128];
 
        dns_compress_init(&cctx, mctx, DNS_COMPRESS_LARGE);
        isc_buffer_init(&message, msgbuf, sizeof(msgbuf));
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
 
        /*
         * compression offsets are not allowed to be zero so our
@@ -565,26 +566,21 @@ ISC_RUN_TEST_IMPL(istat) {
 static bool
 name_attr_zero(struct dns_name_attrs attributes) {
        return !(attributes.absolute | attributes.readonly |
-                attributes.dynamic | attributes.dynoffsets |
-                attributes.nocompress | attributes.cache | attributes.answer |
-                attributes.ncache | attributes.chaining | attributes.chase |
-                attributes.wildcard | attributes.prerequisite |
-                attributes.update | attributes.hasupdaterec);
+                attributes.dynamic | attributes.nocompress | attributes.cache |
+                attributes.answer | attributes.ncache | attributes.chaining |
+                attributes.chase | attributes.wildcard |
+                attributes.prerequisite | attributes.update |
+                attributes.hasupdaterec);
 }
 
 /* dns_name_init */
 ISC_RUN_TEST_IMPL(init) {
        dns_name_t name;
-       unsigned char offsets[1];
-
-       UNUSED(state);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
 
        assert_null(name.ndata);
        assert_int_equal(name.length, 0);
-       assert_int_equal(name.labels, 0);
-       assert_ptr_equal(name.offsets, offsets);
        assert_null(name.buffer);
        assert_true(name_attr_zero(name.attributes));
 }
@@ -592,17 +588,12 @@ ISC_RUN_TEST_IMPL(init) {
 /* dns_name_invalidate */
 ISC_RUN_TEST_IMPL(invalidate) {
        dns_name_t name;
-       unsigned char offsets[1];
-
-       UNUSED(state);
 
-       dns_name_init(&name, offsets);
+       dns_name_init(&name, NULL);
        dns_name_invalidate(&name);
 
        assert_null(name.ndata);
        assert_int_equal(name.length, 0);
-       assert_int_equal(name.labels, 0);
-       assert_null(name.offsets);
        assert_null(name.buffer);
        assert_true(name_attr_zero(name.attributes));
 }