Lines Matching refs:qstate

139 iter_new(struct module_qstate* qstate, int id)  in iter_new()  argument
142 qstate->region, sizeof(struct iter_qstate)); in iter_new()
143 qstate->minfo[id] = iq; in iter_new()
167 iq->chase_flags = qstate->query_flags; in iter_new()
169 iq->qchase = qstate->qinfo; in iter_new()
173 if (qstate->env->cfg->qname_minimisation) in iter_new()
232 error_supers(struct module_qstate* qstate, int id, struct module_qstate* super) in error_supers() argument
234 struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; in error_supers()
237 if(qstate->qinfo.qtype == LDNS_RR_TYPE_A || in error_supers()
238 qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA) { in error_supers()
244 qstate->qinfo.qname, qstate->qinfo.qname_len); in error_supers()
260 delegpt_mark_neg(dpns, qstate->qinfo.qtype); in error_supers()
267 if(qstate->qinfo.qtype == LDNS_RR_TYPE_NS) { in error_supers()
285 error_response(struct module_qstate* qstate, int id, int rcode) in error_response() argument
290 qstate->return_rcode = rcode; in error_response()
291 qstate->return_msg = NULL; in error_response()
292 qstate->ext_state[id] = module_finished; in error_response()
306 error_response_cache(struct module_qstate* qstate, int id, int rcode) in error_response_cache() argument
310 if(qstate->no_cache_store) { in error_response_cache()
311 return error_response(qstate, id, rcode); in error_response_cache()
313 if(qstate->prefetch_leeway > NORR_TTL) { in error_response_cache()
316 if(dns_cache_prefetch_adjust(qstate->env, &qstate->qinfo, in error_response_cache()
317 NORR_TTL, qstate->query_flags)) in error_response_cache()
318 return error_response(qstate, id, rcode); in error_response_cache()
321 if((msg=msg_cache_lookup(qstate->env, in error_response_cache()
322 qstate->qinfo.qname, qstate->qinfo.qname_len, in error_response_cache()
323 qstate->qinfo.qtype, qstate->qinfo.qclass, in error_response_cache()
324 qstate->query_flags, 0, in error_response_cache()
325 qstate->env->cfg->serve_expired)) != NULL) { in error_response_cache()
327 if(qstate->env->cfg->serve_expired && rep) { in error_response_cache()
328 if(qstate->env->cfg->serve_expired_ttl_reset && in error_response_cache()
329 *qstate->env->now + qstate->env->cfg->serve_expired_ttl in error_response_cache()
333 rep->serve_expired_ttl = *qstate->env->now + in error_response_cache()
334 qstate->env->cfg->serve_expired_ttl; in error_response_cache()
339 *qstate->env->now; in error_response_cache()
347 (qstate->env->cfg->serve_expired || in error_response_cache()
348 *qstate->env->now <= rep->ttl)) { in error_response_cache()
351 return error_response(qstate, id, rcode); in error_response_cache()
370 iter_dns_store(qstate->env, &qstate->qinfo, &err, 0, 0, 0, NULL, in error_response_cache()
371 qstate->query_flags, qstate->qstarttime); in error_response_cache()
372 return error_response(qstate, id, rcode); in error_response_cache()
485 iter_add_prepend_answer(struct module_qstate* qstate, struct iter_qstate* iq, in iter_add_prepend_answer() argument
489 qstate->region, sizeof(struct iter_prep_list)); in iter_add_prepend_answer()
510 iter_add_prepend_auth(struct module_qstate* qstate, struct iter_qstate* iq, in iter_add_prepend_auth() argument
514 qstate->region, sizeof(struct iter_prep_list)); in iter_add_prepend_auth()
542 handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq, in handle_cname_response() argument
561 if(!iter_add_prepend_answer(qstate, iq, r)) in handle_cname_response()
570 if(!iter_add_prepend_answer(qstate, iq, r)) in handle_cname_response()
584 if(!iter_add_prepend_auth(qstate, iq, r)) in handle_cname_response()
641 errinf_reply(struct module_qstate* qstate, struct iter_qstate* iq) in errinf_reply() argument
643 if(qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) in errinf_reply()
645 if((qstate->reply && qstate->reply->remote_addrlen != 0) || in errinf_reply()
648 if(qstate->reply && qstate->reply->remote_addrlen != 0) in errinf_reply()
649 addr_to_str(&qstate->reply->remote_addr, in errinf_reply()
650 qstate->reply->remote_addrlen, from, in errinf_reply()
655 errinf(qstate, frm); in errinf_reply()
659 errinf(qstate, "upstream response failed scrub"); in errinf_reply()
661 errinf(qstate, "could not parse upstream response"); in errinf_reply()
663 errinf(qstate, "upstream server timeout"); in errinf_reply()
665 errinf(qstate, "no server to query"); in errinf_reply()
668 errinf(qstate, "no addresses for nameservers"); in errinf_reply()
669 else errinf(qstate, "nameserver addresses not usable"); in errinf_reply()
671 errinf(qstate, "have no nameserver names"); in errinf_reply()
673 errinf(qstate, "NS record was dnssec bogus"); in errinf_reply()
683 errinf(qstate, rcode); in errinf_reply()
687 errinf(qstate, "nodata answer"); in errinf_reply()
809 uint16_t qclass, struct module_qstate* qstate, int id, in generate_sub_request() argument
842 qstate->env->add_sub)); in generate_sub_request()
843 if(!(*qstate->env->add_sub)(qstate, &qinf, in generate_sub_request()
851 qstate->env->attach_sub)); in generate_sub_request()
852 if(!(*qstate->env->attach_sub)(qstate, &qinf, qflags, prime, in generate_sub_request()
867 qstate->env->kill_sub)); in generate_sub_request()
868 (*qstate->env->kill_sub)(subq); in generate_sub_request()
889 if(qstate->env->cfg->qname_minimisation) in generate_sub_request()
907 prime_root(struct module_qstate* qstate, struct iter_qstate* iq, int id, in prime_root() argument
916 dp = hints_find_root(qstate->env->hints, qclass, nolock); in prime_root()
924 qclass, qstate, id, iq, QUERYTARGETS_STATE, PRIME_RESP_STATE, in prime_root()
926 lock_rw_unlock(&qstate->env->hints->lock); in prime_root()
937 lock_rw_unlock(&qstate->env->hints->lock); in prime_root()
941 qstate->env->kill_sub)); in prime_root()
942 (*qstate->env->kill_sub)(subq); in prime_root()
948 qstate->env, subiq->dp, NULL, subq->qinfo.qclass); in prime_root()
950 lock_rw_unlock(&qstate->env->hints->lock); in prime_root()
954 qstate->ext_state[id] = module_wait_subquery; in prime_root()
973 prime_stub(struct module_qstate* qstate, struct iter_qstate* iq, int id, in prime_stub() argument
984 stub = hints_lookup_stub(qstate->env->hints, qname, qclass, iq->dp, in prime_stub()
993 lock_rw_unlock(&qstate->env->hints->lock); in prime_stub()
1003 iq->dp = delegpt_copy(stub_dp, qstate->region); in prime_stub()
1004 lock_rw_unlock(&qstate->env->hints->lock); in prime_stub()
1007 errinf(qstate, "malloc failure, priming stub"); in prime_stub()
1008 (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); in prime_stub()
1023 LDNS_RR_TYPE_NS, qclass, qstate, id, iq, in prime_stub()
1025 lock_rw_unlock(&qstate->env->hints->lock); in prime_stub()
1027 errinf(qstate, "could not generate lookup for stub prime"); in prime_stub()
1028 (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); in prime_stub()
1038 lock_rw_unlock(&qstate->env->hints->lock); in prime_stub()
1042 qstate->env->kill_sub)); in prime_stub()
1043 (*qstate->env->kill_sub)(subq); in prime_stub()
1044 errinf(qstate, "malloc failure, in stub prime"); in prime_stub()
1045 (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); in prime_stub()
1054 qstate->env, subiq->dp, NULL, subq->qinfo.qclass); in prime_stub()
1056 lock_rw_unlock(&qstate->env->hints->lock); in prime_stub()
1060 qstate->ext_state[id] = module_wait_subquery; in prime_stub()
1069 auth_zone_delegpt(struct module_qstate* qstate, struct iter_qstate* iq, in auth_zone_delegpt() argument
1079 lock_rw_rdlock(&qstate->env->auth_zones->lock); in auth_zone_delegpt()
1080 z = auth_zones_find_zone(qstate->env->auth_zones, delname, delnamelen, in auth_zone_delegpt()
1081 qstate->qinfo.qclass); in auth_zone_delegpt()
1083 lock_rw_unlock(&qstate->env->auth_zones->lock); in auth_zone_delegpt()
1087 lock_rw_unlock(&qstate->env->auth_zones->lock); in auth_zone_delegpt()
1090 && iq->dp->auth_dp && qstate->blacklist && in auth_zone_delegpt()
1107 if(qstate->blacklist && z->fallback_enabled) { in auth_zone_delegpt()
1122 qstate->region, sizeof(*dp)); in auth_zone_delegpt()
1130 errinf(qstate, "malloc failure"); in auth_zone_delegpt()
1133 dp->name = regional_alloc_init(qstate->region, in auth_zone_delegpt()
1142 errinf(qstate, "malloc failure"); in auth_zone_delegpt()
1165 generate_a_aaaa_check(struct module_qstate* qstate, struct iter_qstate* iq, in generate_a_aaaa_check() argument
1168 struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; in generate_a_aaaa_check()
1188 if(qstate->qinfo.qtype == ntohs(s->rk.type) && in generate_a_aaaa_check()
1189 qstate->qinfo.qclass == ntohs(s->rk.rrset_class) && in generate_a_aaaa_check()
1190 query_dname_compare(qstate->qinfo.qname, in generate_a_aaaa_check()
1192 (qstate->query_flags&BIT_RD) && in generate_a_aaaa_check()
1193 !(qstate->query_flags&BIT_CD)) in generate_a_aaaa_check()
1202 qstate, id, iq, in generate_a_aaaa_check()
1220 generate_ns_check(struct module_qstate* qstate, struct iter_qstate* iq, int id) in generate_ns_check() argument
1222 struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; in generate_ns_check()
1228 if(!can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, in generate_ns_check()
1232 if(qstate->qinfo.qtype == LDNS_RR_TYPE_NS && in generate_ns_check()
1233 query_dname_compare(iq->dp->name, qstate->qinfo.qname)==0 && in generate_ns_check()
1234 (qstate->query_flags&BIT_RD) && !(qstate->query_flags&BIT_CD)){ in generate_ns_check()
1236 generate_a_aaaa_check(qstate, iq, id); in generate_ns_check()
1240 if(qstate->qinfo.qtype == LDNS_RR_TYPE_DS) in generate_ns_check()
1246 LDNS_RR_TYPE_NS, iq->qchase.qclass, qstate, id, iq, in generate_ns_check()
1262 qstate->env->kill_sub)); in generate_ns_check()
1263 (*qstate->env->kill_sub)(subq); in generate_ns_check()
1286 generate_dnskey_prefetch(struct module_qstate* qstate, in generate_dnskey_prefetch() argument
1293 if(qstate->qinfo.qtype == LDNS_RR_TYPE_DNSKEY && in generate_dnskey_prefetch()
1294 query_dname_compare(iq->dp->name, qstate->qinfo.qname)==0 && in generate_dnskey_prefetch()
1295 (qstate->query_flags&BIT_RD) && !(qstate->query_flags&BIT_CD)){ in generate_dnskey_prefetch()
1305 if(mesh_jostle_exceeded(qstate->env->mesh)) in generate_dnskey_prefetch()
1312 LDNS_RR_TYPE_DNSKEY, iq->qchase.qclass, qstate, id, iq, in generate_dnskey_prefetch()
1337 forward_request(struct module_qstate* qstate, struct iter_qstate* iq) in forward_request() argument
1351 dp = forwards_lookup(qstate->env->fwds, delname, iq->qchase.qclass, in forward_request()
1356 iq->dp = delegpt_copy(dp, qstate->region); in forward_request()
1357 lock_rw_unlock(&qstate->env->fwds->lock); in forward_request()
1382 processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, in processInitRequest() argument
1390 log_query_info(VERB_DETAIL, "resolving", &qstate->qinfo); in processInitRequest()
1398 errinf(qstate, "request has exceeded the maximum number " in processInitRequest()
1401 errinf_dname(qstate, "stop at", iq->qchase.qname); in processInitRequest()
1402 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processInitRequest()
1413 errinf(qstate, "request has exceeded the maximum dependency " in processInitRequest()
1415 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processInitRequest()
1419 if(qstate->qinfo.qclass == LDNS_RR_CLASS_ANY) { in processInitRequest()
1431 !can_have_last_resort(qstate->env, iq->dp->name, in processInitRequest()
1442 if(qstate->env->auth_zones) { in processInitRequest()
1445 rpz_callback_from_iterator_cname(qstate, iq); in processInitRequest()
1457 if(!handle_cname_response(qstate, iq, forged_response, in processInitRequest()
1459 errinf(qstate, "malloc failure, CNAME info"); in processInitRequest()
1460 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processInitRequest()
1465 rpz_callback_from_iterator_cname(qstate, iq); in processInitRequest()
1468 qstate->ext_state[id] = module_finished; in processInitRequest()
1469 qstate->return_rcode = LDNS_RCODE_NOERROR; in processInitRequest()
1470 qstate->return_msg = forged_response; in processInitRequest()
1473 if(!iter_prepend(iq, qstate->return_msg, qstate->region)) { in processInitRequest()
1475 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processInitRequest()
1477 qstate->return_msg->qinfo = qstate->qinfo; in processInitRequest()
1486 sock_list_insert(&qstate->reply_origin, NULL, 0, qstate->region); in processInitRequest()
1487 if(qstate->env->cfg->qname_minimisation) in processInitRequest()
1493 if (iter_stub_fwd_no_cache(qstate, &iq->qchase, &dpname, &dpnamelen, in processInitRequest()
1497 qstate->no_cache_lookup = 1; in processInitRequest()
1498 qstate->no_cache_store = 1; in processInitRequest()
1500 } else if(qstate->blacklist) { in processInitRequest()
1505 } else if(!qstate->no_cache_lookup) { in processInitRequest()
1506 msg = dns_cache_lookup(qstate->env, iq->qchase.qname, in processInitRequest()
1508 iq->qchase.qclass, qstate->query_flags, in processInitRequest()
1509 qstate->region, qstate->env->scratch, 0, dpname, in processInitRequest()
1511 if(!msg && qstate->env->neg_cache && in processInitRequest()
1512 iter_qname_indicates_dnssec(qstate->env, &iq->qchase)) { in processInitRequest()
1515 msg = val_neg_getmsg(qstate->env->neg_cache, &iq->qchase, in processInitRequest()
1516 qstate->region, qstate->env->rrset_cache, in processInitRequest()
1517 qstate->env->scratch_buffer, in processInitRequest()
1518 *qstate->env->now, 1/*add SOA*/, NULL, in processInitRequest()
1519 qstate->env->cfg); in processInitRequest()
1523 if(msg && query_dname_compare(qstate->qinfo.qname, in processInitRequest()
1544 if(!handle_cname_response(qstate, iq, msg, in processInitRequest()
1546 errinf(qstate, "failed to prepend CNAME " in processInitRequest()
1548 return error_response(qstate, id, in processInitRequest()
1560 sock_list_insert(&qstate->reply_origin, NULL, 0, qstate->region); in processInitRequest()
1561 if(qstate->env->cfg->qname_minimisation) in processInitRequest()
1566 if(qstate->reply_origin) in processInitRequest()
1567 sock_list_insert(&qstate->reply_origin, NULL, 0, qstate->region); in processInitRequest()
1569 errinf(qstate, "SERVFAIL in cache"); in processInitRequest()
1577 if(forward_request(qstate, iq)) in processInitRequest()
1581 errinf(qstate, "malloc failure for forward zone"); in processInitRequest()
1582 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processInitRequest()
1584 if(!cache_fill_missing(qstate->env, iq->qchase.qclass, in processInitRequest()
1585 qstate->region, iq->dp, 0)) { in processInitRequest()
1586 errinf(qstate, "malloc failure, copy extra info into delegation point"); in processInitRequest()
1587 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processInitRequest()
1589 if((qstate->query_flags&BIT_RD)==0) { in processInitRequest()
1599 errinf(qstate, "cannot forward RD=0 query"); in processInitRequest()
1600 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processInitRequest()
1619 errinf(qstate, "malloc failure, for delegation info"); in processInitRequest()
1620 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processInitRequest()
1629 (iq->qchase.qtype == LDNS_RR_TYPE_NS && qstate->prefetch_leeway in processInitRequest()
1630 … && can_have_last_resort(qstate->env, delname, delnamelen, iq->qchase.qclass, NULL, NULL, NULL))) { in processInitRequest()
1638 qstate->prefetch_leeway))) in processInitRequest()
1648 iq->dp = dns_cache_find_delegation(qstate->env, delname, in processInitRequest()
1650 qstate->region, &iq->deleg_msg, in processInitRequest()
1651 *qstate->env->now+qstate->prefetch_leeway, 1, in processInitRequest()
1661 if(!auth_zone_delegpt(qstate, iq, delname, delnamelen)) in processInitRequest()
1662 return error_response(qstate, id, in processInitRequest()
1667 r = prime_stub(qstate, iq, id, delname, in processInitRequest()
1673 if(forwards_lookup_root(qstate->env->fwds, in processInitRequest()
1675 lock_rw_unlock(&qstate->env->fwds->lock); in processInitRequest()
1678 iq->dp = hints_find_root(qstate->env->hints, in processInitRequest()
1682 errinf(qstate, "no hints for this class"); in processInitRequest()
1683 return error_response_cache(qstate, id, in processInitRequest()
1686 iq->dp = delegpt_copy(iq->dp, qstate->region); in processInitRequest()
1687 lock_rw_unlock(&qstate->env->hints->lock); in processInitRequest()
1690 errinf(qstate, "malloc failure, in safety belt"); in processInitRequest()
1691 return error_response(qstate, id, in processInitRequest()
1698 if(!prime_root(qstate, iq, id, iq->qchase.qclass)) in processInitRequest()
1699 return error_response(qstate, id, in processInitRequest()
1708 if(!iq->ratelimit_ok && qstate->prefetch_leeway) in processInitRequest()
1724 if(iter_dp_is_useless(&qstate->qinfo, qstate->query_flags, in processInitRequest()
1728 …if(!can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, iq->qchase.qclass, &have_dp, … in processInitRequest()
1736 errinf(qstate, "malloc failure, for fallback to config"); in processInitRequest()
1737 return error_response(qstate, in processInitRequest()
1745 errinf(qstate, "no useful nameservers, " in processInitRequest()
1747 errinf_dname(qstate, "for zone", iq->dp->name); in processInitRequest()
1748 return error_response(qstate, id, in processInitRequest()
1756 iq->dp = hints_find_root(qstate->env->hints, in processInitRequest()
1762 return error_response(qstate, id, in processInitRequest()
1765 iq->dp = delegpt_copy(iq->dp, qstate->region); in processInitRequest()
1766 lock_rw_unlock(&qstate->env->hints->lock); in processInitRequest()
1769 errinf(qstate, "malloc failure, in safety belt, for root"); in processInitRequest()
1770 return error_response(qstate, id, in processInitRequest()
1810 processInitRequest2(struct module_qstate* qstate, struct iter_qstate* iq, in processInitRequest2() argument
1816 &qstate->qinfo); in processInitRequest2()
1825 errinf(qstate, "malloc failure, no delegation info"); in processInitRequest2()
1826 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processInitRequest2()
1831 qstate->env->hints, iq->qchase.qname, iq->qchase.qclass, in processInitRequest2()
1839 if(stub) { lock_rw_unlock(&qstate->env->hints->lock); } in processInitRequest2()
1849 if(!auth_zone_delegpt(qstate, iq, delname, delnamelen)) in processInitRequest2()
1850 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processInitRequest2()
1853 if(prime_stub(qstate, iq, id, delname, iq->qchase.qclass)) { in processInitRequest2()
1874 processInitRequest3(struct module_qstate* qstate, struct iter_qstate* iq, in processInitRequest3() argument
1878 &qstate->qinfo); in processInitRequest3()
1881 iq->dnssec_expected = iter_indicates_dnssec(qstate->env, iq->dp, in processInitRequest3()
1886 if(!(qstate->query_flags & BIT_RD) && iq->deleg_msg) { in processInitRequest3()
1891 if(qstate->reply_origin) in processInitRequest3()
1892 sock_list_insert(&qstate->reply_origin, NULL, 0, qstate->region); in processInitRequest3()
1900 if(iq->dnssec_expected && qstate->env->cfg->prefetch_key && in processInitRequest3()
1901 !(qstate->query_flags&BIT_CD)) { in processInitRequest3()
1902 generate_dnskey_prefetch(qstate, iq, id); in processInitRequest3()
1904 qstate->env->detach_subs)); in processInitRequest3()
1905 (*qstate->env->detach_subs)(qstate); in processInitRequest3()
1927 generate_parentside_target_query(struct module_qstate* qstate, in generate_parentside_target_query() argument
1932 if(!generate_sub_request(name, namelen, qtype, qclass, qstate, in generate_parentside_target_query()
1944 qstate->env, subiq->dp, NULL, in generate_parentside_target_query()
1948 subiq->dp = dns_cache_find_delegation(qstate->env, in generate_parentside_target_query()
1951 *qstate->env->now+subq->prefetch_leeway, in generate_parentside_target_query()
1956 qstate->env, subiq->dp, NULL, in generate_parentside_target_query()
1980 generate_target_query(struct module_qstate* qstate, struct iter_qstate* iq, in generate_target_query() argument
1984 if(!generate_sub_request(name, namelen, qtype, qclass, qstate, in generate_target_query()
2007 query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq, in query_for_targets() argument
2015 iter_mark_cycle_targets(qstate, iq->dp); in query_for_targets()
2037 dname_str(qstate->qinfo.qname, s); in query_for_targets()
2045 dname_str(qstate->qinfo.qname, s); in query_for_targets()
2061 if(!iter_ns_probability(qstate->env->rnd, toget, missing)) { in query_for_targets()
2072 if(!generate_target_query(qstate, iq, id, in query_for_targets()
2077 qstate->ext_state[id] = module_wait_subquery; in query_for_targets()
2087 if(mesh_jostle_exceeded(qstate->env->mesh)) { in query_for_targets()
2102 if(!generate_target_query(qstate, iq, id, in query_for_targets()
2107 qstate->ext_state[id] = module_wait_subquery; in query_for_targets()
2112 if(mesh_jostle_exceeded(qstate->env->mesh)) { in query_for_targets()
2130 qstate->ext_state[id] = module_wait_subquery; in query_for_targets()
2148 processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, in processLastResort() argument
2156 if(!can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, in processLastResort()
2160 errinf(qstate, "all the configured stub or forward servers failed,"); in processLastResort()
2161 errinf_dname(qstate, "at zone", iq->dp->name); in processLastResort()
2162 errinf_reply(qstate, iq); in processLastResort()
2164 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processLastResort()
2166 if(qstate->env->cfg->harden_unverified_glue) { in processLastResort()
2167 if(!cache_fill_missing(qstate->env, iq->qchase.qclass, in processLastResort()
2168 qstate->region, iq->dp, PACKED_RRSET_UNVERIFIED_GLUE)) in processLastResort()
2178 dp = hints_find_root(qstate->env->hints, in processLastResort()
2184 (void)delegpt_add_ns(iq->dp, qstate->region, in processLastResort()
2189 (void)delegpt_add_addr(iq->dp, qstate->region, in processLastResort()
2193 lock_rw_unlock(&qstate->env->hints->lock); in processLastResort()
2197 if(!iter_lookup_parent_NS_from_cache(qstate->env, iq->dp, in processLastResort()
2198 qstate->region, &qstate->qinfo) in processLastResort()
2210 if(qstate->env->cfg->qname_minimisation) in processLastResort()
2216 if(!cache_fill_missing(qstate->env, iq->qchase.qclass, in processLastResort()
2217 qstate->region, iq->dp, 0)) in processLastResort()
2224 if(iter_lookup_parent_glue_from_cache(qstate->env, iq->dp, in processLastResort()
2225 qstate->region, &qstate->qinfo)) { in processLastResort()
2234 if((ret=query_for_targets(qstate, iq, ie, id, 1, &qs))!=0) { in processLastResort()
2235 errinf(qstate, "could not fetch nameserver"); in processLastResort()
2236 errinf_dname(qstate, "at zone", iq->dp->name); in processLastResort()
2238 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processLastResort()
2239 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processLastResort()
2244 qstate->ext_state[id] = module_wait_subquery; in processLastResort()
2250 errinf(qstate, "cannot fetch more nameservers because at max dependency depth"); in processLastResort()
2251 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processLastResort()
2256 dname_str(qstate->qinfo.qname, s); in processLastResort()
2260 errinf(qstate, "exceeded the maximum number of glue fetches"); in processLastResort()
2261 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processLastResort()
2264 iter_mark_pside_cycle_targets(qstate, iq->dp); in processLastResort()
2272 !can_have_last_resort(qstate->env, ns->name, ns->namelen, in processLastResort()
2284 if(!generate_parentside_target_query(qstate, iq, id, in processLastResort()
2287 errinf_dname(qstate, "could not generate nameserver AAAA lookup for", ns->name); in processLastResort()
2288 return error_response(qstate, id, in processLastResort()
2293 if(mesh_jostle_exceeded(qstate->env->mesh)) { in processLastResort()
2299 qstate->ext_state[id] = module_wait_subquery; in processLastResort()
2305 if(!generate_parentside_target_query(qstate, iq, id, in processLastResort()
2308 errinf_dname(qstate, "could not generate nameserver A lookup for", ns->name); in processLastResort()
2309 return error_response(qstate, id, in processLastResort()
2319 qstate->ext_state[id] = module_wait_subquery; in processLastResort()
2326 if(!qstate->no_cache_store && iq->query_for_pside_glue in processLastResort()
2328 iter_store_parentside_neg(qstate->env, &qstate->qinfo, in processLastResort()
2332 errinf(qstate, "all servers for this domain failed,"); in processLastResort()
2333 errinf_dname(qstate, "at zone", iq->dp->name); in processLastResort()
2334 errinf_reply(qstate, iq); in processLastResort()
2338 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processLastResort()
2356 processDSNSFind(struct module_qstate* qstate, struct iter_qstate* iq, int id) in processDSNSFind() argument
2368 …errinf_dname(qstate, "for DS query parent-child nameserver search the query is not under the zone"… in processDSNSFind()
2369 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processDSNSFind()
2387 LDNS_RR_TYPE_NS, iq->qchase.qclass, qstate, id, iq, in processDSNSFind()
2389 …errinf_dname(qstate, "for DS query parent-child nameserver search, could not generate NS lookup fo… in processDSNSFind()
2390 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processDSNSFind()
2401 check_waiting_queries(struct iter_qstate* iq, struct module_qstate* qstate, in check_waiting_queries() argument
2409 qstate->ext_state[id] = module_wait_reply; in check_waiting_queries()
2413 qstate->ext_state[id] = module_wait_subquery; in check_waiting_queries()
2418 qstate->ext_state[id] = module_wait_reply; in check_waiting_queries()
2439 processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, in processQueryTargets() argument
2458 log_query_info(VERB_QUERY, "processQueryTargets:", &qstate->qinfo); in processQueryTargets()
2467 errinf(qstate, "exceeded the maximum of referrals"); in processQueryTargets()
2468 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryTargets()
2473 errinf(qstate, "exceeded the maximum number of sends"); in processQueryTargets()
2474 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryTargets()
2483 check_waiting_queries(iq, qstate, id); in processQueryTargets()
2493 errinf(qstate, "failed to get a delegation (eg. prime " in processQueryTargets()
2495 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryTargets()
2503 errinf(qstate, "exceeded the maximum nameserver nxdomains"); in processQueryTargets()
2504 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryTargets()
2520 errinf(qstate, "exceeded the maximum nameserver " in processQueryTargets()
2522 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryTargets()
2529 check_waiting_queries(iq, qstate, id); in processQueryTargets()
2536 errinf(qstate, "failed to get a delegation (eg. prime " in processQueryTargets()
2538 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryTargets()
2546 errinf(qstate, "exceeded the maximum nameserver nxdomains"); in processQueryTargets()
2547 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryTargets()
2567 errinf(qstate, "failed to get a delegation (eg. prime failure)"); in processQueryTargets()
2568 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryTargets()
2581 qstate->ext_state[id] = module_wait_reply; in processQueryTargets()
2660 else if(!qstate->no_cache_lookup) { in processQueryTargets()
2661 struct dns_msg* msg = dns_cache_lookup(qstate->env, in processQueryTargets()
2664 qstate->query_flags, qstate->region, in processQueryTargets()
2665 qstate->env->scratch, 0, iq->dp->name, in processQueryTargets()
2674 qstate->env->need_to_validate && in processQueryTargets()
2675 qstate->env->cfg->harden_below_nxdomain) { in processQueryTargets()
2687 qstate, id, iq, in processQueryTargets()
2709 else if(!qstate->env->cfg->qname_minimisation_strict) in processQueryTargets()
2721 if(!iq->auth_zone_avoid && qstate->blacklist) { in processQueryTargets()
2722 if(auth_zones_can_fallback(qstate->env->auth_zones, in processQueryTargets()
2733 } else if(auth_zones_lookup(qstate->env->auth_zones, &iq->qinfo_out, in processQueryTargets()
2734 qstate->region, &iq->response, &auth_fallback, iq->dp->name, in processQueryTargets()
2744 lock_rw_wrlock(&qstate->env->auth_zones->lock); in processQueryTargets()
2745 qstate->env->auth_zones->num_query_up++; in processQueryTargets()
2746 lock_rw_unlock(&qstate->env->auth_zones->lock); in processQueryTargets()
2760 errinf(qstate, "auth zone lookup failed, fallback is off"); in processQueryTargets()
2761 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryTargets()
2784 if(can_do_promisc && !mesh_jostle_exceeded(qstate->env->mesh)) { in processQueryTargets()
2792 if((ret=query_for_targets(qstate, iq, ie, id, -1, &extra))!=0) { in processQueryTargets()
2793 errinf(qstate, "could not fetch nameservers for 0x20 fallback"); in processQueryTargets()
2795 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryTargets()
2796 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryTargets()
2803 qstate->ext_state[id] = module_wait_reply; in processQueryTargets()
2846 (void)query_for_targets(qstate, iq, ie, id, tf_policy, &extra); in processQueryTargets()
2856 if(qstate->env->auth_zones) { in processQueryTargets()
2861 struct dns_msg* forged_response = rpz_callback_from_iterator_module(qstate, iq); in processQueryTargets()
2870 if(!handle_cname_response(qstate, iq, forged_response, in processQueryTargets()
2872 errinf(qstate, "malloc failure, CNAME info"); in processQueryTargets()
2873 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryTargets()
2878 rpz_callback_from_iterator_cname(qstate, iq); in processQueryTargets()
2891 if(qstate->env->cfg->qname_minimisation) in processQueryTargets()
2896 qstate->env->detach_subs)); in processQueryTargets()
2897 (*qstate->env->detach_subs)(qstate); in processQueryTargets()
2903 qstate->ext_state[id] = module_finished; in processQueryTargets()
2904 qstate->return_rcode = LDNS_RCODE_NOERROR; in processQueryTargets()
2905 qstate->return_msg = forged_response; in processQueryTargets()
2908 if(!iter_prepend(iq, qstate->return_msg, qstate->region)) { in processQueryTargets()
2910 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryTargets()
2917 target = iter_server_selection(ie, qstate->env, iq->dp, in processQueryTargets()
2920 iq->num_target_queries, qstate->blacklist, in processQueryTargets()
2921 qstate->prefetch_leeway); in processQueryTargets()
2942 if((ret=query_for_targets(qstate, iq, ie, id, in processQueryTargets()
2944 errinf(qstate, "could not fetch nameserver"); in processQueryTargets()
2945 errinf_dname(qstate, "at zone", iq->dp->name); in processQueryTargets()
2947 return error_response(qstate, id, in processQueryTargets()
2949 return error_response_cache(qstate, id, in processQueryTargets()
2967 errinf(qstate, "could not generate nameserver lookups"); in processQueryTargets()
2968 errinf_dname(qstate, "at zone", iq->dp->name); in processQueryTargets()
2969 return error_response(qstate, id, in processQueryTargets()
2997 return processLastResort(qstate, iq, ie, id); in processQueryTargets()
3004 check_waiting_queries(iq, qstate, id); in processQueryTargets()
3024 && !ub_random_max(qstate->env->rnd, 10)) { in processQueryTargets()
3028 (void)query_for_targets(qstate, iq, ie, id, 1, &extra); in processQueryTargets()
3034 check_waiting_queries(iq, qstate, id); in processQueryTargets()
3050 dname_str(qstate->qinfo.qname, s); in processQueryTargets()
3054 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryTargets()
3081 fptr_ok(fptr_whitelist_modenv_send_query(qstate->env->send_query)); in processQueryTargets()
3082 outq = (*qstate->env->send_query)(&iq->qinfo_out, in processQueryTargets()
3087 (qstate->env->cfg->disable_edns_do?0:EDNS_DO)| in processQueryTargets()
3089 !qstate->blacklist&&(!iter_qname_indicates_dnssec(qstate->env, in processQueryTargets()
3094 (iq->dp->tcp_upstream || qstate->env->cfg->tcp_upstream), in processQueryTargets()
3095 (iq->dp->ssl_upstream || qstate->env->cfg->ssl_upstream), in processQueryTargets()
3096 target->tls_auth_name, qstate, &sq_was_ratelimited); in processQueryTargets()
3103 qstate->was_ratelimited = 1; in processQueryTargets()
3104 errinf_dname(qstate, "exceeded ratelimit for zone", in processQueryTargets()
3106 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryTargets()
3110 if(qstate->env->cfg->qname_minimisation) in processQueryTargets()
3117 qstate->ext_state[id] = module_wait_reply; in processQueryTargets()
3150 processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, in processQueryResponse() argument
3158 if(!inplace_cb_query_response_call(qstate->env, qstate, iq->response)) in processQueryResponse()
3163 if(qstate->env->cfg->qname_minimisation) { in processQueryResponse()
3183 if(qstate->reply) { in processQueryResponse()
3185 iq->dp, &qstate->reply->remote_addr, in processQueryResponse()
3186 qstate->reply->remote_addrlen); in processQueryResponse()
3198 if(!qstate->env->cfg->disable_dnssec_lame_check && iq->dnssec_expected in processQueryResponse()
3213 if(qstate->reply) { in processQueryResponse()
3215 iq->dp, &qstate->reply->remote_addr, in processQueryResponse()
3216 qstate->reply->remote_addrlen); in processQueryResponse()
3224 qstate->reply = NULL; in processQueryResponse()
3294 qstate->env->detach_subs)); in processQueryResponse()
3295 (*qstate->env->detach_subs)(qstate); in processQueryResponse()
3297 return processDSNSFind(qstate, iq, id); in processQueryResponse()
3299 if(!qstate->no_cache_store) in processQueryResponse()
3300 iter_dns_store(qstate->env, &iq->response->qinfo, in processQueryResponse()
3303 qstate->prefetch_leeway, in processQueryResponse()
3305 qstate->region, qstate->query_flags, in processQueryResponse()
3306 qstate->qstarttime); in processQueryResponse()
3311 qstate->env->detach_subs)); in processQueryResponse()
3312 (*qstate->env->detach_subs)(qstate); in processQueryResponse()
3314 if(qstate->reply) in processQueryResponse()
3315 sock_list_insert(&qstate->reply_origin, in processQueryResponse()
3316 &qstate->reply->remote_addr, in processQueryResponse()
3317 qstate->reply->remote_addrlen, qstate->region); in processQueryResponse()
3322 if(qstate->env->cfg->qname_minimisation_strict) { in processQueryResponse()
3328 return error_response_cache(qstate, id, in processQueryResponse()
3350 if(qstate->env->cfg->harden_below_nxdomain && in processQueryResponse()
3351 qstate->env->need_to_validate) { in processQueryResponse()
3361 qstate, id, iq, in processQueryResponse()
3379 if(!qstate->no_cache_store && in processQueryResponse()
3380 (!qstate->env->cfg->harden_referral_path || in processQueryResponse()
3381 ( qstate->qinfo.qtype == LDNS_RR_TYPE_NS in processQueryResponse()
3382 && (qstate->query_flags&BIT_RD) in processQueryResponse()
3383 && !(qstate->query_flags&BIT_CD) in processQueryResponse()
3398 iter_dns_store(qstate->env, &iq->response->qinfo, in processQueryResponse()
3400 qstate->qstarttime); in processQueryResponse()
3402 iter_store_parentside_NS(qstate->env, in processQueryResponse()
3404 if(qstate->env->neg_cache) in processQueryResponse()
3405 val_neg_addreferral(qstate->env->neg_cache, in processQueryResponse()
3409 if(!qstate->no_cache_store && iq->query_for_pside_glue in processQueryResponse()
3417 iter_store_parentside_rrset(qstate->env, in processQueryResponse()
3427 iq->dp = delegpt_from_message(iq->response, qstate->region); in processQueryResponse()
3428 if (qstate->env->cfg->qname_minimisation) in processQueryResponse()
3431 errinf(qstate, "malloc failure, for delegation point"); in processQueryResponse()
3432 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryResponse()
3443 rrset_cache_remove_above(qstate->env->rrset_cache, in processQueryResponse()
3445 iq->qchase.qclass, *qstate->env->now, in processQueryResponse()
3448 if(!cache_fill_missing(qstate->env, iq->qchase.qclass, in processQueryResponse()
3449 qstate->region, iq->dp, 0)) { in processQueryResponse()
3450 errinf(qstate, "malloc failure, copy extra info into delegation point"); in processQueryResponse()
3451 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryResponse()
3464 iq->dnssec_expected = iter_indicates_dnssec(qstate->env, in processQueryResponse()
3467 if(iq->dnssec_expected && qstate->env->cfg->prefetch_key && in processQueryResponse()
3468 !(qstate->query_flags&BIT_CD)) in processQueryResponse()
3469 generate_dnskey_prefetch(qstate, iq, id); in processQueryResponse()
3475 if(qstate->env->cfg->harden_referral_path) in processQueryResponse()
3476 generate_ns_check(qstate, iq, id); in processQueryResponse()
3485 qstate->env->detach_subs)); in processQueryResponse()
3486 (*qstate->env->detach_subs)(qstate); in processQueryResponse()
3511 qstate->env->detach_subs)); in processQueryResponse()
3512 (*qstate->env->detach_subs)(qstate); in processQueryResponse()
3514 return processDSNSFind(qstate, iq, id); in processQueryResponse()
3517 if(!handle_cname_response(qstate, iq, iq->response, in processQueryResponse()
3519 errinf(qstate, "malloc failure, CNAME info"); in processQueryResponse()
3520 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryResponse()
3526 if(!qstate->no_cache_store) in processQueryResponse()
3527 iter_dns_store(qstate->env, &iq->response->qinfo, in processQueryResponse()
3528 iq->response->rep, 1, qstate->prefetch_leeway, in processQueryResponse()
3530 qstate->query_flags, qstate->qstarttime); in processQueryResponse()
3534 if(qstate->env->auth_zones) { in processQueryResponse()
3537 rpz_callback_from_iterator_cname(qstate, iq); in processQueryResponse()
3546 if(!handle_cname_response(qstate, iq, forged_response, in processQueryResponse()
3548 errinf(qstate, "malloc failure, CNAME info"); in processQueryResponse()
3549 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryResponse()
3554 rpz_callback_from_iterator_cname(qstate, iq); in processQueryResponse()
3557 qstate->ext_state[id] = module_finished; in processQueryResponse()
3558 qstate->return_rcode = LDNS_RCODE_NOERROR; in processQueryResponse()
3559 qstate->return_msg = forged_response; in processQueryResponse()
3562 if(!iter_prepend(iq, qstate->return_msg, qstate->region)) { in processQueryResponse()
3564 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryResponse()
3566 qstate->return_msg->qinfo = qstate->qinfo; in processQueryResponse()
3581 if(qstate->env->cfg->qname_minimisation) in processQueryResponse()
3591 qstate->env->detach_subs)); in processQueryResponse()
3592 (*qstate->env->detach_subs)(qstate); in processQueryResponse()
3594 if(qstate->reply) in processQueryResponse()
3595 sock_list_insert(&qstate->reply_origin, in processQueryResponse()
3596 &qstate->reply->remote_addr, in processQueryResponse()
3597 qstate->reply->remote_addrlen, qstate->region); in processQueryResponse()
3608 } else if(qstate->reply) { in processQueryResponse()
3611 if(!infra_set_lame(qstate->env->infra_cache, in processQueryResponse()
3612 &qstate->reply->remote_addr, in processQueryResponse()
3613 qstate->reply->remote_addrlen, in processQueryResponse()
3615 *qstate->env->now, dnsseclame, 0, in processQueryResponse()
3626 } else if(qstate->reply) { in processQueryResponse()
3630 if(!infra_set_lame(qstate->env->infra_cache, in processQueryResponse()
3631 &qstate->reply->remote_addr, in processQueryResponse()
3632 qstate->reply->remote_addrlen, in processQueryResponse()
3634 *qstate->env->now, 0, 1, iq->qchase.qtype)) in processQueryResponse()
3651 if (qstate->env->cfg->qname_minimisation && in processQueryResponse()
3652 !qstate->env->cfg->qname_minimisation_strict) in processQueryResponse()
3657 if(!auth_zones_can_fallback(qstate->env->auth_zones, in processQueryResponse()
3658 iq->dp->name, iq->dp->namelen, qstate->qinfo.qclass)) { in processQueryResponse()
3661 errinf_dname(qstate, "response is bad, no fallback, " in processQueryResponse()
3663 return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); in processQueryResponse()
3689 prime_supers(struct module_qstate* qstate, int id, struct module_qstate* forq) in prime_supers() argument
3694 log_assert(qstate->is_priming || foriq->wait_priming_stub); in prime_supers()
3695 log_assert(qstate->return_rcode == LDNS_RCODE_NOERROR); in prime_supers()
3697 dp = delegpt_from_message(qstate->return_msg, forq->region); in prime_supers()
3708 log_query_info(VERB_DETAIL, "priming successful for", &qstate->qinfo); in prime_supers()
3711 foriq->deleg_msg = dns_copy_msg(qstate->return_msg, forq->region); in prime_supers()
3741 processPrimeResponse(struct module_qstate* qstate, int id) in processPrimeResponse() argument
3743 struct iter_qstate* iq = (struct iter_qstate*)qstate->minfo[id]; in processPrimeResponse()
3750 qstate->return_rcode = LDNS_RCODE_NOERROR; in processPrimeResponse()
3751 qstate->return_msg = iq->response; in processPrimeResponse()
3753 errinf(qstate, "prime response did not get an answer"); in processPrimeResponse()
3754 errinf_dname(qstate, "for", qstate->qinfo.qname); in processPrimeResponse()
3755 qstate->return_rcode = LDNS_RCODE_SERVFAIL; in processPrimeResponse()
3756 qstate->return_msg = NULL; in processPrimeResponse()
3763 if(qstate->env->cfg->harden_referral_path) { in processPrimeResponse()
3766 qstate->qinfo.qname, qstate->qinfo.qtype, in processPrimeResponse()
3767 qstate->qinfo.qclass); in processPrimeResponse()
3768 if(!generate_sub_request(qstate->qinfo.qname, in processPrimeResponse()
3769 qstate->qinfo.qname_len, qstate->qinfo.qtype, in processPrimeResponse()
3770 qstate->qinfo.qclass, qstate, id, iq, in processPrimeResponse()
3774 generate_a_aaaa_check(qstate, iq, id); in processPrimeResponse()
3778 qstate->ext_state[id] = module_finished; in processPrimeResponse()
3796 processTargetResponse(struct module_qstate* qstate, int id, in processTargetResponse() argument
3799 struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; in processTargetResponse()
3800 struct iter_qstate* iq = (struct iter_qstate*)qstate->minfo[id]; in processTargetResponse()
3804 log_assert(qstate->return_rcode == LDNS_RCODE_NOERROR); in processTargetResponse()
3807 log_query_info(VERB_ALGO, "processTargetResponse", &qstate->qinfo); in processTargetResponse()
3819 dpns = delegpt_find_ns(foriq->dp, qstate->qinfo.qname, in processTargetResponse()
3820 qstate->qinfo.qname_len); in processTargetResponse()
3846 rrset = reply_find_answer_rrset(&iq->qchase, qstate->return_msg->rep); in processTargetResponse()
3873 delegpt_mark_neg(dpns, qstate->qinfo.qtype); in processTargetResponse()
3878 if(qstate->reply_origin && qstate->reply_origin->len != 0) { in processTargetResponse()
3894 processDSNSResponse(struct module_qstate* qstate, int id, in processDSNSResponse() argument
3901 if(qstate->return_rcode != LDNS_RCODE_NOERROR) in processDSNSResponse()
3904 if(!reply_find_rrset(qstate->return_msg->rep, qstate->qinfo.qname, in processDSNSResponse()
3905 qstate->qinfo.qname_len, LDNS_RR_TYPE_NS, in processDSNSResponse()
3906 qstate->qinfo.qclass)){ in processDSNSResponse()
3912 foriq->dp = delegpt_from_message(qstate->return_msg, forq->region); in processDSNSResponse()
3915 errinf(qstate, "malloc failure, in DS search"); in processDSNSResponse()
3930 processClassResponse(struct module_qstate* qstate, int id, in processClassResponse() argument
3934 struct dns_msg* from = qstate->return_msg; in processClassResponse()
3935 log_query_info(VERB_ALGO, "processClassResponse", &qstate->qinfo); in processClassResponse()
3937 if(qstate->return_rcode != LDNS_RCODE_NOERROR) { in processClassResponse()
4037 processCollectClass(struct module_qstate* qstate, int id) in processCollectClass() argument
4039 struct iter_qstate* iq = (struct iter_qstate*)qstate->minfo[id]; in processCollectClass()
4048 while(iter_get_next_root(qstate->env->hints, in processCollectClass()
4049 qstate->env->fwds, &c)) { in processCollectClass()
4052 qstate->qinfo.qname, qstate->qinfo.qtype, c); in processCollectClass()
4053 if(!generate_sub_request(qstate->qinfo.qname, in processCollectClass()
4054 qstate->qinfo.qname_len, qstate->qinfo.qtype, in processCollectClass()
4055 c, qstate, id, iq, INIT_REQUEST_STATE, in processCollectClass()
4057 (int)!(qstate->query_flags&BIT_CD), 0)) { in processCollectClass()
4058 errinf(qstate, "could not generate class ANY" in processCollectClass()
4060 return error_response(qstate, id, in processCollectClass()
4073 return error_response_cache(qstate, id, LDNS_RCODE_REFUSED); in processCollectClass()
4092 processFinished(struct module_qstate* qstate, struct iter_qstate* iq, in processFinished() argument
4096 &qstate->qinfo); in processFinished()
4099 if(!qstate->no_cache_store && iq->query_for_pside_glue in processFinished()
4101 iter_store_parentside_neg(qstate->env, &qstate->qinfo, in processFinished()
4106 errinf(qstate, "(no response found at query finish)"); in processFinished()
4107 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processFinished()
4123 if((qstate->env->cfg->val_log_level >= 2 || in processFinished()
4124 qstate->env->cfg->log_servfail) && qstate->errinf && in processFinished()
4125 !qstate->env->cfg->val_log_squelch) { in processFinished()
4126 char* err_str = errinf_to_str_misc(qstate); in processFinished()
4134 qstate->ext_state[id] = module_finished; in processFinished()
4141 if(!iter_prepend(iq, iq->response, qstate->region)) { in processFinished()
4143 return error_response(qstate, id, LDNS_RCODE_SERVFAIL); in processFinished()
4146 iq->response->qinfo = qstate->qinfo; in processFinished()
4152 if(!qstate->no_cache_store && qstate->query_flags&BIT_RD) { in processFinished()
4153 iter_dns_store(qstate->env, &qstate->qinfo, in processFinished()
4154 iq->response->rep, 0, qstate->prefetch_leeway, in processFinished()
4156 qstate->region, qstate->query_flags, in processFinished()
4157 qstate->qstarttime); in processFinished()
4160 qstate->return_rcode = LDNS_RCODE_NOERROR; in processFinished()
4161 qstate->return_msg = iq->response; in processFinished()
4176 iter_inform_super(struct module_qstate* qstate, int id, in iter_inform_super() argument
4179 if(!qstate->is_priming && super->qinfo.qclass == LDNS_RR_CLASS_ANY) in iter_inform_super()
4180 processClassResponse(qstate, id, super); in iter_inform_super()
4183 processDSNSResponse(qstate, id, super); in iter_inform_super()
4184 else if(qstate->return_rcode != LDNS_RCODE_NOERROR) in iter_inform_super()
4185 error_supers(qstate, id, super); in iter_inform_super()
4186 else if(qstate->is_priming) in iter_inform_super()
4187 prime_supers(qstate, id, super); in iter_inform_super()
4188 else processTargetResponse(qstate, id, super); in iter_inform_super()
4204 iter_handle(struct module_qstate* qstate, struct iter_qstate* iq, in iter_handle() argument
4213 cont = processInitRequest(qstate, iq, ie, id); in iter_handle()
4216 cont = processInitRequest2(qstate, iq, id); in iter_handle()
4219 cont = processInitRequest3(qstate, iq, id); in iter_handle()
4222 cont = processQueryTargets(qstate, iq, ie, id); in iter_handle()
4225 cont = processQueryResponse(qstate, iq, ie, id); in iter_handle()
4228 cont = processPrimeResponse(qstate, id); in iter_handle()
4231 cont = processCollectClass(qstate, id); in iter_handle()
4234 cont = processDSNSFind(qstate, iq, id); in iter_handle()
4237 cont = processFinished(qstate, iq, id); in iter_handle()
4257 process_request(struct module_qstate* qstate, struct iter_qstate* iq, in process_request() argument
4265 iter_handle(qstate, iq, ie, id); in process_request()
4270 process_response(struct module_qstate* qstate, struct iter_qstate* iq, in process_response() argument
4283 qstate->env->cfg->use_caps_bits_for_id && in process_response()
4302 || !qstate->reply) { in process_response()
4305 errinf(qstate, "module iterator received wrong internal event with a response message"); in process_response()
4306 (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); in process_response()
4311 fill_fail_addr(iq, &qstate->reply->remote_addr, in process_response()
4312 qstate->reply->remote_addrlen); in process_response()
4313 prs = (struct msg_parse*)regional_alloc(qstate->env->scratch, in process_response()
4322 pkt = qstate->reply->c->buffer; in process_response()
4324 if(parse_packet(pkt, prs, qstate->env->scratch) != LDNS_RCODE_NOERROR) { in process_response()
4330 if(parse_extract_edns_from_response_msg(prs, &edns, qstate->env->scratch) != in process_response()
4338 qstate->edns_opts_back_in = edns_opt_copy_region(edns.opt_list_in, in process_response()
4339 qstate->region); in process_response()
4340 if(!qstate->edns_opts_back_in) { in process_response()
4346 if(!inplace_cb_edns_back_parsed_call(qstate->env, qstate)) { in process_response()
4356 qstate->env->scratch, qstate->env, qstate, ie)) { in process_response()
4373 iq->response = dns_alloc_msg(pkt, prs, qstate->region); in process_response()
4376 log_query_info(VERB_DETAIL, "response for", &qstate->qinfo); in process_response()
4378 &qstate->reply->remote_addr, qstate->reply->remote_addrlen); in process_response()
4383 if(qstate->env->cfg->aggressive_nsec) { in process_response()
4387 if(qstate->env->cfg->qname_minimisation && in process_response()
4438 qstate->env->scratch)) { in process_response()
4442 errinf(qstate, "0x20 failed, then got different replies in fallback"); in process_response()
4443 (void)error_response_cache(qstate, id, in process_response()
4460 iter_handle(qstate, iq, ie, id); in process_response()
4464 iter_operate(struct module_qstate* qstate, enum module_ev event, int id, in iter_operate() argument
4467 struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; in iter_operate()
4468 struct iter_qstate* iq = (struct iter_qstate*)qstate->minfo[id]; in iter_operate()
4470 id, strextstate(qstate->ext_state[id]), strmodulevent(event)); in iter_operate()
4472 &qstate->qinfo); in iter_operate()
4473 if(iq && qstate->qinfo.qname != iq->qchase.qname) in iter_operate()
4480 if(!iter_new(qstate, id)) { in iter_operate()
4481 errinf(qstate, "malloc failure, new iterator module allocation"); in iter_operate()
4482 (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); in iter_operate()
4485 iq = (struct iter_qstate*)qstate->minfo[id]; in iter_operate()
4486 process_request(qstate, iq, ie, id); in iter_operate()
4490 iter_handle(qstate, iq, ie, id); in iter_operate()
4494 process_response(qstate, iq, ie, id, outbound, event); in iter_operate()
4499 errinf(qstate, "iterator module got the error event"); in iter_operate()
4500 (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); in iter_operate()
4505 errinf(qstate, "iterator module received wrong event"); in iter_operate()
4506 (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); in iter_operate()
4510 iter_clear(struct module_qstate* qstate, int id) in iter_clear() argument
4513 if(!qstate) in iter_clear()
4515 iq = (struct iter_qstate*)qstate->minfo[id]; in iter_clear()
4525 qstate->minfo[id] = NULL; in iter_clear()