mirror of
https://github.com/NLnetLabs/unbound.git
synced 2026-09-03 03:48:47 +02:00
Merge branch 'features/rfc8914-ede' of github.com:NLnetLabs/unbound into features/rfc8914-ede
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user