diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-08-10 22:28:12 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-08-11 15:06:22 +0200 |
commit | 3ef64445cdf12d7703aa79b39f3c170037d587c7 (patch) | |
tree | 84ac09bbb4a35868aebe9a0f3afef05bec13219d /src/resolve | |
parent | 2fb3034cb21c745ed4f9aa4cba57563f7f071466 (diff) | |
download | systemd-3ef64445cdf12d7703aa79b39f3c170037d587c7.tar.gz systemd-3ef64445cdf12d7703aa79b39f3c170037d587c7.tar.bz2 systemd-3ef64445cdf12d7703aa79b39f3c170037d587c7.zip |
resolved: make sure we don't mark the wrong zone RRs conflicting
Diffstat (limited to 'src/resolve')
-rw-r--r-- | src/resolve/resolved-dns-transaction.c | 10 | ||||
-rw-r--r-- | src/resolve/resolved-dns-zone.c | 2 | ||||
-rw-r--r-- | src/resolve/resolved-dns-zone.h | 2 |
3 files changed, 11 insertions, 3 deletions
diff --git a/src/resolve/resolved-dns-transaction.c b/src/resolve/resolved-dns-transaction.c index cf2987d192..dfed74dc91 100644 --- a/src/resolve/resolved-dns-transaction.c +++ b/src/resolve/resolved-dns-transaction.c @@ -120,7 +120,6 @@ 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); @@ -146,8 +145,15 @@ static void dns_transaction_tentative(DnsTransaction *t, DnsPacket *p) { log_debug("We have the lexicographically smaller 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); diff --git a/src/resolve/resolved-dns-zone.c b/src/resolve/resolved-dns-zone.c index 13b1b3c595..ebbd1e2bf1 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); diff --git a/src/resolve/resolved-dns-zone.h b/src/resolve/resolved-dns-zone.h index 482df2f15f..71851265c6 100644 --- a/src/resolve/resolved-dns-zone.h +++ b/src/resolve/resolved-dns-zone.h @@ -76,3 +76,5 @@ int dns_zone_check_conflicts(DnsZone *zone, DnsResourceRecord *rr); int dns_zone_verify_conflicts(DnsZone *zone, DnsResourceKey *key); void dns_zone_verify_all(DnsZone *zone); + +void dns_zone_item_probe_stop(DnsZoneItem *i); |