Merge branch 'features/rfc8914-ede' of github.com:NLnetLabs/unbound into features/rfc8914-ede

This commit is contained in:
Tom Carpay
2021-09-20 09:35:30 +00:00
3 changed files with 36 additions and 0 deletions
+6
View File
@@ -1155,6 +1155,12 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
acl = acl_get_control(acladdr);
if((ret=deny_refuse_all(c, acl, worker, repinfo)) != -1)
{
/* parse packet to check for EDNS. Add EDE blocked if possible */
sldns_buffer_rewind(c->buffer)
if (msgparse_check_edns_in_packet(c->buffer))
EDNS_OPT_APPEND_EDE(edns, worker->scratchpad,
LDNS_EDE_BLOCKED, "");
if(ret == 1)
goto send_reply;
return ret;
+22
View File
@@ -1127,3 +1127,25 @@ log_edns_opt_list(enum verbosity_value level, const char* info_str,
}
}
}
/** parse a DNS packet to find out if it contains an EDNS section */
int
msgparse_check_edns_in_packet(sldns_buffer* pkt)
{
size_t rdata_len;
uint8_t* rdata_ptr;
log_assert(LDNS_QDCOUNT(sldns_buffer_begin(pkt)) == 1);
if(LDNS_ANCOUNT(sldns_buffer_begin(pkt)) != 0 ||
LDNS_NSCOUNT(sldns_buffer_begin(pkt)) != 0) {
if(!skip_pkt_rrs(pkt, ((int)LDNS_ANCOUNT(sldns_buffer_begin(pkt)))+
((int)LDNS_NSCOUNT(sldns_buffer_begin(pkt)))))
return LDNS_RCODE_FORMERR;
}
/* check edns section is present */
if(LDNS_ARCOUNT(sldns_buffer_begin(pkt)) == 1)
return 0;
else
return 1;
}
+8
View File
@@ -341,4 +341,12 @@ void msgparse_bucket_remove(struct msg_parse* msg, struct rrset_parse* rrset);
void log_edns_opt_list(enum verbosity_value level, const char* info_str,
struct edns_option* list);
/**
* Verify if the packet contains EDNS (RFC6891)
* @param pkt: the packet.
* @return 0 if true, 1 if false
*/
int msgparse_check_edns_in_packet(sldns_buffer* pkt);
#endif /* UTIL_DATA_MSGPARSE_H */