diff --git a/src/libknot/nameserver/name-server.c b/src/libknot/nameserver/name-server.c index b087bffd2d9b14084e417093f7d9e61e3dd1139b..584493d76cdd34dc7a39b3211fc2e5095ac4c4ff 100644 --- a/src/libknot/nameserver/name-server.c +++ b/src/libknot/nameserver/name-server.c @@ -2141,14 +2141,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(