]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix that auth zone uses correct network type for sockets for
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 11 Apr 2019 08:00:33 +0000 (08:00 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 11 Apr 2019 08:00:33 +0000 (08:00 +0000)
  SOA serial probes.  This fixes that probes fail because earlier
  probe addresses are unreachable.

git-svn-id: file:///svn/unbound/trunk@5154 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
services/authzone.c
services/authzone.h

index 0d110b214cf55151f4d32eb2a4b6a73f75128e54..edb574cb2cce0115f5ec6fe97c8573ee3bf4f83a 100644 (file)
@@ -1,3 +1,8 @@
+11 April 2019: Wouter
+       - Fix that auth zone uses correct network type for sockets for
+         SOA serial probes.  This fixes that probes fail because earlier
+         probe addresses are unreachable.
+
 8 April 2019: Wouter
        - Fix to use event_assign with libevent for thread-safety.
        - verbose information about auth zone lookup process, also lookup
index e16a39649a0a96438d03f2ab8b1cfdabee033688..c3691bd6cdc0f38b81bdf56251818c35e834a324 100644 (file)
@@ -5900,7 +5900,18 @@ xfr_probe_send_probe(struct auth_xfer* xfr, struct module_env* env,
                xfr->task_probe->id = (uint16_t)(ub_random(env->rnd)&0xffff);
        xfr_create_soa_probe_packet(xfr, env->scratch_buffer, 
                xfr->task_probe->id);
+       /* we need to remove the cp if we have a different ip4/ip6 type now */
+       if(xfr->task_probe->cp &&
+               ((xfr->task_probe->cp_is_ip6 && !addr_is_ip6(&addr, addrlen)) ||
+               (!xfr->task_probe->cp_is_ip6 && addr_is_ip6(&addr, addrlen)))
+               ) {
+               comm_point_delete(xfr->task_probe->cp);
+               xfr->task_probe->cp = NULL;
+       }
        if(!xfr->task_probe->cp) {
+               if(addr_is_ip6(&addr, addrlen))
+                       xfr->task_probe->cp_is_ip6 = 1;
+               else    xfr->task_probe->cp_is_ip6 = 0;
                xfr->task_probe->cp = outnet_comm_point_for_udp(env->outnet,
                        auth_xfer_probe_udp_callback, xfr, &addr, addrlen);
                if(!xfr->task_probe->cp) {
index 4706803a86b305d33b8ed094bf6c763289712c97..376fe5144091f11ebcd37e426431f9ee4d176370 100644 (file)
@@ -327,6 +327,8 @@ struct auth_probe {
        /** the SOA probe udp event.
         * on the workers event base. */
        struct comm_point* cp;
+       /** is the cp for ip6 or ip4 */
+       int cp_is_ip6;
        /** timeout for packets.
         * on the workers event base. */
        struct comm_timer* timer;