next_type = KNOT_RRTYPE_A;
qry->flags |= QUERY_AWAIT_IPV4;
/* Hmm, no useable IPv6 then. */
- kr_nsrep_update_rep(&qry->ns, qry->ns.reputation | KR_NS_NOIP6, ctx->cache_rep);
+ qry->ns.reputation |= KR_NS_NOIP6;
+ kr_nsrep_update_rep(&qry->ns, qry->ns.reputation, ctx->cache_rep);
}
/* Bail out if the query is already pending or dependency loop. */
if (!next_type || kr_rplan_satisfies(qry->parent, qry->ns.name, KNOT_CLASS_IN, next_type)) {
/* No IPv4 nor IPv6, flag server as unuseable. */
DEBUG_MSG("=> unresolvable NS address, bailing out\n");
- kr_nsrep_update_rep(&qry->ns, qry->ns.reputation | KR_NS_NOIP4, ctx->cache_rep);
+ qry->ns.reputation |= KR_NS_NOIP4 | KR_NS_NOIP6;
+ kr_nsrep_update_rep(&qry->ns, qry->ns.reputation, ctx->cache_rep);
invalidate_ns(rplan, qry);
return kr_error(EHOSTUNREACH);
}
struct timeval now;
gettimeofday(&now, NULL);
kr_nsrep_update_rtt(&qry->ns, time_diff(&qry->timestamp, &now), ctx->cache_rtt);
+ /* Sucessful answer, lift any address resolution requests. */
+ qry->flags &= ~(QUERY_AWAIT_IPV6|QUERY_AWAIT_IPV4);
}
/* Pop query if resolved. */
}
knot_overlay_reset(&request->overlay);
return KNOT_STATE_PRODUCE;
- } else {
- /* Address resolved, clear the flag */
- qry->flags &= ~(QUERY_AWAIT_IPV6|QUERY_AWAIT_IPV4);
}
#ifndef NDEBUG
com. IN A
SECTION AUTHORITY
com. IN NS a.gtld-servers.net.
-SECTION ADDITIONAL
-a.gtld-servers.net. IN A 192.5.6.30
ENTRY_END
ENTRY_BEGIN
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id copy_query
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
a.gtld-servers.net. IN AAAA
-SECTION AUTHORITY
-. SOA bla bla 1 2 3 4 5
+SECTION ANSWER
+; Intentional bad address
+a.gtld-servers.net. IN AAAA 1:2:3::4
ENTRY_END
RANGE_END
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 1:2:3::4
+RANGE_END
+
; a.gtld-servers.net.
RANGE_BEGIN 0 100
ADDRESS 192.5.6.30