]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
But RFC wants empty EDNS in formerr.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 20 Nov 2015 10:32:18 +0000 (10:32 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 20 Nov 2015 10:32:18 +0000 (10:32 +0000)
git-svn-id: file:///svn/unbound/trunk@3547 be551aaa-1e26-0410-a405-d3ace91eadb9

daemon/worker.c

index 9fe014618c9f48488f79b92f315261e8e5871206..c90a65998bec23dd137697eec63990e694f6a930 100644 (file)
@@ -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;
        }