]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon/worker: enforce iteration limit for cached answers
authorMarek Vavruša <marek.vavrusa@nic.cz>
Tue, 19 May 2015 20:58:24 +0000 (22:58 +0200)
committerMarek Vavruša <marek.vavrusa@nic.cz>
Tue, 19 May 2015 20:58:39 +0000 (22:58 +0200)
daemon/worker.c
lib/layer/iterate.c

index a518e2066dc345f277c1420a8f4c95847857a615..a4d1b9de01b09796a60edc44408aa703ab62e6c6 100644 (file)
@@ -187,13 +187,14 @@ static int qr_task_step(struct qr_task *task, knot_pkt_t *packet)
        int state = kr_resolve_consume(&task->req, packet);
        while (state == KNOT_STATE_PRODUCE) {
                state = kr_resolve_produce(&task->req, &addr, &sock_type, next_query);
+               if (++task->iter_count > KR_ITER_LIMIT) {
+                       return qr_task_finalize(task, KNOT_STATE_FAIL);
+               }
        }
 
        /* We're done, no more iterations needed */
        if (state & (KNOT_STATE_DONE|KNOT_STATE_FAIL)) {
                return qr_task_finalize(task, state);
-       } else if (++task->iter_count > KR_ITER_LIMIT) {
-               return qr_task_finalize(task, KNOT_STATE_FAIL);
        }
 
        /* Create connection for iterative query */
index 11cd46638ba2199f472f237d4ad86a1387e33b90..0aafab424b114731e1d0efafac3f23b494654370 100644 (file)
@@ -305,7 +305,7 @@ static int process_answer(knot_pkt_t *pkt, struct kr_request *req)
        }
 
        /* Follow canonical name as next SNAME. */
-       if (cname != query->sname) {
+       if (!knot_dname_is_equal(cname, query->sname)) {
                DEBUG_MSG("<= cname chain, following\n");
                struct kr_query *next = kr_rplan_push(&req->rplan, query->parent, cname, query->sclass, query->stype);
                kr_zonecut_set_sbelt(&next->zone_cut);