From 6a4a9377a3e54ac05a3e842b2b6b6c4fb623f98e Mon Sep 17 00:00:00 2001 From: Marek Vavrusa <marek.vavrusa@nic.cz> Date: Fri, 14 Jun 2013 18:15:15 +0200 Subject: [PATCH] Updated usage of the removed functions. --- src/knot/ctl/remote.c | 4 +-- src/knot/zone/semantic-check.c | 6 ++-- src/libknot/nameserver/name-server.c | 14 +++++---- src/libknot/packet/response.c | 42 +++++++++---------------- src/libknot/sign/key.c | 2 +- src/libknot/util/wire.h | 2 +- src/libknot/zone/zone-contents.c | 9 +++--- src/libknot/zone/zone-tree.c | 47 ---------------------------- src/utils/common/params.c | 2 +- src/utils/nsupdate/nsupdate_exec.c | 2 +- 10 files changed, 36 insertions(+), 94 deletions(-) diff --git a/src/knot/ctl/remote.c b/src/knot/ctl/remote.c index f8aadc8eac..ac5440315f 100644 --- a/src/knot/ctl/remote.c +++ b/src/knot/ctl/remote.c @@ -772,7 +772,7 @@ knot_rrset_t* remote_build_rr(const char *k, uint16_t t) } /* Assert K is FQDN. */ - knot_dname_t *key = knot_dname_new_from_nonfqdn_str(k, strlen(k), 0); + knot_dname_t *key = knot_dname_new_from_str(k, strlen(k), 0); if (!key) { return NULL; } @@ -820,7 +820,7 @@ int remote_create_ns(knot_rrset_t *rr, const char *d) } /* Create dname. */ - knot_dname_t *dn = knot_dname_new_from_nonfqdn_str(d, strlen(d), NULL); + knot_dname_t *dn = knot_dname_new_from_str(d, strlen(d), NULL); if (!dn) { return KNOT_ERROR; } diff --git a/src/knot/zone/semantic-check.c b/src/knot/zone/semantic-check.c index 1d3c5c4e0b..24f1973c60 100644 --- a/src/knot/zone/semantic-check.c +++ b/src/knot/zone/semantic-check.c @@ -308,7 +308,7 @@ static int check_rrsig_rdata(err_handler_t *handler, /* label number at the 2nd index should be same as owner's */ uint8_t labels_rdata = knot_rrset_rdata_rrsig_labels(rrsig, rr_pos); - int tmp = knot_dname_label_count(knot_rrset_owner(rrset)) - + int tmp = knot_dname_wire_labels(knot_rrset_owner(rrset)->name, NULL) - labels_rdata; if (tmp != 0) { @@ -899,7 +899,9 @@ static int sem_check_node_optional(knot_zone_contents_t *zone, return KNOT_ENOMEM; } - knot_dname_left_chop_no_copy(ns_dname); + knot_dname_t *old_ns_dname = ns_dname; + ns_dname = knot_dname_left_chop(ns_dname); + knot_dname_free(&old_ns_dname); if (knot_dname_cat(wildcard, ns_dname) == NULL) { diff --git a/src/libknot/nameserver/name-server.c b/src/libknot/nameserver/name-server.c index 81d02ee353..198fc2c5d3 100644 --- a/src/libknot/nameserver/name-server.c +++ b/src/libknot/nameserver/name-server.c @@ -933,8 +933,8 @@ static int ns_put_authority_soa(const knot_zone_contents_t *zone, static knot_dname_t *ns_next_closer(const knot_dname_t *closest_encloser, const knot_dname_t *name) { - int ce_labels = knot_dname_label_count(closest_encloser); - int qname_labels = knot_dname_label_count(name); + int ce_labels = knot_dname_wire_labels(closest_encloser->name, NULL); + int qname_labels = knot_dname_wire_labels(name->name, NULL); assert(ce_labels < qname_labels); @@ -949,7 +949,9 @@ static knot_dname_t *ns_next_closer(const knot_dname_t *closest_encloser, } for (int i = 0; i < (qname_labels - ce_labels - 1); ++i) { - knot_dname_left_chop_no_copy(next_closer); + knot_dname_t *old_next_closer = next_closer; + next_closer = knot_dname_left_chop(next_closer); + knot_dname_free(&old_next_closer); } return next_closer; @@ -2011,9 +2013,9 @@ static int ns_dname_is_too_long(const knot_rrset_t *rrset, const knot_dname_t *qname) { // TODO: add function for getting DNAME target - if (knot_dname_label_count(qname) - - knot_dname_label_count(knot_rrset_owner(rrset)) - + knot_dname_label_count(knot_rrset_rdata_dname_target(rrset)) + if (knot_dname_wire_labels(qname->name, NULL) + - knot_dname_wire_labels(knot_rrset_owner(rrset)->name, NULL) + + knot_dname_wire_labels(knot_rrset_rdata_dname_target(rrset)->name, NULL) > KNOT_MAX_DNAME_LENGTH) { return 1; } else { diff --git a/src/libknot/packet/response.c b/src/libknot/packet/response.c index 25691d0492..422454ecf8 100644 --- a/src/libknot/packet/response.c +++ b/src/libknot/packet/response.c @@ -33,7 +33,8 @@ * * Update current best score. */ -static bool knot_response_compr_score(uint8_t *n, uint8_t *p, uint8_t labels, +static bool knot_response_compr_score(const uint8_t *n, const uint8_t *p, + uint8_t labels, uint8_t *wire, knot_compr_ptr_t *match) { uint16_t score = 0; @@ -65,22 +66,6 @@ static bool knot_response_compr_score(uint8_t *n, uint8_t *p, uint8_t labels, return false; } -/*! - * \brief Align name and reference to a common number of suffix labels. - */ -static uint8_t knot_response_compr_align(uint8_t **name, uint8_t nlabels, - uint8_t **ref, uint8_t reflabels, - uint8_t *wire) -{ - for (unsigned j = nlabels; j < reflabels; ++j) - *ref = knot_wire_next_label(*ref, wire); - - for (unsigned j = reflabels; j < nlabels; ++j) - *name = knot_wire_next_label(*name, wire); - - return (nlabels < reflabels) ? nlabels : reflabels; -} - int knot_response_compress_dname(const knot_dname_t *dname, knot_compr_t *compr, uint8_t *dst, size_t max) { @@ -90,6 +75,7 @@ int knot_response_compress_dname(const knot_dname_t *dname, knot_compr_t *compr, /* Do not compress small dnames. */ uint8_t *name = dname->name; + unsigned name_labels = knot_dname_wire_labels(name, NULL); if (dname->size <= 2) { if (dname->size > max) return KNOT_ESPACE; @@ -103,28 +89,28 @@ int knot_response_compress_dname(const knot_dname_t *dname, knot_compr_t *compr, unsigned match_id = 0; knot_compr_ptr_t match = { 0, 0 }; for (; i < COMPR_MAXLEN && compr->table[i].off > 0; ++i) { - uint8_t *name = dname->name; - uint8_t *ref = compr->wire + compr->table[i].off; - lbcount = knot_response_compr_align(&name, dname->label_count, - &ref, compr->table[i].lbcount, - compr->wire); + const uint8_t *sample = dname->name; + const uint8_t *ref = compr->wire + compr->table[i].off; + lbcount = knot_dname_align(&sample, name_labels, + &ref, compr->table[i].lbcount, + compr->wire); - if (knot_response_compr_score(name, ref, lbcount, compr->wire, + if (knot_response_compr_score(sample, ref, lbcount, compr->wire, &match)) { match_id = i; - if (match.lbcount == dname->label_count) + if (match.lbcount == name_labels) break; /* Best match, break. */ } } /* Write non-matching prefix. */ unsigned written = 0; - for (unsigned j = match.lbcount; j < dname->label_count; ++j) { + for (unsigned j = match.lbcount; j < name_labels; ++j) { if (written + *name + 1 > max) return KNOT_ESPACE; memcpy(dst + written, name, *name + 1); written += *name + 1; - name = knot_wire_next_label(name, compr->wire); + name = (uint8_t *)knot_wire_next_label(name, compr->wire); } /* Write out pointer covering suffix. */ @@ -149,7 +135,7 @@ int knot_response_compress_dname(const knot_dname_t *dname, knot_compr_t *compr, } /* Do not insert if exceeds bounds or full match. */ - if (match.lbcount == dname->label_count || + if (match.lbcount == name_labels || compr->wire_pos > KNOT_WIRE_PTR_MAX) return written; @@ -163,7 +149,7 @@ int knot_response_compress_dname(const knot_dname_t *dname, knot_compr_t *compr, /* Store in dname table. */ if (compr->table[i].off == 0) { compr->table[i].off = (uint16_t)compr->wire_pos; - compr->table[i].lbcount = dname->label_count; + compr->table[i].lbcount = name_labels; } return written; diff --git a/src/libknot/sign/key.c b/src/libknot/sign/key.c index d721e642d7..742c5ef2a4 100644 --- a/src/libknot/sign/key.c +++ b/src/libknot/sign/key.c @@ -518,7 +518,7 @@ int knot_tsig_create_key(const char *name, int algorithm, const char *b64secret, knot_tsig_key_t *key) { knot_dname_t *dname; - dname = knot_dname_new_from_nonfqdn_str(name, strlen(name), NULL); + dname = knot_dname_new_from_str(name, strlen(name), NULL); if (!dname) return KNOT_ENOMEM; diff --git a/src/libknot/util/wire.h b/src/libknot/util/wire.h index a1890821b5..80588a689d 100644 --- a/src/libknot/util/wire.h +++ b/src/libknot/util/wire.h @@ -955,7 +955,7 @@ static inline uint16_t knot_wire_get_pointer(const uint8_t *pos) return (knot_wire_read_u16(pos) - KNOT_WIRE_PTR_BASE); // Return offset. } -static inline uint8_t *knot_wire_next_label(uint8_t *lp, uint8_t *wire) +static inline const uint8_t *knot_wire_next_label(const uint8_t *lp, const uint8_t *wire) { lp = lp + (lp[0] + sizeof(uint8_t)); if (knot_wire_is_pointer(lp)) { diff --git a/src/libknot/zone/zone-contents.c b/src/libknot/zone/zone-contents.c index ff1a1d40cf..210dc537b9 100644 --- a/src/libknot/zone/zone-contents.c +++ b/src/libknot/zone/zone-contents.c @@ -933,8 +933,7 @@ dbg_zone_exec_detail( knot_dname_left_chop(knot_node_owner(node)); if(chopped == NULL) { /* Root domain and root domain only. */ - assert(node->owner && node->owner->labels && - node->owner->labels[0] == 0); + assert(node->owner && *node->owner->name == '\0'); return KNOT_EOK; } @@ -1441,8 +1440,8 @@ dbg_zone_detail("Search function returned %d, node %s (%p) and prev: %s (%p)\n", int matched_labels = knot_dname_matched_labels( knot_node_owner((*closest_encloser)), name); - while (matched_labels < knot_dname_label_count( - knot_node_owner((*closest_encloser)))) { + while (matched_labels < knot_dname_wire_labels( + knot_node_owner((*closest_encloser))->name, NULL)) { (*closest_encloser) = knot_node_parent((*closest_encloser)); assert(*closest_encloser); @@ -2219,7 +2218,7 @@ static void knot_zc_integrity_check_parent(const knot_node_t *node, // if direct child if (knot_dname_is_subdomain(node_owner, parent_owner) && knot_dname_matched_labels(node_owner, parent_owner) - == knot_dname_label_count(parent_owner)) { + == knot_dname_wire_labels(parent_owner->name, NULL)) { // check the parent pointer const knot_node_t *parent = knot_node_parent(node); diff --git a/src/libknot/zone/zone-tree.c b/src/libknot/zone/zone-tree.c index 27cdf5f223..c31c6dc51c 100644 --- a/src/libknot/zone/zone-tree.c +++ b/src/libknot/zone/zone-tree.c @@ -27,53 +27,6 @@ /* Non-API functions */ /*----------------------------------------------------------------------------*/ -#define DNAME_LFT_MAXLEN 255 /* maximum lookup format length */ - -/*! - * \brief Convert domain name from wire to lookup format. - * - * Formats names from rightmost label to the leftmost, separated by the lowest - * possible character (\x00). Sorting such formatted names also gives - * correct canonical order (for NSEC/NSEC3). - * - * Example: - * Name: lake.example.com. Wire: \x04lake\x07example\x03com\x00 - * Lookup format com\x00example\x00lake\x00 - * - * Maximum length of such a domain name is DNAME_LFT_MAXLEN characters. - * - * \param dst Memory to store converted name into. - * \param maxlen Maximum memory length. - * \param src Source domain name. - * - * \retval KNOT_EOK if successful - * \retval KNOT_ESPACE when not enough memory. - * \retval KNOT_EINVAL on invalid parameters - */ -static int dname_lf(uint8_t *dst, const knot_dname_t *src, size_t maxlen) { - if (src->size > maxlen) - return KNOT_ESPACE; - *dst = (uint8_t)src->size; - /* need to save last \x00 for root dname */ - if (*dst > 1) - *dst -= 1; - *++dst = '\0'; - uint8_t* l = src->name; - uint8_t lstack[DNAME_LFT_MAXLEN]; - uint8_t *sp = lstack; - while(*l != 0) { /* build label stack */ - *sp++ = (l - src->name); - l += 1 + *l; - } - while(sp != lstack) { /* consume stack */ - l = src->name + *--sp; /* fetch rightmost label */ - memcpy(dst, l+1, *l); /* write label */ - dst += *l; - *dst++ = '\0'; /* label separator */ - } - return KNOT_EOK; -} - static value_t knot_zone_node_copy(value_t v) { return v; diff --git a/src/utils/common/params.c b/src/utils/common/params.c index 56dc662132..bbfaac5c46 100644 --- a/src/utils/common/params.c +++ b/src/utils/common/params.c @@ -344,7 +344,7 @@ int params_parse_tsig(const char *value, knot_key_params_t *key_params) } /* Set key name and secret. */ - key_params->name = knot_dname_new_from_nonfqdn_str(k, strlen(k), NULL); + key_params->name = knot_dname_new_from_str(k, strlen(k), NULL); key_params->secret = strdup(s); DBG("%s: parsed name '%s'\n", __func__, k); diff --git a/src/utils/nsupdate/nsupdate_exec.c b/src/utils/nsupdate/nsupdate_exec.c index 53f26fe611..479c9629b9 100644 --- a/src/utils/nsupdate/nsupdate_exec.c +++ b/src/utils/nsupdate/nsupdate_exec.c @@ -305,7 +305,7 @@ static int pkt_append(nsupdate_params_t *p, int sect) scanner_t *s = p->rrp; if (!p->pkt) { p->pkt = create_empty_packet(MAX_PACKET_SIZE); - qname = knot_dname_new_from_nonfqdn_str(p->zone, + qname = knot_dname_new_from_str(p->zone, strlen(p->zone), NULL); ret = knot_query_set_question(p->pkt, qname, p->class_num, p->type_num); -- GitLab