From 3ba8ea321a55d818c6085bcfafc12d68650183ed Mon Sep 17 00:00:00 2001 From: TCY16 Date: Tue, 28 Sep 2021 16:35:50 +0200 Subject: [PATCH] fix CH class response --- daemon/worker.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index a1584a548..2f2e62b32 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1057,13 +1057,21 @@ deny_refuse(struct comm_point* c, enum acl_access acl, sldns_buffer_flip(c->buffer); return 1; } - sldns_buffer_skip(c->buffer, (ssize_t)sizeof(uint16_t)); /* skip qtype */ - sldns_buffer_skip(c->buffer, (ssize_t)sizeof(uint16_t)); /* skip qclass */ - LDNS_QR_SET(sldns_buffer_begin(c->buffer)); LDNS_RCODE_SET(sldns_buffer_begin(c->buffer), LDNS_RCODE_REFUSED); + sldns_buffer_skip(c->buffer, (ssize_t)sizeof(uint16_t)); /* skip qtype */ + + /* check the qclass */ + if (sldns_buffer_read_u16(c->buffer) != LDNS_RR_CLASS_IN) { + LDNS_ANCOUNT_SET(sldns_buffer_begin(c->buffer), 0); + LDNS_NSCOUNT_SET(sldns_buffer_begin(c->buffer), 0); + LDNS_ARCOUNT_SET(sldns_buffer_begin(c->buffer), 0); + sldns_buffer_flip(c->buffer); + return 1; + } + /* check edns section is present */ if(LDNS_ARCOUNT(sldns_buffer_begin(c->buffer)) != 1) { LDNS_ANCOUNT_SET(sldns_buffer_begin(c->buffer), 0); -- 2.47.2