]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
iterate: answer NOTIMPL to other classes than IN
authorVladimír Čunát <vladimir.cunat@nic.cz>
Tue, 3 Jan 2017 09:02:44 +0000 (10:02 +0100)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Tue, 3 Jan 2017 09:10:17 +0000 (10:10 +0100)
At least until we implement them properly.

lib/layer/iterate.c

index 4230030f36eb39b966e9e2e5c10bbb62de1b3ee3..d662b83c01cbf6201a56c3d5521dd5dfde4599f5 100644 (file)
@@ -67,7 +67,7 @@ static bool is_paired_to_query(const knot_pkt_t *answer, struct kr_query *query)
 
        return query->id      == knot_wire_get_id(answer->wire) &&
               knot_wire_get_qdcount(answer->wire) > 0 &&
-              (query->sclass == KNOT_CLASS_ANY || query->sclass  == knot_pkt_qclass(answer)) &&
+              query->sclass  == knot_pkt_qclass(answer) &&
               qtype          == knot_pkt_qtype(answer) &&
               knot_dname_is_equal(qname, knot_pkt_qname(answer));
 }
@@ -527,6 +527,14 @@ static int begin(kr_layer_t *ctx)
        if (!pkt || knot_wire_get_qdcount(pkt->wire) == 0) {
                return KR_STATE_FAIL;
        }
+
+       struct kr_query *qry = ctx->req->current_query;
+       /* Avoid any other classes. */
+       if (qry->sclass != KNOT_CLASS_IN) {
+               knot_wire_set_rcode(ctx->req->answer->wire, KNOT_RCODE_NOTIMPL);
+               return KR_STATE_FAIL;
+       }
+
        return reset(ctx);
 }