From 3e6eeb504d967cd1ea58e1aecb76dcac9d31f2de Mon Sep 17 00:00:00 2001 From: Tom Carpay Date: Wed, 27 Oct 2021 13:48:49 +0000 Subject: [PATCH] Modules have their own outgoing ends options list But nothing happens with it yet --- daemon/worker.c | 3 +++ libunbound/libworker.c | 1 + services/authzone.c | 3 +++ util/data/msgparse.c | 2 ++ util/data/msgparse.h | 3 +++ validator/autotrust.c | 1 + 6 files changed, 13 insertions(+) diff --git a/daemon/worker.c b/daemon/worker.c index b438700af..dbb2da1fc 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1012,6 +1012,7 @@ answer_notify(struct worker* w, struct query_info* qinfo, edns->ext_rcode = 0; edns->bits &= EDNS_DO; edns->opt_list = 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); @@ -1270,6 +1271,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, edns.udp_size = EDNS_ADVERTISED_SIZE; edns.bits &= EDNS_DO; edns.opt_list = NULL; + edns.opt_list_modules_out = NULL; edns.padding_block_size = 0; verbose(VERB_ALGO, "query with bad edns version."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); @@ -1297,6 +1299,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, edns.udp_size = EDNS_ADVERTISED_SIZE; edns.bits &= EDNS_DO; edns.opt_list = NULL; + edns.opt_list_modules_out = NULL; verbose(VERB_ALGO, "query with bad edns keepalive."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); error_encode(c->buffer, LDNS_RCODE_FORMERR, &qinfo, diff --git a/libunbound/libworker.c b/libunbound/libworker.c index 151f50cf5..c4ed660f3 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -601,6 +601,7 @@ setup_qinfo_edns(struct libworker* w, struct ctx_query* q, edns->edns_version = 0; edns->bits = EDNS_DO; edns->opt_list = NULL; + edns->opt_list_modules_out = NULL; edns->padding_block_size = 0; if(sldns_buffer_capacity(w->back->udp_buff) < 65535) edns->udp_size = (uint16_t)sldns_buffer_capacity( diff --git a/services/authzone.c b/services/authzone.c index 44dda2a71..38cc7ab21 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -5359,6 +5359,7 @@ xfr_transfer_lookup_host(struct auth_xfer* xfr, struct module_env* env) edns.edns_version = 0; edns.bits = EDNS_DO; edns.opt_list = NULL; + edns.opt_list_modules_out = NULL; edns.padding_block_size = 0; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); @@ -6548,6 +6549,7 @@ xfr_probe_lookup_host(struct auth_xfer* xfr, struct module_env* env) edns.edns_version = 0; edns.bits = EDNS_DO; edns.opt_list = NULL; + edns.opt_list_modules_out = NULL; edns.padding_block_size = 0; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); @@ -8323,6 +8325,7 @@ zonemd_lookup_dnskey(struct auth_zone* z, struct module_env* env) edns.edns_version = 0; edns.bits = EDNS_DO; edns.opt_list = NULL; + edns.opt_list_modules_out = NULL; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); else edns.udp_size = 65535; diff --git a/util/data/msgparse.c b/util/data/msgparse.c index 6ee5559db..fb50c9165 100644 --- a/util/data/msgparse.c +++ b/util/data/msgparse.c @@ -1020,6 +1020,7 @@ parse_extract_edns(struct msg_parse* msg, struct edns_data* edns, edns->bits = sldns_read_uint16(&found->rr_last->ttl_data[2]); edns->udp_size = ntohs(found->rrset_class); edns->opt_list = NULL; + edns->opt_list_modules_out = NULL; edns->padding_block_size = 0; /* take the options */ @@ -1094,6 +1095,7 @@ parse_edns_from_pkt(sldns_buffer* pkt, struct edns_data* edns, edns->edns_version = sldns_buffer_read_u8(pkt); edns->bits = sldns_buffer_read_u16(pkt); edns->opt_list = NULL; + edns->opt_list_modules_out = NULL; edns->padding_block_size = 0; /* take the options */ diff --git a/util/data/msgparse.h b/util/data/msgparse.h index d2fd9c806..434a5b0b8 100644 --- a/util/data/msgparse.h +++ b/util/data/msgparse.h @@ -227,6 +227,9 @@ struct edns_data { uint16_t udp_size; /** rdata element list, or NULL if none */ struct edns_option* opt_list; + /** rdata element list of outgoing edns options from modules + * or NULL if none */ + struct edns_option* opt_list_modules_out; /** block size to pad */ uint16_t padding_block_size; }; diff --git a/validator/autotrust.c b/validator/autotrust.c index 9643a3ddb..080385e93 100644 --- a/validator/autotrust.c +++ b/validator/autotrust.c @@ -2378,6 +2378,7 @@ probe_anchor(struct module_env* env, struct trust_anchor* tp) edns.edns_version = 0; edns.bits = EDNS_DO; edns.opt_list = NULL; + edns.opt_list_modules_out = NULL; edns.padding_block_size = 0; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf);