resolved: make sure we don't mark the wrong zone RRs conflicting

This commit is contained in:
Lennart Poettering 2014-08-10 22:28:12 +02:00
parent 2fb3034cb2
commit 3ef64445cd
3 changed files with 11 additions and 3 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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);