diff options
Diffstat (limited to 'src/libknot')
-rw-r--r-- | src/libknot/nameserver/name-server.c | 22 | ||||
-rw-r--r-- | src/libknot/nameserver/name-server.h | 5 | ||||
-rw-r--r-- | src/libknot/rrset-dump.c | 4 | ||||
-rw-r--r-- | src/libknot/zone/zone-contents.c | 6 |
4 files changed, 24 insertions, 13 deletions
diff --git a/src/libknot/nameserver/name-server.c b/src/libknot/nameserver/name-server.c index 4a95240..ee956e7 100644 --- a/src/libknot/nameserver/name-server.c +++ b/src/libknot/nameserver/name-server.c @@ -1753,7 +1753,7 @@ static inline int ns_referral(const knot_node_t *node, && knot_query_dnssec_requested( knot_packet_query(resp))) { ret = ns_add_rrsigs(ds_rrset, resp, node->owner, - knot_response_add_rrset_authority, + knot_response_add_rrset_answer, 1); } } else { @@ -1919,7 +1919,6 @@ static int ns_answer_from_node(const knot_node_t *node, } } } else { // else put authority NS - assert(previous == NULL); assert(closest_encloser == knot_node_parent(node) || !knot_dname_is_wildcard(knot_node_owner(node)) || knot_dname_compare(qname, knot_node_owner(node)) == 0); @@ -2141,14 +2140,19 @@ static int ns_answer_from_zone(const knot_zone_contents_t *zone, uint16_t qtype = knot_packet_qtype(resp); search: - find_ret = knot_zone_contents_find_dname(zone, qname, &node, - &closest_encloser, &previous); -// node = knot_node_current(node); -// closest_encloser = knot_node_current(closest_encloser); -// previous = knot_node_current(previous); - previous = NULL; // TODO REVIEW LS + // Searching for a name directly is faster than when we need previous dname + node = knot_zone_contents_find_node(zone, qname); + if (node != NULL) { + // If node is found, closest_encloser is equal to node itself + closest_encloser = node; + find_ret = KNOT_ZONE_NAME_FOUND; + } else { + // We need previous and closest encloser, full search has to be done + find_ret = knot_zone_contents_find_dname(zone, qname, &node, + &closest_encloser, &previous); if (find_ret == KNOT_EINVAL) { - return NS_ERR_SERVFAIL; + return NS_ERR_SERVFAIL; + } } dbg_ns_exec_verb( diff --git a/src/libknot/nameserver/name-server.h b/src/libknot/nameserver/name-server.h index 58ea212..6574539 100644 --- a/src/libknot/nameserver/name-server.h +++ b/src/libknot/nameserver/name-server.h @@ -159,7 +159,8 @@ static const size_t KNOT_NS_TSIG_DATA_MAX_SIZE = 100 * 64 * 1024; enum knot_ns_xfr_flag_t { XFR_FLAG_TCP = 1 << 0, /*!< XFR request is on TCP. */ XFR_FLAG_UDP = 1 << 1, /*!< XFR request is on UDP. */ - XFR_FLAG_AXFR_FINISHED = 1 << 2 /*!< Transfer is finished. */ + XFR_FLAG_AXFR_FINISHED = 1 << 2, /*!< Transfer is finished. */ + XFR_FLAG_CONNECTING = 1 << 3 /*!< In connecting phase. */ }; typedef enum knot_ns_transport { @@ -173,8 +174,8 @@ typedef enum knot_ns_transport { typedef enum knot_ns_xfr_type_t { /* DNS events. */ XFR_TYPE_AIN = 0, /*!< AXFR-IN request (start transfer). */ - XFR_TYPE_AOUT, /*!< AXFR-OUT request (incoming transfer). */ XFR_TYPE_IIN, /*!< IXFR-IN request (start transfer). */ + XFR_TYPE_AOUT, /*!< AXFR-OUT request (incoming transfer). */ XFR_TYPE_IOUT, /*!< IXFR-OUT request (incoming transfer). */ XFR_TYPE_SOA, /*!< Pending SOA request. */ XFR_TYPE_NOTIFY, /*!< Pending NOTIFY query. */ diff --git a/src/libknot/rrset-dump.c b/src/libknot/rrset-dump.c index e22a629..c8c7fe7 100644 --- a/src/libknot/rrset-dump.c +++ b/src/libknot/rrset-dump.c @@ -549,9 +549,9 @@ static void wire_text_to_str(rrset_dump_params_t *p) // Loop over all characters. for (size_t i = 0; i < in_len; i++) { - char ch = (char)(p->in)[i]; + uint8_t ch = p->in[i]; - if (isprint((unsigned char)(ch)) != 0) { + if (isprint(ch) != 0) { // For special character print leading slash. if (ch == '\\' || ch == '"') { dump_string(p, "\\"); diff --git a/src/libknot/zone/zone-contents.c b/src/libknot/zone/zone-contents.c index ff1a1d4..fbf4ab3 100644 --- a/src/libknot/zone/zone-contents.c +++ b/src/libknot/zone/zone-contents.c @@ -2515,6 +2515,12 @@ int knot_zone_contents_integrity_check(const knot_zone_contents_t *contents) data.children = 0; data.contents = contents; + if (contents == NULL) { + log_zone_warning("Zone to be integrity-checked does " + "not exist. Skipping...\n"); + return 1; + } + int ret = knot_zone_contents_tree_apply_inorder( (knot_zone_contents_t *)contents, knot_zc_integrity_check_node, (void *)&data); |