X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fresolve%2Fresolved-dns-zone.c;h=b53e957d761f321b864cad9a13bd11c3207f0141;hp=5f250e7ca3989f51f6cbc3cb48888eca887b8efa;hb=bf1594f54ea4b49eee95a16796ec11c55314b2a4;hpb=902bb5d8abb2a7d258741828d212ca549ab16950 diff --git a/src/resolve/resolved-dns-zone.c b/src/resolve/resolved-dns-zone.c index 5f250e7ca..b53e957d7 100644 --- a/src/resolve/resolved-dns-zone.c +++ b/src/resolve/resolved-dns-zone.c @@ -28,7 +28,7 @@ /* Never allow more than 1K entries */ #define ZONE_MAX 1024 -static void dns_zone_item_probe_stop(DnsZoneItem *i) { +void dns_zone_item_probe_stop(DnsZoneItem *i) { DnsTransaction *t; assert(i); @@ -527,14 +527,17 @@ void dns_zone_item_ready(DnsZoneItem *i) { /* The probe got a successful reply. If we so far * weren't established we just give up. If we already * were established, and the peer has the - * lexicographically smaller IP address we continue + * lexicographically larger IP address we continue * and defend it. */ - if (!IN_SET(i->state, DNS_ZONE_ITEM_ESTABLISHED, DNS_ZONE_ITEM_VERIFYING)) + if (!IN_SET(i->state, DNS_ZONE_ITEM_ESTABLISHED, DNS_ZONE_ITEM_VERIFYING)) { + log_debug("Got a successful probe for not yet established RR, we lost."); we_lost = true; - else { + } else { assert(i->probe_transaction->received); - we_lost = memcmp(&i->probe_transaction->received->sender, &i->probe_transaction->received->destination, FAMILY_ADDRESS_SIZE(i->probe_transaction->received->family)) > 0; + we_lost = memcmp(&i->probe_transaction->received->sender, &i->probe_transaction->received->destination, FAMILY_ADDRESS_SIZE(i->probe_transaction->received->family)) < 0; + if (we_lost) + log_debug("Got a successful probe reply for an established RR, and we have a lexicographically larger IP address and thus lost."); } if (we_lost) { @@ -553,6 +556,7 @@ void dns_zone_item_ready(DnsZoneItem *i) { } static int dns_zone_item_verify(DnsZoneItem *i) { + _cleanup_free_ char *pretty = NULL; int r; assert(i); @@ -560,6 +564,9 @@ static int dns_zone_item_verify(DnsZoneItem *i) { if (i->state != DNS_ZONE_ITEM_ESTABLISHED) return 0; + dns_resource_record_to_string(i->rr, &pretty); + log_debug("Verifying RR %s", strna(pretty)); + i->state = DNS_ZONE_ITEM_VERIFYING; r = dns_zone_item_probe_start(i); if (r < 0) { @@ -573,7 +580,7 @@ static int dns_zone_item_verify(DnsZoneItem *i) { int dns_zone_check_conflicts(DnsZone *zone, DnsResourceRecord *rr) { DnsZoneItem *i, *first; - int c; + int c = 0; assert(zone); assert(rr); @@ -607,7 +614,7 @@ int dns_zone_check_conflicts(DnsZone *zone, DnsResourceRecord *rr) { int dns_zone_verify_conflicts(DnsZone *zone, DnsResourceKey *key) { DnsZoneItem *i, *first; - int c; + int c = 0; assert(zone);