chiark / gitweb /
resolved: fix typo in sd_notify() call
[elogind.git] / src / resolve / resolved-dns-zone.c
index 5f250e7ca3989f51f6cbc3cb48888eca887b8efa..8098ff5e70cd14878dd206b189efe4843a8739b5 100644 (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);
 
@@ -126,11 +126,11 @@ static int dns_zone_init(DnsZone *z) {
 
         assert(z);
 
-        r = hashmap_ensure_allocated(&z->by_key, dns_resource_key_hash_func, dns_resource_key_compare_func);
+        r = hashmap_ensure_allocated(&z->by_key, &dns_resource_key_hash_ops);
         if (r < 0)
                 return r;
 
-        r = hashmap_ensure_allocated(&z->by_name, dns_name_hash_func, dns_name_compare_func);
+        r = hashmap_ensure_allocated(&z->by_name, &dns_name_hash_ops);
         if (r < 0)
                 return r;
 
@@ -194,7 +194,7 @@ static int dns_zone_item_probe_start(DnsZoneItem *i)  {
                         return r;
         }
 
-        r = set_ensure_allocated(&t->zone_items, NULL, NULL);
+        r = set_ensure_allocated(&t->zone_items, NULL);
         if (r < 0)
                 goto gc;
 
@@ -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);