summaryrefslogtreecommitdiff
path: root/src/resolve
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2014-08-10 22:28:12 +0200
committerLennart Poettering <lennart@poettering.net>2014-08-11 15:06:22 +0200
commit3ef64445cdf12d7703aa79b39f3c170037d587c7 (patch)
tree84ac09bbb4a35868aebe9a0f3afef05bec13219d /src/resolve
parent2fb3034cb21c745ed4f9aa4cba57563f7f071466 (diff)
downloadsystemd-3ef64445cdf12d7703aa79b39f3c170037d587c7.tar.gz
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.c10
-rw-r--r--src/resolve/resolved-dns-zone.c2
-rw-r--r--src/resolve/resolved-dns-zone.h2
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);