]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
nameserver: return FORMERR if no query and known OPCODE, but NOTIMPL if unknown OPCODE
authorDaniel Salzman <daniel.salzman@nic.cz>
Tue, 10 Nov 2020 14:16:12 +0000 (15:16 +0100)
committerDaniel Salzman <daniel.salzman@nic.cz>
Tue, 10 Nov 2020 14:49:15 +0000 (15:49 +0100)
src/knot/nameserver/process_query.c

index 4c4a62999d20eb57587a3f917d13c97ac55a1ec0..58d409d0617baf8c0f79051c8cc65e43a5c35ccd 100644 (file)
@@ -407,7 +407,15 @@ static int prepare_answer(knot_pkt_t *query, knot_pkt_t *resp, knot_layer_t *ctx
        /* All supported OPCODEs require a question. */
        const knot_dname_t *qname = knot_pkt_qname(query);
        if (qname == NULL) {
-               qdata->rcode = KNOT_RCODE_NOTIMPL;
+               switch (knot_wire_get_opcode(query->wire)) {
+               case KNOT_OPCODE_QUERY:
+               case KNOT_OPCODE_NOTIFY:
+               case KNOT_OPCODE_UPDATE:
+                       qdata->rcode = KNOT_RCODE_FORMERR;
+                       break;
+               default:
+                       qdata->rcode = KNOT_RCODE_NOTIMPL;
+               }
                return KNOT_ENOTSUP;
        }