edns->udp_size = EDNS_ADVERTISED_SIZE;
edns->ext_rcode = 0;
edns->bits &= EDNS_DO;
- edns->opt_list_in = NULL;
- edns->opt_list_out = NULL;
- edns->opt_list_modules_out = NULL;
error_encode(pkt, rcode, qinfo,
*(uint16_t*)(void *)sldns_buffer_begin(pkt),
sldns_buffer_read_u16_at(pkt, 2), edns);
sldns_buffer_write_u16(pkt, 0); /* rdatalen */
/* write rdata */
for(opt=edns->opt_list_modules_out; opt; opt=opt->next) {
+ if (opt->opt_code == LDNS_EDNS_PADDING) {
+ padding_option = opt;
+ continue;
+ }
sldns_buffer_write_u16(pkt, opt->opt_code);
sldns_buffer_write_u16(pkt, opt->opt_len);
if(opt->opt_len != 0)
log_err("out of memory");
return LDNS_RCODE_SERVFAIL;
}
- c->tcp_keepalive = 1;
}
/* while still more options, and have code+len to read */
break;
default:
- if(!edns_opt_list_append(&edns->opt_list_in,
- opt_code, opt_len, rdata_ptr, region)) {
- log_err("out of memory");
- return LDNS_RCODE_SERVFAIL;
- }
break;
}
+ if(!edns_opt_list_append(&edns->opt_list_in,
+ opt_code, opt_len, rdata_ptr, region)) {
+ log_err("out of memory");
+ return LDNS_RCODE_SERVFAIL;
+ }
rdata_ptr += opt_len;
rdata_len -= opt_len;
}
- return 0;
+ return LDNS_RCODE_NOERROR;
}
int
rdata_len = found->rr_first->size-2;
rdata_ptr = found->rr_first->ttl_data+6;
if(parse_edns_options(rdata_ptr, rdata_len, edns, NULL, NULL, region))
- return 0;
+ return LDNS_RCODE_NOERROR;
/* ignore rrsigs */
if(sldns_buffer_remaining(pkt) < rdata_len)
return LDNS_RCODE_FORMERR;
rdata_ptr = sldns_buffer_current(pkt);
- rcode = parse_edns_options(rdata_ptr, rdata_len, edns, cfg, c, region);
- if(rcode)
- return rcode;
-
/* ignore rrsigs */
-
+ return parse_edns_options(rdata_ptr, rdata_len, edns, cfg, c, region);
return 0;
}