From fd25be31f0591dd77badccffaa09b096fb93bee0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Mon, 11 Sep 2023 08:23:52 +0200 Subject: [PATCH] Cleanup the dns_name macros 1. Replace the "high-performance" macros that were only used if DNS_NAME_USEINLINE was defined before including with inline header functions with assertion checks and thus use them everywhere. 2. Replace the old struct initializers with C99 designated initializers for better understanding what is happening in these macros. --- lib/dns/compress.c | 2 - lib/dns/include/dns/name.h | 211 +++++++++++++++++---------------- lib/dns/name.c | 231 ++++++++++--------------------------- lib/dns/rbt.c | 2 - 4 files changed, 166 insertions(+), 280 deletions(-) diff --git a/lib/dns/compress.c b/lib/dns/compress.c index 2fbdf212f5..8951c4945f 100644 --- a/lib/dns/compress.c +++ b/lib/dns/compress.c @@ -11,8 +11,6 @@ * information regarding copyright ownership. */ -#define DNS_NAME_USEINLINE 1 - #include #include #include diff --git a/lib/dns/include/dns/name.h b/lib/dns/include/dns/name.h index 9e4216b561..d0d92bbe51 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 /* Required for storage size of dns_label_t. */ @@ -120,7 +121,15 @@ struct dns_name { ISC_LIST(dns_rdataset_t) list; }; -#define DNS_NAME_MAGIC ISC_MAGIC('D', 'N', 'S', 'n') +#define DNS_NAME_MAGIC ISC_MAGIC('D', 'N', 'S', 'n') +#define DNS_NAME_VALID(n) ISC_MAGIC_VALID(n, DNS_NAME_MAGIC) + +/*% + * A name is "bindable" if it can be set to point to a new value, i.e. + * name->ndata and name->length may be changed. + */ +#define DNS_NAME_BINDABLE(name) \ + (!name->attributes.readonly && !name->attributes.dynamic) /* * Various flags. @@ -155,30 +164,27 @@ extern const dns_name_t *dns_wildcardname; * unsigned char offsets[] = { 0, 6 }; * dns_name_t value = DNS_NAME_INITABSOLUTE(data, offsets); */ -#define DNS_NAME_INITNONABSOLUTE(A, B) \ - { \ - DNS_NAME_MAGIC, A, (sizeof(A) - 1), sizeof(B), \ - { .readonly = true }, B, NULL, \ - { (void *)-1, (void *)-1 }, { \ - NULL, NULL \ - } \ +#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_INITABSOLUTE(A, B) \ - { \ - DNS_NAME_MAGIC, A, sizeof(A), sizeof(B), \ - { .readonly = true, .absolute = true }, B, NULL, \ - { (void *)-1, (void *)-1 }, { \ - NULL, NULL \ - } \ +#define DNS_NAME_INITABSOLUTE(A, B) \ + { \ + .magic = DNS_NAME_MAGIC, .ndata = A, .length = sizeof(A), \ + .labels = sizeof(B), \ + .attributes = { .readonly = true, .absolute = true }, \ + .offsets = B, .link = ISC_LINK_INITIALIZER, \ + .list = ISC_LIST_INITIALIZER, \ } -#define DNS_NAME_INITEMPTY \ - { \ - DNS_NAME_MAGIC, NULL, 0, 0, {}, NULL, NULL, \ - { (void *)-1, (void *)-1 }, { \ - NULL, NULL \ - } \ +#define DNS_NAME_INITEMPTY \ + { \ + .magic = DNS_NAME_MAGIC, .link = ISC_LINK_INITIALIZER, \ + .list = ISC_LIST_INITIALIZER \ } /*% @@ -202,8 +208,15 @@ typedef isc_result_t(dns_name_totextfilter_t)(isc_buffer_t *target, *** Initialization ***/ -void -dns_name_init(dns_name_t *name, unsigned char *offsets); +static inline void +dns_name_init(dns_name_t *name, unsigned char *offsets) { + *name = (dns_name_t){ + .magic = DNS_NAME_MAGIC, + .offsets = (offsets), + .link = ISC_LINK_INITIALIZER, + .list = ISC_LIST_INITIALIZER, + }; +} /*%< * Initialize 'name'. * @@ -223,8 +236,19 @@ dns_name_init(dns_name_t *name, unsigned char *offsets); * \li dns_name_isabsolute(name) == false */ -void -dns_name_reset(dns_name_t *name); +static inline void +dns_name_reset(dns_name_t *name) { + REQUIRE(DNS_NAME_VALID(name)); + REQUIRE(DNS_NAME_BINDABLE(name)); + + name->ndata = NULL; + name->length = 0; + name->labels = 0; + name->attributes.absolute = false; + if (name->buffer != NULL) { + isc_buffer_clear(name->buffer); + } +} /*%< * Reinitialize 'name'. * @@ -248,8 +272,19 @@ dns_name_reset(dns_name_t *name); * \li dns_name_isabsolute(name) == false */ -void -dns_name_invalidate(dns_name_t *name); +static inline void +dns_name_invalidate(dns_name_t *name) { + REQUIRE(DNS_NAME_VALID(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); +} /*%< * Make 'name' invalid. * @@ -273,8 +308,13 @@ dns_name_isvalid(const dns_name_t *name); *** Dedicated Buffers ***/ -void -dns_name_setbuffer(dns_name_t *name, isc_buffer_t *buffer); +static inline void +dns_name_setbuffer(dns_name_t *name, isc_buffer_t *buffer) { + REQUIRE(DNS_NAME_VALID(name)); + REQUIRE((buffer != NULL && name->buffer == NULL) || (buffer == NULL)); + + name->buffer = buffer; +} /*%< * Dedicate a buffer for use with 'name'. * @@ -549,8 +589,13 @@ dns_name_matcheswildcard(const dns_name_t *name, const dns_name_t *wname); *** Labels ***/ -unsigned int -dns_name_countlabels(const dns_name_t *name); +static inline unsigned int +dns_name_countlabels(const dns_name_t *name) { + REQUIRE(DNS_NAME_VALID(name)); + REQUIRE(name->labels <= DNS_NAME_MAXLABELS); + + return (name->labels); +} /*%< * How many labels does 'name' have? * @@ -655,8 +700,14 @@ dns_name_fromregion(dns_name_t *name, const isc_region_t *r); * \li The data in 'r' is a sequence of one or more type 00 labels. */ -void -dns_name_toregion(const dns_name_t *name, isc_region_t *r); +static inline void +dns_name_toregion(const dns_name_t *name, isc_region_t *r) { + REQUIRE(DNS_NAME_VALID(name)); + REQUIRE(r != NULL); + + r->base = name->ndata; + r->length = name->length; +} /*%< * Make 'r' refer to 'name'. * @@ -946,9 +997,27 @@ dns_name_concatenate(const dns_name_t *prefix, const dns_name_t *suffix, *\li #DNS_R_NAMETOOLONG */ -void +static inline void dns_name_split(const dns_name_t *name, unsigned int suffixlabels, - dns_name_t *prefix, dns_name_t *suffix); + 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))); + + if (prefix != NULL) { + dns_name_getlabelsequence(name, 0, name->labels - suffixlabels, + prefix); + } + if (suffix != NULL) { + dns_name_getlabelsequence(name, name->labels - suffixlabels, + suffixlabels, suffix); + } +} /*%< * * Split 'name' into two pieces on a label boundary. @@ -1269,75 +1338,3 @@ dns_name_isdnssvcb(const dns_name_t *name); */ ISC_LANG_ENDDECLS - -/* - *** High Performance Macros - ***/ - -/* - * WARNING: Use of these macros by applications may require recompilation - * of the application in some situations where calling the function - * would not. - * - * WARNING: No assertion checking is done for these macros. - */ - -#define DNS_NAME_INIT(n, o) \ - do { \ - dns_name_t *_n = (n); \ - /* memset(_n, 0, sizeof(*_n)); */ \ - _n->magic = DNS_NAME_MAGIC; \ - _n->ndata = NULL; \ - _n->length = 0; \ - _n->labels = 0; \ - _n->attributes = (struct dns_name_attrs){}; \ - _n->offsets = (o); \ - _n->buffer = NULL; \ - ISC_LINK_INIT(_n, link); \ - ISC_LIST_INIT(_n->list); \ - } while (0) - -#define DNS_NAME_RESET(n) \ - do { \ - (n)->ndata = NULL; \ - (n)->length = 0; \ - (n)->labels = 0; \ - (n)->attributes.absolute = false; \ - if ((n)->buffer != NULL) \ - isc_buffer_clear((n)->buffer); \ - } while (0) - -#define DNS_NAME_SETBUFFER(n, b) (n)->buffer = (b) - -#define DNS_NAME_COUNTLABELS(n) ((n)->labels) - -#define DNS_NAME_TOREGION(n, r) \ - do { \ - (r)->base = (n)->ndata; \ - (r)->length = (n)->length; \ - } while (0) - -#define DNS_NAME_SPLIT(n, l, p, s) \ - do { \ - dns_name_t *_n = (n); \ - dns_name_t *_p = (p); \ - dns_name_t *_s = (s); \ - unsigned int _l = (l); \ - if (_p != NULL) \ - dns_name_getlabelsequence(_n, 0, _n->labels - _l, _p); \ - if (_s != NULL) \ - dns_name_getlabelsequence(_n, _n->labels - _l, _l, \ - _s); \ - } while (0) - -#ifdef DNS_NAME_USEINLINE - -#define dns_name_init(n, o) DNS_NAME_INIT(n, o) -#define dns_name_reset(n) DNS_NAME_RESET(n) -#define dns_name_setbuffer(n, b) DNS_NAME_SETBUFFER(n, b) -#define dns_name_countlabels(n) DNS_NAME_COUNTLABELS(n) -#define dns_name_isabsolute(n) ((n)->attributes.absolute) -#define dns_name_toregion(n, r) DNS_NAME_TOREGION(n, r) -#define dns_name_split(n, l, p, s) DNS_NAME_SPLIT(n, l, p, s) - -#endif /* DNS_NAME_USEINLINE */ diff --git a/lib/dns/name.c b/lib/dns/name.c index 318b80b7dc..6149a11445 100644 --- a/lib/dns/name.c +++ b/lib/dns/name.c @@ -34,8 +34,6 @@ #include #include -#define VALID_NAME(n) ISC_MAGIC_VALID(n, DNS_NAME_MAGIC) - typedef enum { ft_init = 0, ft_start, @@ -72,12 +70,6 @@ typedef enum { name->attributes.absolute = false; \ } while (0); -/*% - * A name is "bindable" if it can be set to point to a new value, i.e. - * name->ndata and name->length may be changed. - */ -#define BINDABLE(name) (!name->attributes.readonly && !name->attributes.dynamic) - /*% * Note that the name data must be a char array, not a string * literal, to avoid compiler warnings about discarding @@ -106,46 +98,12 @@ static void set_offsets(const dns_name_t *name, unsigned char *offsets, dns_name_t *set_name); -void -dns_name_init(dns_name_t *name, unsigned char *offsets) { - /* - * Initialize 'name'. - */ - DNS_NAME_INIT(name, offsets); -} - -void -dns_name_reset(dns_name_t *name) { - REQUIRE(VALID_NAME(name)); - REQUIRE(BINDABLE(name)); - - DNS_NAME_RESET(name); -} - -void -dns_name_invalidate(dns_name_t *name) { - /* - * Make 'name' invalid. - */ - - REQUIRE(VALID_NAME(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); -} - bool dns_name_isvalid(const dns_name_t *name) { unsigned char *ndata, *offsets; unsigned int offset, count, length, nlabels; - if (!VALID_NAME(name)) { + if (!DNS_NAME_VALID(name)) { return (false); } @@ -189,25 +147,13 @@ dns_name_isvalid(const dns_name_t *name) { return (true); } -void -dns_name_setbuffer(dns_name_t *name, isc_buffer_t *buffer) { - /* - * Dedicate a buffer for use with 'name'. - */ - - REQUIRE(VALID_NAME(name)); - REQUIRE((buffer != NULL && name->buffer == NULL) || (buffer == NULL)); - - name->buffer = buffer; -} - bool dns_name_hasbuffer(const dns_name_t *name) { /* * Does 'name' have a dedicated buffer? */ - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); if (name->buffer != NULL) { return (true); @@ -222,7 +168,7 @@ dns_name_isabsolute(const dns_name_t *name) { * Does 'name' end in the root label? */ - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); return name->attributes.absolute; } @@ -242,7 +188,7 @@ dns_name_ismailbox(const dns_name_t *name) { unsigned int n; bool first; - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); REQUIRE(name->labels > 0); REQUIRE(name->attributes.absolute); @@ -297,7 +243,7 @@ dns_name_ishostname(const dns_name_t *name, bool wildcard) { unsigned int n; bool first; - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); REQUIRE(name->labels > 0); REQUIRE(name->attributes.absolute); @@ -348,7 +294,7 @@ dns_name_iswildcard(const dns_name_t *name) { * Is 'name' a wildcard name? */ - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); REQUIRE(name->labels > 0); if (name->length >= 2) { @@ -371,7 +317,7 @@ dns_name_internalwildcard(const dns_name_t *name) { * Does 'name' contain a internal wildcard? */ - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); REQUIRE(name->labels > 0); /* @@ -399,7 +345,7 @@ dns_name_internalwildcard(const dns_name_t *name) { uint32_t dns_name_hash(const dns_name_t *name) { - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); return (isc_hash32(name->ndata, name->length, false)); } @@ -425,8 +371,8 @@ dns_name_fullcompare(const dns_name_t *name1, const dns_name_t *name2, * same domain. */ - REQUIRE(VALID_NAME(name1)); - REQUIRE(VALID_NAME(name2)); + REQUIRE(DNS_NAME_VALID(name1)); + REQUIRE(DNS_NAME_VALID(name2)); REQUIRE(orderp != NULL); REQUIRE(nlabelsp != NULL); /* @@ -538,8 +484,8 @@ dns_name_equal(const dns_name_t *name1, const dns_name_t *name2) { * same domain. */ - REQUIRE(VALID_NAME(name1)); - REQUIRE(VALID_NAME(name2)); + REQUIRE(DNS_NAME_VALID(name1)); + REQUIRE(DNS_NAME_VALID(name2)); /* * Either name1 is absolute and name2 is absolute, or neither is. */ @@ -569,8 +515,8 @@ dns_name_caseequal(const dns_name_t *name1, const dns_name_t *name2) { * same domain. */ - REQUIRE(VALID_NAME(name1)); - REQUIRE(VALID_NAME(name2)); + REQUIRE(DNS_NAME_VALID(name1)); + REQUIRE(DNS_NAME_VALID(name2)); /* * Either name1 is absolute and name2 is absolute, or neither is. */ @@ -593,10 +539,10 @@ dns_name_rdatacompare(const dns_name_t *name1, const dns_name_t *name2) { * Compare two absolute names as rdata. */ - REQUIRE(VALID_NAME(name1)); + REQUIRE(DNS_NAME_VALID(name1)); REQUIRE(name1->labels > 0); REQUIRE(name1->attributes.absolute); - REQUIRE(VALID_NAME(name2)); + REQUIRE(DNS_NAME_VALID(name2)); REQUIRE(name2->labels > 0); REQUIRE(name2->attributes.absolute); @@ -636,14 +582,14 @@ dns_name_matcheswildcard(const dns_name_t *name, const dns_name_t *wname) { unsigned int nlabels, labels; dns_name_t tname; - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); REQUIRE(name->labels > 0); - REQUIRE(VALID_NAME(wname)); + REQUIRE(DNS_NAME_VALID(wname)); labels = wname->labels; REQUIRE(labels > 0); REQUIRE(dns_name_iswildcard(wname)); - DNS_NAME_INIT(&tname, NULL); + dns_name_init(&tname, NULL); dns_name_getlabelsequence(wname, 1, labels - 1, &tname); if (dns_name_fullcompare(name, &tname, &order, &nlabels) == dns_namereln_subdomain) @@ -653,19 +599,6 @@ dns_name_matcheswildcard(const dns_name_t *name, const dns_name_t *wname) { return (false); } -unsigned int -dns_name_countlabels(const dns_name_t *name) { - /* - * How many labels does 'name' have? - */ - - REQUIRE(VALID_NAME(name)); - - ENSURE(name->labels <= DNS_NAME_MAXLABELS); - - return (name->labels); -} - void dns_name_getlabel(const dns_name_t *name, unsigned int n, dns_label_t *label) { unsigned char *offsets; @@ -675,7 +608,7 @@ dns_name_getlabel(const dns_name_t *name, unsigned int n, dns_label_t *label) { * Make 'label' refer to the 'n'th least significant label of 'name'. */ - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); REQUIRE(name->labels > 0); REQUIRE(n < name->labels); REQUIRE(label != NULL); @@ -702,11 +635,11 @@ dns_name_getlabelsequence(const dns_name_t *source, unsigned int first, * 'first' in 'source'. */ - REQUIRE(VALID_NAME(source)); - REQUIRE(VALID_NAME(target)); + 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(BINDABLE(target)); + REQUIRE(DNS_NAME_BINDABLE(target)); p = source->ndata; if (first == source->labels) { @@ -757,9 +690,9 @@ dns_name_clone(const dns_name_t *source, dns_name_t *target) { * Make 'target' refer to the same name as 'source'. */ - REQUIRE(VALID_NAME(source)); - REQUIRE(VALID_NAME(target)); - REQUIRE(BINDABLE(target)); + REQUIRE(DNS_NAME_VALID(source)); + REQUIRE(DNS_NAME_VALID(target)); + REQUIRE(DNS_NAME_BINDABLE(target)); target->ndata = source->ndata; target->length = source->length; @@ -789,9 +722,9 @@ dns_name_fromregion(dns_name_t *name, const isc_region_t *r) { * Make 'name' refer to region 'r'. */ - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); REQUIRE(r != NULL); - REQUIRE(BINDABLE(name)); + REQUIRE(DNS_NAME_BINDABLE(name)); INIT_OFFSETS(name, offsets, odata); @@ -826,18 +759,6 @@ dns_name_fromregion(dns_name_t *name, const isc_region_t *r) { } } -void -dns_name_toregion(const dns_name_t *name, isc_region_t *r) { - /* - * Make 'r' refer to 'name'. - */ - - REQUIRE(VALID_NAME(name)); - REQUIRE(r != NULL); - - DNS_NAME_TOREGION(name, r); -} - isc_result_t dns_name_fromtext(dns_name_t *name, isc_buffer_t *source, const dns_name_t *origin, unsigned int options, @@ -864,7 +785,7 @@ dns_name_fromtext(dns_name_t *name, isc_buffer_t *source, * will remain relative. */ - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); REQUIRE(ISC_BUFFER_VALID(source)); REQUIRE((target != NULL && ISC_BUFFER_VALID(target)) || (target == NULL && ISC_BUFFER_VALID(name->buffer))); @@ -876,7 +797,7 @@ dns_name_fromtext(dns_name_t *name, isc_buffer_t *source, isc_buffer_clear(target); } - REQUIRE(BINDABLE(name)); + REQUIRE(DNS_NAME_BINDABLE(name)); INIT_OFFSETS(name, offsets, odata); offsets[0] = 0; @@ -1114,7 +1035,7 @@ dns_name_totext(const dns_name_t *name, unsigned int options, * This function assumes the name is in proper uncompressed * wire format. */ - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); REQUIRE(ISC_BUFFER_VALID(target)); oused = target->used; @@ -1285,7 +1206,7 @@ dns_name_tofilenametext(const dns_name_t *name, bool omit_final_dot, * This function assumes the name is in proper uncompressed * wire format. */ - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); REQUIRE(name->attributes.absolute); REQUIRE(ISC_BUFFER_VALID(target)); @@ -1396,15 +1317,15 @@ dns_name_downcase(const dns_name_t *source, dns_name_t *name, * Downcase 'source'. */ - REQUIRE(VALID_NAME(source)); - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(source)); + REQUIRE(DNS_NAME_VALID(name)); if (source == name) { REQUIRE(!name->attributes.readonly); isc_buffer_init(&buffer, source->ndata, source->length); target = &buffer; ndata = source->ndata; } else { - REQUIRE(BINDABLE(name)); + REQUIRE(DNS_NAME_BINDABLE(name)); REQUIRE((target != NULL && ISC_BUFFER_VALID(target)) || (target == NULL && ISC_BUFFER_VALID(name->buffer))); if (target == NULL) { @@ -1529,8 +1450,8 @@ dns_name_fromwire(dns_name_t *const name, isc_buffer_t *const source, * correct way to set our "consumed" variable. */ - REQUIRE(VALID_NAME(name)); - REQUIRE(BINDABLE(name)); + REQUIRE(DNS_NAME_VALID(name)); + REQUIRE(DNS_NAME_BINDABLE(name)); REQUIRE((target != NULL && ISC_BUFFER_VALID(target)) || (target == NULL && ISC_BUFFER_VALID(name->buffer))); @@ -1659,7 +1580,7 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx, * compression context 'cctx', and storing the result in 'target'. */ - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); REQUIRE(cctx != NULL); REQUIRE(ISC_BUFFER_VALID(target)); @@ -1679,7 +1600,7 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx, } if (name->offsets == NULL) { - DNS_NAME_INIT(&clname, clo); + dns_name_init(&clname, clo); dns_name_clone(name, &clname); name = &clname; } @@ -1741,9 +1662,9 @@ dns_name_concatenate(const dns_name_t *prefix, const dns_name_t *suffix, * Concatenate 'prefix' and 'suffix'. */ - REQUIRE(prefix == NULL || VALID_NAME(prefix)); - REQUIRE(suffix == NULL || VALID_NAME(suffix)); - REQUIRE(name == NULL || VALID_NAME(name)); + REQUIRE(prefix == NULL || DNS_NAME_VALID(prefix)); + REQUIRE(suffix == NULL || DNS_NAME_VALID(suffix)); + REQUIRE(name == NULL || DNS_NAME_VALID(name)); REQUIRE((target != NULL && ISC_BUFFER_VALID(target)) || (target == NULL && name != NULL && ISC_BUFFER_VALID(name->buffer))); @@ -1758,7 +1679,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, odata); name = &tmp_name; } if (target == NULL) { @@ -1767,7 +1688,7 @@ dns_name_concatenate(const dns_name_t *prefix, const dns_name_t *suffix, isc_buffer_clear(name->buffer); } - REQUIRE(BINDABLE(name)); + REQUIRE(DNS_NAME_BINDABLE(name)); /* * Set up. @@ -1829,44 +1750,16 @@ dns_name_concatenate(const dns_name_t *prefix, const dns_name_t *suffix, return (ISC_R_SUCCESS); } -void -dns_name_split(const dns_name_t *name, unsigned int suffixlabels, - dns_name_t *prefix, dns_name_t *suffix) - -{ - unsigned int splitlabel; - - REQUIRE(VALID_NAME(name)); - REQUIRE(suffixlabels > 0); - REQUIRE(suffixlabels <= name->labels); - REQUIRE(prefix != NULL || suffix != NULL); - REQUIRE(prefix == NULL || (VALID_NAME(prefix) && BINDABLE(prefix))); - REQUIRE(suffix == NULL || (VALID_NAME(suffix) && BINDABLE(suffix))); - - splitlabel = name->labels - suffixlabels; - - if (prefix != NULL) { - dns_name_getlabelsequence(name, 0, splitlabel, prefix); - } - - if (suffix != NULL) { - dns_name_getlabelsequence(name, splitlabel, suffixlabels, - suffix); - } - - return; -} - void dns_name_dup(const dns_name_t *source, isc_mem_t *mctx, dns_name_t *target) { /* * Make 'target' a dynamically allocated copy of 'source'. */ - REQUIRE(VALID_NAME(source)); + REQUIRE(DNS_NAME_VALID(source)); REQUIRE(source->length > 0); - REQUIRE(VALID_NAME(target)); - REQUIRE(BINDABLE(target)); + REQUIRE(DNS_NAME_VALID(target)); + REQUIRE(DNS_NAME_BINDABLE(target)); /* * Make 'target' empty in case of failure. @@ -1899,10 +1792,10 @@ dns_name_dupwithoffsets(const dns_name_t *source, isc_mem_t *mctx, * 'target' will also have a dynamically allocated offsets table. */ - REQUIRE(VALID_NAME(source)); + REQUIRE(DNS_NAME_VALID(source)); REQUIRE(source->length > 0); - REQUIRE(VALID_NAME(target)); - REQUIRE(BINDABLE(target)); + REQUIRE(DNS_NAME_VALID(target)); + REQUIRE(DNS_NAME_BINDABLE(target)); REQUIRE(target->offsets == NULL); /* @@ -1938,7 +1831,7 @@ dns_name_free(dns_name_t *name, isc_mem_t *mctx) { * Free 'name'. */ - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); REQUIRE(name->attributes.dynamic); size = name->length; @@ -1961,10 +1854,10 @@ dns_name_digest(const dns_name_t *name, dns_digestfunc_t digest, void *arg) { * Send 'name' in DNSSEC canonical form to 'digest'. */ - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); REQUIRE(digest != NULL); - DNS_NAME_INIT(&downname, NULL); + dns_name_init(&downname, NULL); isc_buffer_init(&buffer, data, sizeof(data)); @@ -1980,7 +1873,7 @@ dns_name_digest(const dns_name_t *name, dns_digestfunc_t digest, void *arg) { bool dns_name_dynamic(const dns_name_t *name) { - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); /* * Returns whether there is dynamic memory associated with this name. @@ -2000,7 +1893,7 @@ dns_name_print(const dns_name_t *name, FILE *stream) { * Print 'name' on 'stream'. */ - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); isc_buffer_init(&b, t, sizeof(t)); result = dns_name_totext(name, 0, &b); @@ -2063,7 +1956,7 @@ dns_name_tostring(const dns_name_t *name, char **target, isc_mem_t *mctx) { isc_region_t reg; char *p, txt[DNS_NAME_FORMATSIZE]; - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); REQUIRE(target != NULL && *target == NULL); isc_buffer_init(&buf, txt, sizeof(txt)); @@ -2094,7 +1987,7 @@ dns_name_fromstring(dns_name_t *target, const char *src, isc_buffer_constinit(&buf, src, strlen(src)); isc_buffer_add(&buf, strlen(src)); - if (BINDABLE(target) && target->buffer != NULL) { + if (DNS_NAME_BINDABLE(target) && target->buffer != NULL) { name = target; } else { name = dns_fixedname_initname(&fn); @@ -2116,9 +2009,9 @@ dns_name_copy(const dns_name_t *source, dns_name_t *dest) { isc_buffer_t *target = NULL; unsigned char *ndata = NULL; - REQUIRE(VALID_NAME(source)); - REQUIRE(VALID_NAME(dest)); - REQUIRE(BINDABLE(dest)); + REQUIRE(DNS_NAME_VALID(source)); + REQUIRE(DNS_NAME_VALID(dest)); + REQUIRE(DNS_NAME_BINDABLE(dest)); target = dest->buffer; @@ -2273,7 +2166,7 @@ dns_name_istat(const dns_name_t *name) { unsigned char len; const unsigned char *ndata; - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); if (name->labels < 1) { return (false); @@ -2319,7 +2212,7 @@ dns_name_isdnssvcb(const dns_name_t *name) { unsigned char len, len1; const unsigned char *ndata; - REQUIRE(VALID_NAME(name)); + REQUIRE(DNS_NAME_VALID(name)); if (name->labels < 1 || name->length < 5) { return (false); diff --git a/lib/dns/rbt.c b/lib/dns/rbt.c index 32e1c2cc3d..f4115d1070 100644 --- a/lib/dns/rbt.c +++ b/lib/dns/rbt.c @@ -13,8 +13,6 @@ /*! \file */ -#define DNS_NAME_USEINLINE 1 - #include #include #include