diff --git a/bin/named/builtin.c b/bin/named/builtin.c index 797c9505d2..1964ae5ccd 100644 --- a/bin/named/builtin.c +++ b/bin/named/builtin.c @@ -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) { diff --git a/bin/nsupdate/nsupdate.c b/bin/nsupdate/nsupdate.c index 93e05a30fa..56949181a9 100644 --- a/bin/nsupdate/nsupdate.c +++ b/bin/nsupdate/nsupdate.c @@ -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(); } diff --git a/bin/tests/system/dyndb/driver/db.c b/bin/tests/system/dyndb/driver/db.c index 99f5c7531d..06c22a8c35 100644 --- a/bin/tests/system/dyndb/driver/db.c +++ b/bin/tests/system/dyndb/driver/db.c @@ -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); diff --git a/doc/dev/dev.md b/doc/dev/dev.md index 330ee672b6..51fec89944 100644 --- a/doc/dev/dev.md +++ b/doc/dev/dev.md @@ -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 diff --git a/fuzz/dns_name_fromwire.c b/fuzz/dns_name_fromwire.c index 4bbe4c28b2..0ec8f8710d 100644 --- a/fuzz/dns_name_fromwire.c +++ b/fuzz/dns_name_fromwire.c @@ -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); diff --git a/fuzz/old.c b/fuzz/old.c index 9ee32a52ac..6f0400ff9b 100644 --- a/fuzz/old.c +++ b/fuzz/old.c @@ -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; diff --git a/lib/dns/catz.c b/lib/dns/catz.c index 39a81e1ef5..0f4e529f23 100644 --- a/lib/dns/catz.c +++ b/lib/dns/catz.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -34,6 +35,8 @@ #include #include +#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; diff --git a/lib/dns/compress.c b/lib/dns/compress.c index 626d91b620..9490d2a7f7 100644 --- a/lib/dns/compress.c +++ b/lib/dns/compress.c @@ -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; } diff --git a/lib/dns/fixedname.c b/lib/dns/fixedname.c index d24996e5e7..1bdc4a057e 100644 --- a/lib/dns/fixedname.c +++ b/lib/dns/fixedname.c @@ -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); } diff --git a/lib/dns/forward.c b/lib/dns/forward.c index e7bb86e650..b4bb66e0b2 100644 --- a/lib/dns/forward.c +++ b/lib/dns/forward.c @@ -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; } diff --git a/lib/dns/include/dns/fixedname.h b/lib/dns/include/dns/fixedname.h index 95ce7e0836..ce3e735177 100644 --- a/lib/dns/include/dns/fixedname.h +++ b/lib/dns/include/dns/fixedname.h @@ -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]; }; diff --git a/lib/dns/include/dns/message.h b/lib/dns/include/dns/message.h index 4e65d9414b..a467ea447f 100644 --- a/lib/dns/include/dns/message.h +++ b/lib/dns/include/dns/message.h @@ -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; diff --git a/lib/dns/include/dns/name.h b/lib/dns/include/dns/name.h index 68e4bc495e..5fd89a6cbf 100644 --- a/lib/dns/include/dns/name.h +++ b/lib/dns/include/dns/name.h @@ -67,6 +67,7 @@ #include #include +#include #include #include #include @@ -95,12 +96,10 @@ 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); /*%< diff --git a/lib/dns/keytable.c b/lib/dns/keytable.c index 159740aa74..0a95f235f0 100644 --- a/lib/dns/keytable.c +++ b/lib/dns/keytable.c @@ -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. diff --git a/lib/dns/master.c b/lib/dns/master.c index e5982f14e4..8bd88bc898 100644 --- a/lib/dns/master.c +++ b/lib/dns/master.c @@ -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) { diff --git a/lib/dns/message.c b/lib/dns/message.c index 661dd40ce1..cbd18d3c8a 100644 --- a/lib/dns/message.c +++ b/lib/dns/message.c @@ -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; /* diff --git a/lib/dns/name.c b/lib/dns/name.c index 4ac40ae0de..04d708bccc 100644 --- a/lib/dns/name.c +++ b/lib/dns/name.c @@ -17,8 +17,10 @@ #include #include #include +#include #include +#include #include #include #include @@ -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); +} diff --git a/lib/dns/nametree.c b/lib/dns/nametree.c index 9b50bca34c..3084c25ece 100644 --- a/lib/dns/nametree.c +++ b/lib/dns/nametree.c @@ -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; } diff --git a/lib/dns/nta.c b/lib/dns/nta.c index 43f663ce91..0a020821b8 100644 --- a/lib/dns/nta.c +++ b/lib/dns/nta.c @@ -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; } diff --git a/lib/dns/qp.c b/lib/dns/qp.c index f7f38afb25..5f1f13c029 100644 --- a/lib/dns/qp.c +++ b/lib/dns/qp.c @@ -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); diff --git a/lib/dns/qpcache.c b/lib/dns/qpcache.c index ff3381c91f..bc2fd005eb 100644 --- a/lib/dns/qpcache.c +++ b/lib/dns/qpcache.c @@ -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. diff --git a/lib/dns/qpzone.c b/lib/dns/qpzone.c index dc2b3d073d..4b336bc26c 100644 --- a/lib/dns/qpzone.c +++ b/lib/dns/qpzone.c @@ -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; diff --git a/lib/dns/rdata.c b/lib/dns/rdata.c index 976b3c6d9c..558ea00b03 100644 --- a/lib/dns/rdata.c +++ b/lib/dns/rdata.c @@ -343,10 +343,9 @@ generic_rdata_in_svcb_current(dns_rdata_in_svcb_t *, isc_region_t *); * Active Directory gc._msdcs. 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. diff --git a/lib/dns/rdata/any_255/tsig_250.c b/lib/dns/rdata/any_255/tsig_250.c index 0d6704164a..8c38ba38e6 100644 --- a/lib/dns/rdata/any_255/tsig_250.c +++ b/lib/dns/rdata/any_255/tsig_250.c @@ -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)); diff --git a/lib/dns/rdata/ch_3/a_1.c b/lib/dns/rdata/ch_3/a_1.c index 814a4c9b6f..d3f253afe5 100644 --- a/lib/dns/rdata/ch_3/a_1.c +++ b/lib/dns/rdata/ch_3/a_1.c @@ -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); diff --git a/lib/dns/rdata/generic/afsdb_18.c b/lib/dns/rdata/generic/afsdb_18.c index 00c046cd3e..b2827f8726 100644 --- a/lib/dns/rdata/generic/afsdb_18.c +++ b/lib/dns/rdata/generic/afsdb_18.c @@ -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, ®ion); isc_region_consume(®ion, 2); dns_name_fromregion(&name, ®ion); diff --git a/lib/dns/rdata/generic/cname_5.c b/lib/dns/rdata/generic/cname_5.c index 962117f9d7..b4ba0ddd89 100644 --- a/lib/dns/rdata/generic/cname_5.c +++ b/lib/dns/rdata/generic/cname_5.c @@ -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, ®ion); dns_name_fromregion(&name, ®ion); diff --git a/lib/dns/rdata/generic/dname_39.c b/lib/dns/rdata/generic/dname_39.c index bb72c28a85..1057a2b418 100644 --- a/lib/dns/rdata/generic/dname_39.c +++ b/lib/dns/rdata/generic/dname_39.c @@ -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, ®ion); dns_name_fromregion(&name, ®ion); diff --git a/lib/dns/rdata/generic/lp_107.c b/lib/dns/rdata/generic/lp_107.c index c2c53d1ef4..3c416f2361 100644 --- a/lib/dns/rdata/generic/lp_107.c +++ b/lib/dns/rdata/generic/lp_107.c @@ -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, ®ion); isc_region_consume(®ion, 2); dns_name_fromregion(&name, ®ion); diff --git a/lib/dns/rdata/generic/mb_7.c b/lib/dns/rdata/generic/mb_7.c index 2823611a79..e2a7c1ef8e 100644 --- a/lib/dns/rdata/generic/mb_7.c +++ b/lib/dns/rdata/generic/mb_7.c @@ -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, ®ion); dns_name_fromregion(&name, ®ion); @@ -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, ®ion); dns_name_fromregion(&name, ®ion); diff --git a/lib/dns/rdata/generic/md_3.c b/lib/dns/rdata/generic/md_3.c index 471473ac78..247dbdbe19 100644 --- a/lib/dns/rdata/generic/md_3.c +++ b/lib/dns/rdata/generic/md_3.c @@ -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, ®ion); dns_name_fromregion(&name, ®ion); @@ -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, ®ion); dns_name_fromregion(&name, ®ion); diff --git a/lib/dns/rdata/generic/mf_4.c b/lib/dns/rdata/generic/mf_4.c index 726534232c..3f1606422f 100644 --- a/lib/dns/rdata/generic/mf_4.c +++ b/lib/dns/rdata/generic/mf_4.c @@ -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, ®ion); dns_name_fromregion(&name, ®ion); @@ -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, ®ion); dns_name_fromregion(&name, ®ion); diff --git a/lib/dns/rdata/generic/mg_8.c b/lib/dns/rdata/generic/mg_8.c index 26c2981b3c..97dc436115 100644 --- a/lib/dns/rdata/generic/mg_8.c +++ b/lib/dns/rdata/generic/mg_8.c @@ -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, ®ion); dns_name_fromregion(&name, ®ion); diff --git a/lib/dns/rdata/generic/minfo_14.c b/lib/dns/rdata/generic/minfo_14.c index afd1160aca..691e2691ff 100644 --- a/lib/dns/rdata/generic/minfo_14.c +++ b/lib/dns/rdata/generic/minfo_14.c @@ -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, ®ion); diff --git a/lib/dns/rdata/generic/mr_9.c b/lib/dns/rdata/generic/mr_9.c index 6c1758d212..b8b34089d7 100644 --- a/lib/dns/rdata/generic/mr_9.c +++ b/lib/dns/rdata/generic/mr_9.c @@ -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, ®ion); dns_name_fromregion(&name, ®ion); diff --git a/lib/dns/rdata/generic/mx_15.c b/lib/dns/rdata/generic/mx_15.c index 8baa31a293..2a2032db0b 100644 --- a/lib/dns/rdata/generic/mx_15.c +++ b/lib/dns/rdata/generic/mx_15.c @@ -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(®ion, 2); - dns_name_init(&name, offsets); + dns_name_init(&name, NULL); dns_name_fromregion(&name, ®ion); 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, ®ion); isc_region_consume(®ion, 2); dns_name_fromregion(&name, ®ion); diff --git a/lib/dns/rdata/generic/naptr_35.c b/lib/dns/rdata/generic/naptr_35.c index 2c1a5c7773..9ea7ccd863 100644 --- a/lib/dns/rdata/generic/naptr_35.c +++ b/lib/dns/rdata/generic/naptr_35.c @@ -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) { diff --git a/lib/dns/rdata/generic/ns_2.c b/lib/dns/rdata/generic/ns_2.c index 1ddbd1b831..fa70fbc888 100644 --- a/lib/dns/rdata/generic/ns_2.c +++ b/lib/dns/rdata/generic/ns_2.c @@ -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, ®ion); dns_name_fromregion(&name, ®ion); @@ -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, ®ion); dns_name_fromregion(&name, ®ion); diff --git a/lib/dns/rdata/generic/nsec_47.c b/lib/dns/rdata/generic/nsec_47.c index e8660e2b85..0686e633ac 100644 --- a/lib/dns/rdata/generic/nsec_47.c +++ b/lib/dns/rdata/generic/nsec_47.c @@ -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)); diff --git a/lib/dns/rdata/generic/nxt_30.c b/lib/dns/rdata/generic/nxt_30.c index 97019f9a55..f8df405771 100644 --- a/lib/dns/rdata/generic/nxt_30.c +++ b/lib/dns/rdata/generic/nxt_30.c @@ -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)); diff --git a/lib/dns/rdata/generic/ptr_12.c b/lib/dns/rdata/generic/ptr_12.c index faf45aecf7..818320eec7 100644 --- a/lib/dns/rdata/generic/ptr_12.c +++ b/lib/dns/rdata/generic/ptr_12.c @@ -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, ®ion); dns_name_fromregion(&name, ®ion); @@ -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) { diff --git a/lib/dns/rdata/generic/rp_17.c b/lib/dns/rdata/generic/rp_17.c index c52d6c0e1f..516c30c318 100644 --- a/lib/dns/rdata/generic/rp_17.c +++ b/lib/dns/rdata/generic/rp_17.c @@ -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, ®ion); diff --git a/lib/dns/rdata/generic/rrsig_46.c b/lib/dns/rdata/generic/rrsig_46.c index b948f8bc86..67258d351d 100644 --- a/lib/dns/rdata/generic/rrsig_46.c +++ b/lib/dns/rdata/generic/rrsig_46.c @@ -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)); diff --git a/lib/dns/rdata/generic/rt_21.c b/lib/dns/rdata/generic/rt_21.c index 4807e50c34..00e1a22a11 100644 --- a/lib/dns/rdata/generic/rt_21.c +++ b/lib/dns/rdata/generic/rt_21.c @@ -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(®ion, 2); isc_buffer_add(target, 2); - dns_name_init(&name, offsets); + dns_name_init(&name, NULL); dns_name_fromregion(&name, ®ion); 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, ®ion); isc_region_consume(®ion, 2); dns_name_fromregion(&name, ®ion); diff --git a/lib/dns/rdata/generic/sig_24.c b/lib/dns/rdata/generic/sig_24.c index f96814913d..d9ef40d0d5 100644 --- a/lib/dns/rdata/generic/sig_24.c +++ b/lib/dns/rdata/generic/sig_24.c @@ -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)); diff --git a/lib/dns/rdata/generic/soa_6.c b/lib/dns/rdata/generic/soa_6.c index 1e8fa4ee0f..bc806d68c4 100644 --- a/lib/dns/rdata/generic/soa_6.c +++ b/lib/dns/rdata/generic/soa_6.c @@ -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); diff --git a/lib/dns/rdata/generic/talink_58.c b/lib/dns/rdata/generic/talink_58.c index 5fd7ef3eed..57b50aba40 100644 --- a/lib/dns/rdata/generic/talink_58.c +++ b/lib/dns/rdata/generic/talink_58.c @@ -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); diff --git a/lib/dns/rdata/generic/tkey_249.c b/lib/dns/rdata/generic/tkey_249.c index 5360b9e467..22a6c20230 100644 --- a/lib/dns/rdata/generic/tkey_249.c +++ b/lib/dns/rdata/generic/tkey_249.c @@ -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)); diff --git a/lib/dns/rdata/in_1/a6_38.c b/lib/dns/rdata/in_1/a6_38.c index 018286f67d..5ef17aaf8d 100644 --- a/lib/dns/rdata/in_1/a6_38.c +++ b/lib/dns/rdata/in_1/a6_38.c @@ -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); } diff --git a/lib/dns/rdata/in_1/kx_36.c b/lib/dns/rdata/in_1/kx_36.c index 1328bc3b6a..4c0cb564f8 100644 --- a/lib/dns/rdata/in_1/kx_36.c +++ b/lib/dns/rdata/in_1/kx_36.c @@ -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(®ion, 2); - dns_name_init(&name, offsets); + dns_name_init(&name, NULL); dns_name_fromregion(&name, ®ion); 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, ®ion); isc_region_consume(®ion, 2); dns_name_fromregion(&name, ®ion); diff --git a/lib/dns/rdata/in_1/nsap-ptr_23.c b/lib/dns/rdata/in_1/nsap-ptr_23.c index 7ed384c9ef..ac72c68e5d 100644 --- a/lib/dns/rdata/in_1/nsap-ptr_23.c +++ b/lib/dns/rdata/in_1/nsap-ptr_23.c @@ -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, ®ion); dns_name_fromregion(&name, ®ion); diff --git a/lib/dns/rdata/in_1/px_26.c b/lib/dns/rdata/in_1/px_26.c index 6a3c992645..7b5a1fbc1e 100644 --- a/lib/dns/rdata/in_1/px_26.c +++ b/lib/dns/rdata/in_1/px_26.c @@ -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, ®ion); RETERR(dns_name_towire(&name, cctx, target, NULL)); isc_region_consume(®ion, 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, ®ion); return dns_name_towire(&name, cctx, target, NULL); } diff --git a/lib/dns/rdata/in_1/srv_33.c b/lib/dns/rdata/in_1/srv_33.c index 41c24381fd..dc89945702 100644 --- a/lib/dns/rdata/in_1/srv_33.c +++ b/lib/dns/rdata/in_1/srv_33.c @@ -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, ®ion); isc_region_consume(®ion, 4); port = uint16_fromregion(®ion); diff --git a/lib/dns/rdata/in_1/svcb_64.c b/lib/dns/rdata/in_1/svcb_64.c index 99be9ad03a..25033ec704 100644 --- a/lib/dns/rdata/in_1/svcb_64.c +++ b/lib/dns/rdata/in_1/svcb_64.c @@ -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, ®ion); RETERR(dns_name_towire(&name, cctx, target, NULL)); isc_region_consume(®ion, 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, ®ion); alias = uint16_fromregion(®ion) == 0; isc_region_consume(®ion, 2); diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 9655bfc85c..17acce6566 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -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); diff --git a/lib/dns/rootns.c b/lib/dns/rootns.c index 3e6333537f..17442a1039 100644 --- a/lib/dns/rootns.c +++ b/lib/dns/rootns.c @@ -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 */ } }; diff --git a/lib/dns/rpz.c b/lib/dns/rpz.c index bd736895b9..5e1f2fc294 100644 --- a/lib/dns/rpz.c +++ b/lib/dns/rpz.c @@ -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 diff --git a/lib/dns/rrl.c b/lib/dns/rrl.c index 6442a3c077..e9fa6171a3 100644 --- a/lib/dns/rrl.c +++ b/lib/dns/rrl.c @@ -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 && diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c index 83d8764b84..180658e803 100644 --- a/lib/dns/sdlz.c +++ b/lib/dns/sdlz.c @@ -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); diff --git a/lib/dns/tsig.c b/lib/dns/tsig.c index 6564e580d3..94304f6b08 100644 --- a/lib/dns/tsig.c +++ b/lib/dns/tsig.c @@ -50,46 +50,36 @@ #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 { diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 9c3eafb95d..01116eeeef 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -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) { diff --git a/lib/ns/query.c b/lib/ns/query.c index 022a6de7e8..1f927a6587 100644 --- a/lib/ns/query.c +++ b/lib/ns/query.c @@ -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) { diff --git a/tests/bench/load-names.c b/tests/bench/load-names.c index 86772841ad..ca9aa0ac3a 100644 --- a/tests/bench/load-names.c +++ b/tests/bench/load-names.c @@ -31,6 +31,7 @@ #include #include +#include "dns/name.h" #include "qp_p.h" #include @@ -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++; } diff --git a/tests/bench/qp-dump.c b/tests/bench/qp-dump.c index 5356511a13..612a5b0446 100644 --- a/tests/bench/qp-dump.c +++ b/tests/bench/qp-dump.c @@ -26,6 +26,8 @@ #include #include +#include "dns/name.h" + #include #include @@ -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); diff --git a/tests/bench/qplookups.c b/tests/bench/qplookups.c index 12421c22f8..23130caedd 100644 --- a/tests/bench/qplookups.c +++ b/tests/bench/qplookups.c @@ -27,19 +27,15 @@ #include #include +#include "dns/name.h" + #include #include 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; } } diff --git a/tests/dns/diff_test.c b/tests/dns/diff_test.c index ec93bb8c29..d7c4b24d06 100644 --- a/tests/dns/diff_test.c +++ b/tests/dns/diff_test.c @@ -32,24 +32,19 @@ #include 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) { diff --git a/tests/dns/name_test.c b/tests/dns/name_test.c index 8f159b9d27..da7f072604 100644 --- a/tests/dns/name_test.c +++ b/tests/dns/name_test.c @@ -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)); }