resolved: add DNS_PACKET_REPLACE
This commit is contained in:
@@ -384,9 +384,7 @@ static void dns_cache_item_update_positive(
|
||||
|
||||
DNS_ANSWER_REPLACE(i->answer, dns_answer_ref(answer));
|
||||
|
||||
dns_packet_ref(full_packet);
|
||||
dns_packet_unref(i->full_packet);
|
||||
i->full_packet = full_packet;
|
||||
DNS_PACKET_REPLACE(i->full_packet, dns_packet_ref(full_packet));
|
||||
|
||||
i->until = calculate_until(rr, min_ttl, UINT32_MAX, timestamp, false);
|
||||
i->query_flags = query_flags & CACHEABLE_QUERY_FLAGS;
|
||||
|
||||
@@ -201,6 +201,14 @@ DnsPacket *dns_packet_unref(DnsPacket *p);
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(DnsPacket*, dns_packet_unref);
|
||||
|
||||
#define DNS_PACKET_REPLACE(a, b) \
|
||||
do { \
|
||||
typeof(a)* _a = &(a); \
|
||||
typeof(b) _b = (b); \
|
||||
dns_packet_unref(*_a); \
|
||||
*_a = _b; \
|
||||
} while(0)
|
||||
|
||||
int dns_packet_validate(DnsPacket *p);
|
||||
int dns_packet_validate_reply(DnsPacket *p);
|
||||
int dns_packet_validate_query(DnsPacket *p);
|
||||
|
||||
@@ -857,8 +857,7 @@ static void dns_query_accept(DnsQuery *q, DnsQueryCandidate *c) {
|
||||
q->answer_rcode = t->answer_rcode;
|
||||
q->answer_errno = 0;
|
||||
|
||||
dns_packet_unref(q->answer_full_packet);
|
||||
q->answer_full_packet = dns_packet_ref(t->received);
|
||||
DNS_PACKET_REPLACE(q->answer_full_packet, dns_packet_ref(t->received));
|
||||
|
||||
if (FLAGS_SET(t->answer_query_flags, SD_RESOLVED_AUTHENTICATED)) {
|
||||
has_authenticated = true;
|
||||
@@ -899,8 +898,7 @@ static void dns_query_accept(DnsQuery *q, DnsQueryCandidate *c) {
|
||||
q->answer_dnssec_result = t->answer_dnssec_result;
|
||||
q->answer_query_flags = t->answer_query_flags | dns_transaction_source_to_query_flags(t->answer_source);
|
||||
q->answer_errno = t->answer_errno;
|
||||
dns_packet_unref(q->answer_full_packet);
|
||||
q->answer_full_packet = dns_packet_ref(t->received);
|
||||
DNS_PACKET_REPLACE(q->answer_full_packet, dns_packet_ref(t->received));
|
||||
|
||||
state = t->state;
|
||||
break;
|
||||
|
||||
@@ -1096,10 +1096,8 @@ void dns_transaction_process_reply(DnsTransaction *t, DnsPacket *p, bool encrypt
|
||||
assert_not_reached();
|
||||
}
|
||||
|
||||
if (t->received != p) {
|
||||
dns_packet_unref(t->received);
|
||||
t->received = dns_packet_ref(p);
|
||||
}
|
||||
if (t->received != p)
|
||||
DNS_PACKET_REPLACE(t->received, dns_packet_ref(p));
|
||||
|
||||
t->answer_source = DNS_TRANSACTION_NETWORK;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user