From: Marek VavruĊĦa Date: Sat, 24 Oct 2015 10:05:35 +0000 (+0200) Subject: lib/resolve: consider only distance between cut-nonterm X-Git-Tag: v1.0.0-beta2~58 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=beb699c8a6aa45d0743c71e3ca18abc20a818bef;p=thirdparty%2Fknot-resolver.git lib/resolve: consider only distance between cut-nonterm --- diff --git a/lib/resolve.c b/lib/resolve.c index 1b299586f..e8df821ef 100644 --- a/lib/resolve.c +++ b/lib/resolve.c @@ -133,12 +133,12 @@ static void check_empty_nonterms(struct kr_query *qry, knot_pkt_t *pkt, struct k const knot_dname_t *target = qry->sname; const knot_dname_t *cut_name = qry->zone_cut.name; struct kr_cache_entry *entry = NULL; - /* @note: The non-terminal must be direct child of zone cut (e.g. label distance == 2), - * otherwise this would risk leaking information to parent if the NODATA TTD > zone cut TTD. - */ + /* @note: The non-terminal must be direct child of zone cut (e.g. label distance <= 2), + * otherwise this would risk leaking information to parent if the NODATA TTD > zone cut TTD. */ size_t labels = knot_dname_labels(target, NULL) - knot_dname_labels(cut_name, NULL); - if (labels > 2) { - return; + while (labels > 2) { + target = knot_wire_next_label(target, NULL); + --labels; } for (size_t i = 0; i < labels; ++i) { int ret = kr_cache_peek(txn, KR_CACHE_PKT, target, KNOT_RRTYPE_NS, &entry, ×tamp);