X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fresolve%2Fresolved-dns-transaction.c;h=74b0634142be5fbd9fd141969402c27ac44617be;hp=e76940e18ed82b0c86b0f685209a92c54a56672f;hb=30fbcf24460263961855e0ce4d8867fd2af3e149;hpb=a407657425a3e47fd2b559cd3bc800f791303f63 diff --git a/src/resolve/resolved-dns-transaction.c b/src/resolve/resolved-dns-transaction.c index e76940e18..74b063414 100644 --- a/src/resolve/resolved-dns-transaction.c +++ b/src/resolve/resolved-dns-transaction.c @@ -78,7 +78,7 @@ int dns_transaction_new(DnsTransaction **ret, DnsScope *s, DnsQuestion *q) { assert(s); assert(q); - r = hashmap_ensure_allocated(&s->manager->dns_transactions, NULL, NULL); + r = hashmap_ensure_allocated(&s->manager->dns_transactions, NULL); if (r < 0) return r; @@ -118,8 +118,8 @@ static void dns_transaction_stop(DnsTransaction *t) { } static void dns_transaction_tentative(DnsTransaction *t, DnsPacket *p) { + _cleanup_free_ char *pretty = NULL; DnsZoneItem *z; - Iterator i; assert(t); assert(p); @@ -127,23 +127,33 @@ static void dns_transaction_tentative(DnsTransaction *t, DnsPacket *p) { if (manager_our_packet(t->scope->manager, p) != 0) return; - log_debug("Transaction on scope %s on %s/%s got tentative packet", + in_addr_to_string(p->family, &p->sender, &pretty); + + log_debug("Transaction on scope %s on %s/%s got tentative packet from %s", dns_protocol_to_string(t->scope->protocol), t->scope->link ? t->scope->link->name : "*", - t->scope->family == AF_UNSPEC ? "*" : af_to_name(t->scope->family)); + t->scope->family == AF_UNSPEC ? "*" : af_to_name(t->scope->family), + pretty); /* RFC 4795, Section 4.1 says that the peer with the * lexicographically smaller IP address loses */ - if (memcmp(&p->sender, &p->destination, FAMILY_ADDRESS_SIZE(p->family)) < 0) { - log_debug("Peer has lexicographically smaller IP address and thus lost in the conflict."); + if (memcmp(&p->sender, &p->destination, FAMILY_ADDRESS_SIZE(p->family)) >= 0) { + log_debug("Peer has lexicographically larger IP address and thus lost in the conflict."); return; } - log_debug("We have the lexicographically smaller IP address and thus lost in the conflict."); + log_debug("We have the lexicographically larger IP address and thus lost in the conflict."); t->block_gc++; - SET_FOREACH(z, t->zone_items, i) + while ((z = set_first(t->zone_items))) { + /* First, make sure the zone item drops the reference + * to us */ + dns_zone_item_probe_stop(z); + + /* Secondly, report this as conflict, so that we might + * look for a different hostname */ dns_zone_item_conflict(z); + } t->block_gc--; dns_transaction_gc(t);