From: Wouter Wijngaards Date: Fri, 20 Nov 2015 10:32:18 +0000 (+0000) Subject: But RFC wants empty EDNS in formerr. X-Git-Tag: release-1.5.7rc1~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=55f5a55f5f22e69b5bab600622ad1ed9b90a184e;p=thirdparty%2Funbound.git But RFC wants empty EDNS in formerr. git-svn-id: file:///svn/unbound/trunk@3547 be551aaa-1e26-0410-a405-d3ace91eadb9 --- diff --git a/daemon/worker.c b/daemon/worker.c index 9fe014618..c90a65998 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -866,12 +866,16 @@ worker_handle_request(struct comm_point* c, void* arg, int error, goto send_reply; } if((ret=parse_edns_from_pkt(c->buffer, &edns)) != 0) { + struct edns_data reply_edns; verbose(VERB_ALGO, "worker parse edns: formerror."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); - sldns_buffer_flip(c->buffer); /* remove edns from reply */ - sldns_buffer_write_at(c->buffer, 10, (uint8_t*)"\0\0", 2); - LDNS_QR_SET(sldns_buffer_begin(c->buffer)); + memset(&reply_edns, 0, sizeof(reply_edns)); + reply_edns.edns_present = 1; + reply_edns.udp_size = EDNS_ADVERTISED_SIZE; LDNS_RCODE_SET(sldns_buffer_begin(c->buffer), ret); + error_encode(c->buffer, ret, &qinfo, + *(uint16_t*)(void *)sldns_buffer_begin(c->buffer), + sldns_buffer_read_u16_at(c->buffer, 2), &reply_edns); server_stats_insrcode(&worker->stats, c->buffer); goto send_reply; }