Merge pull request #11993 from poettering/resolved-stub-edns-size
some resolved stub dns reply fixes
This commit is contained in:
commit
7b7426506a
|
@ -119,12 +119,12 @@ static inline uint16_t DNS_PACKET_PAYLOAD_SIZE_MAX(DnsPacket *p) {
|
|||
|
||||
/* Returns the advertised maximum size for replies, or the DNS default if there's nothing defined. */
|
||||
|
||||
if (p->ipproto == IPPROTO_TCP) /* we ignore EDNS(0) size data on TCP, like everybody else */
|
||||
return DNS_PACKET_SIZE_MAX;
|
||||
|
||||
if (p->opt)
|
||||
return MAX(DNS_PACKET_UNICAST_SIZE_MAX, p->opt->key->class);
|
||||
|
||||
if (p->ipproto == IPPROTO_TCP)
|
||||
return DNS_PACKET_SIZE_MAX;
|
||||
|
||||
return DNS_PACKET_UNICAST_SIZE_MAX;
|
||||
}
|
||||
|
||||
|
|
|
@ -91,7 +91,14 @@ static int dns_stub_finish_reply_packet(
|
|||
|
||||
assert(p);
|
||||
|
||||
if (!add_opt) {
|
||||
if (add_opt) {
|
||||
r = dns_packet_append_opt(p, ADVERTISE_DATAGRAM_SIZE_MAX, edns0_do, rcode, NULL);
|
||||
if (r == -EMSGSIZE) /* Hit the size limit? then indicate truncation */
|
||||
tc = true;
|
||||
else if (r < 0)
|
||||
return r;
|
||||
|
||||
} else {
|
||||
/* If the client can't to EDNS0, don't do DO either */
|
||||
edns0_do = false;
|
||||
|
||||
|
@ -117,12 +124,6 @@ static int dns_stub_finish_reply_packet(
|
|||
0 /* cd */,
|
||||
rcode));
|
||||
|
||||
if (add_opt) {
|
||||
r = dns_packet_append_opt(p, ADVERTISE_DATAGRAM_SIZE_MAX, edns0_do, rcode, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -189,17 +190,19 @@ static void dns_stub_query_complete(DnsQuery *q) {
|
|||
break;
|
||||
}
|
||||
|
||||
r = dns_query_process_cname(q);
|
||||
if (r == -ELOOP) {
|
||||
(void) dns_stub_send_failure(q->manager, q->request_dns_stream, q->request_dns_packet, DNS_RCODE_SERVFAIL, false);
|
||||
break;
|
||||
if (!truncated) {
|
||||
r = dns_query_process_cname(q);
|
||||
if (r == -ELOOP) {
|
||||
(void) dns_stub_send_failure(q->manager, q->request_dns_stream, q->request_dns_packet, DNS_RCODE_SERVFAIL, false);
|
||||
break;
|
||||
}
|
||||
if (r < 0) {
|
||||
log_debug_errno(r, "Failed to process CNAME: %m");
|
||||
break;
|
||||
}
|
||||
if (r == DNS_QUERY_RESTARTED)
|
||||
return;
|
||||
}
|
||||
if (r < 0) {
|
||||
log_debug_errno(r, "Failed to process CNAME: %m");
|
||||
break;
|
||||
}
|
||||
if (r == DNS_QUERY_RESTARTED)
|
||||
return;
|
||||
|
||||
r = dns_stub_finish_reply_packet(
|
||||
q->reply_dns_packet,
|
||||
|
|
Loading…
Reference in a new issue