summaryrefslogtreecommitdiff
path: root/util/data/msgencode.c
diff options
context:
space:
mode:
authorCy Schubert <cy@FreeBSD.org>2021-12-03 05:35:06 +0000
committerCy Schubert <cy@FreeBSD.org>2021-12-03 05:35:06 +0000
commit68965ba955db755e0cf7c57882a1e99da5c47644 (patch)
treef8e722161681a766f4425cefdbe71f32f647fd14 /util/data/msgencode.c
parent625f1c1312fb7defbd148c8ba121a0cf058707ef (diff)
Diffstat (limited to 'util/data/msgencode.c')
-rw-r--r--util/data/msgencode.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/util/data/msgencode.c b/util/data/msgencode.c
index 5f297b551bfb..fe21cfb86bd1 100644
--- a/util/data/msgencode.c
+++ b/util/data/msgencode.c
@@ -796,7 +796,10 @@ calc_edns_field_size(struct edns_data* edns)
struct edns_option* opt;
if(!edns || !edns->edns_present)
return 0;
- for(opt = edns->opt_list; opt; opt = opt->next) {
+ for(opt = edns->opt_list_inplace_cb_out; opt; opt = opt->next) {
+ rdatalen += 4 + opt->opt_len;
+ }
+ for(opt = edns->opt_list_out; opt; opt = opt->next) {
rdatalen += 4 + opt->opt_len;
}
/* domain root '.' + type + class + ttl + rdatalen */
@@ -827,7 +830,17 @@ attach_edns_record_max_msg_sz(sldns_buffer* pkt, struct edns_data* edns,
rdatapos = sldns_buffer_position(pkt);
sldns_buffer_write_u16(pkt, 0); /* rdatalen */
/* write rdata */
- for(opt=edns->opt_list; opt; opt=opt->next) {
+ for(opt=edns->opt_list_inplace_cb_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)
+ sldns_buffer_write(pkt, opt->opt_data, opt->opt_len);
+ }
+ for(opt=edns->opt_list_out; opt; opt=opt->next) {
if (opt->opt_code == LDNS_EDNS_PADDING) {
padding_option = opt;
continue;
@@ -860,8 +873,7 @@ attach_edns_record_max_msg_sz(sldns_buffer* pkt, struct edns_data* edns,
sldns_buffer_skip(pkt, pad_sz);
}
}
- if(edns->opt_list)
- sldns_buffer_write_u16_at(pkt, rdatapos,
+ sldns_buffer_write_u16_at(pkt, rdatapos,
sldns_buffer_position(pkt)-rdatapos-2);
sldns_buffer_flip(pkt);
}