new->next = next;
new->stash = NULL;
new->blocking_query = NULL;
+ new->rfd4 = NULL;
+#ifdef HAVE_IPV6
+ new->rfd6 = NULL;
+#endif
new->flags &= ~(FREC_DNSKEY_QUERY | FREC_DS_QUERY);
if ((forward->stash = blockdata_alloc((char *)header, n)))
if (server->sfd)
fd = server->sfd->fd;
else
+ {
+ fd = -1;
#ifdef HAVE_IPV6
- /* Note that we use the same random port for the DNSSEC stuff */
- if (server->addr.sa.sa_family == AF_INET6)
- {
- fd = new->rfd6->fd;
- new->rfd6->refcount++;
- }
- else
+ if (server->addr.sa.sa_family == AF_INET6)
+ {
+ if (new->rfd6 || (new->rfd6 = allocate_rfd(AF_INET6)))
+ fd = new->rfd6->fd;
+ }
+ else
#endif
- {
- fd = new->rfd4->fd;
- new->rfd4->refcount++;
- }
+ {
+ if (new->rfd4 || (new->rfd4 = allocate_rfd(AF_INET)))
+ fd = new->rfd4->fd;
+ }
+ }
- /* Send DNSSEC query to same server as original query */
- while (sendto(fd, (char *)header, nn, 0, &server->addr.sa, sa_len(&server->addr)) == -1 && retry_send());
- server->queries++;
+ if (fd != -1)
+ {
+ while (sendto(fd, (char *)header, nn, 0, &server->addr.sa, sa_len(&server->addr)) == -1 && retry_send());
+ server->queries++;
+ }
}
}
{
my_syslog(LOG_ERR, _("Unexpected missing data for DNSSEC validation"));
status = STAT_INSECURE;
- }
+ }
}
}
}