]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
layer/validate: some bugfixes
authorGrigorii Demidov <grigorii.demidov@nic.cz>
Mon, 23 Jan 2017 20:14:29 +0000 (21:14 +0100)
committerGrigorii Demidov <grigorii.demidov@nic.cz>
Mon, 23 Jan 2017 20:14:29 +0000 (21:14 +0100)
lib/layer/iterate.c
lib/layer/validate.c
tests/deckard

index 4101d8a67936c9b88b210469c310dc64dd75e67f..feb28ed35c7a2e6eb2b2d49bb87c337b22f44701 100644 (file)
@@ -311,9 +311,10 @@ static int process_authority(knot_pkt_t *pkt, struct kr_request *req)
                return KR_STATE_CONSUME;
        }
 #else
+
        /* Work around servers sending back CNAME with different delegation and no AA. */
        const knot_pktsection_t *an = knot_pkt_section(pkt, KNOT_ANSWER);
-       if (an->count > 0 && ns->count > 0) {
+       if (!knot_wire_get_aa(pkt->wire) && an->count > 0 && ns->count > 0) {
                const knot_rrset_t *rr = knot_pkt_rr(an, 0);
                if (rr->type == KNOT_RRTYPE_CNAME) {
                        return KR_STATE_CONSUME;
index 7eb627d3d2d9ed1c70a489aa75e7bc3d97a7be18..8f3fea1b3ee096b1968e11431107b342101bbeac 100644 (file)
@@ -454,7 +454,7 @@ static int check_validation_result(kr_layer_t *ctx, ranked_rr_array_t *arr)
        ranked_rr_array_entry_t *invalid_entry = NULL;
        for (size_t i = 0; i < arr->len; ++i) {
                ranked_rr_array_entry_t *entry = arr->at[i];
-               if (entry->yielded) {
+               if (entry->yielded || entry->qry_uid != qry->uid) {
                        continue;
                }
                if (entry->rank == KR_VLDRANK_MISMATCH) {
index 0dcc0ddbf13d1eb93dbc94e02a6a9aec567fa903..65d0af0c9d66746c4c1d9ad3126ecee117a9675e 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 0dcc0ddbf13d1eb93dbc94e02a6a9aec567fa903
+Subproject commit 65d0af0c9d66746c4c1d9ad3126ecee117a9675e