sldns_buffer_skip(c->buffer, LDNS_HEADER_SIZE); /* skip header */
if (!query_dname_len(c->buffer)) {
+ LDNS_QR_SET(sldns_buffer_begin(c->buffer));
LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
LDNS_RCODE_FORMERR);
+ sldns_buffer_flip(c->buffer);
return 1;
}
if (sldns_buffer_remaining(c->buffer) < 2 * sizeof(uint16_t)) {
+ LDNS_QR_SET(sldns_buffer_begin(c->buffer));
LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
LDNS_RCODE_FORMERR);
+ sldns_buffer_flip(c->buffer);
return 1;
}
sldns_buffer_skip(c->buffer, (ssize_t)sizeof(uint16_t)); /* skip qtype */
LDNS_NSCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
LDNS_ARCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
sldns_buffer_flip(c->buffer);
- log_buf(VERB_ALGO, "Refused without EDE", c->buffer);
+ sldns_buffer_flip(c->buffer);
return 1;
}
*/
opt_rr_mark = sldns_buffer_position(c->buffer);
+ /* Skip through the RR records */
if(LDNS_ANCOUNT(sldns_buffer_begin(c->buffer)) != 0 ||
LDNS_NSCOUNT(sldns_buffer_begin(c->buffer)) != 0) {
- if(!skip_pkt_rrs(c->buffer, ((int)LDNS_ANCOUNT(sldns_buffer_begin(c->buffer)))+
+ if(!skip_pkt_rrs(c->buffer,
+ ((int)LDNS_ANCOUNT(sldns_buffer_begin(c->buffer)))+
((int)LDNS_NSCOUNT(sldns_buffer_begin(c->buffer))))) {
- comm_point_drop_reply(repinfo);
- return 0;
+ LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
+ LDNS_RCODE_FORMERR);
+ sldns_buffer_flip(c->buffer);
+ return 1;
}
}
/* Do we have a valid OPT RR here? If not return FORMERR */
LDNS_RCODE_FORMERR);
return 1;
}
- if(sldns_buffer_read_u16(c->buffer) != LDNS_RR_TYPE_OPT) {
+ if(sldns_buffer_remaining(c->buffer) > 1 ||
+ sldns_buffer_read_u16(c->buffer) != LDNS_RR_TYPE_OPT) {
LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
LDNS_RCODE_FORMERR);
+ sldns_buffer_flip(c->buffer);
return 1;
}
/* Write OPT RR directly after the query,
LDNS_NSCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
sldns_buffer_set_position(c->buffer, opt_rr_mark);
- /* check if OPT record can be written
+ /* Check if OPT record can be written
* 17 == root label (1) + RR type (2) + UDP Size (2)
* + Fields (4) + rdata len (2) + EDE Option code (2)
* + EDE Option length (2) + EDE info-code (2)
if (sldns_buffer_available(c->buffer, 17) == 0) {
LDNS_ARCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
sldns_buffer_flip(c->buffer);
- log_buf(VERB_ALGO, "Refused without EDE", c->buffer);
return 1;
}
sldns_buffer_flip(c->buffer);
- log_buf(VERB_ALGO, "EDE added, buffer:", c->buffer);
-
return 1;
}