#0 DNS_PACKET_SHALL_CACHE () at ../src/resolve/resolved-dns-packet.h:211 206: static inline bool DNS_PACKET_SHALL_CACHE(DnsPacket *p) { 207: /* Never cache data originating from localhost, under the 208: * assumption, that it's coming from a locally DNS forwarder 209: * or server, that is caching on its own. */ 210: 211: return in_addr_is_localhost(p->family, &p->sender) == 0; 212: } 213: 214: /* https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-6 */ 215: enum { 216: DNS_RCODE_SUCCESS = 0, #1 dns_transaction_cache_answer (t=0x55d99b3b48e0) at ../src/resolve/resolved-dns-transaction.c:582 577: 578: /* We never cache if this packet is from the local host, under 579: * the assumption that a locally running DNS server would 580: * cache this anyway, and probably knows better when to flush 581: * the cache then we could. */ 582: if (!DNS_PACKET_SHALL_CACHE(t->received)) 583: return; 584: 585: dns_cache_put(&t->scope->cache, 586: t->key, 587: t->answer_rcode, #2 dns_transaction_process_dnssec.lto_priv.425 (t=0x55d99b3b48e0) at ../src/resolve/resolved-dns-transaction.c:717 712: } 713: 714: if (t->answer_dnssec_result == DNSSEC_INCOMPATIBLE_SERVER) 715: dns_server_warn_downgrade(t->server); 716: 717: dns_transaction_cache_answer(t); 718: 719: if (t->answer_rcode == DNS_RCODE_SUCCESS) 720: dns_transaction_complete(t, DNS_TRANSACTION_SUCCESS); 721: else 722: dns_transaction_complete(t, DNS_TRANSACTION_RCODE_FAILURE); #3 0x000055d99a2bf84c in dns_transaction_notify (source=0x55d99b3b71b0, t=0x55d99b3b48e0) at ../src/resolve/resolved-dns-transaction.c:2099 2094: /* Invoked whenever any of our auxiliary DNSSEC transactions completed its work. If the state is still PENDING, 2095: we are still in the loop that adds further DNSSEC transactions, hence don't check if we are ready yet. If 2096: the state is VALIDATING however, we should check if we are complete now. */ 2097: 2098: if (t->state == DNS_TRANSACTION_VALIDATING) 2099: dns_transaction_process_dnssec(t); 2100: } 2101: 2102: static int dns_transaction_validate_dnskey_by_ds(DnsTransaction *t) { 2103: DnsResourceRecord *rr; 2104: int ifindex, r; #4 dns_transaction_complete (t=0x55d99b3b71b0, state=) at ../src/resolve/resolved-dns-transaction.c:361 356: SET_FOREACH_MOVE(z, t->notify_zone_items_done, t->notify_zone_items) 357: dns_zone_item_notify(z); 358: SWAP_TWO(t->notify_zone_items, t->notify_zone_items_done); 359: 360: SET_FOREACH_MOVE(d, t->notify_transactions_done, t->notify_transactions) 361: dns_transaction_notify(d, t); 362: SWAP_TWO(t->notify_transactions, t->notify_transactions_done); 363: 364: t->block_gc--; 365: dns_transaction_gc(t); 366: } #5 0x000055d99a2c6cbd in dns_transaction_process_dnssec.lto_priv.425 (t=t@entry=0x55d99b3b71b0) at ../src/resolve/resolved-dns-transaction.c:720 715: dns_server_warn_downgrade(t->server); 716: 717: dns_transaction_cache_answer(t); 718: 719: if (t->answer_rcode == DNS_RCODE_SUCCESS) 720: dns_transaction_complete(t, DNS_TRANSACTION_SUCCESS); 721: else 722: dns_transaction_complete(t, DNS_TRANSACTION_RCODE_FAILURE); 723: 724: return; 725: #6 0x000055d99a2c7647 in dns_transaction_process_reply (t=t@entry=0x55d99b3b71b0, p=p@entry=0x55d99b3b8490) at ../src/resolve/resolved-dns-transaction.c:1002 997: dns_transaction_stop_timeout(t); 998: return; 999: } 1000: } 1001: 1002: dns_transaction_process_dnssec(t); 1003: return; 1004: 1005: fail: 1006: t->answer_errno = -r; 1007: dns_transaction_complete(t, DNS_TRANSACTION_ERRNO); #7 0x000055d99a2c845b in on_dns_packet (s=, fd=, revents=, userdata=0x55d99b3b71b0) at ../src/resolve/resolved-dns-transaction.c:1053 1048: if (DNS_PACKET_ID(p) != t->id) { 1049: log_debug("Received packet with incorrect transaction ID, ignoring."); 1050: return 0; 1051: } 1052: 1053: dns_transaction_process_reply(t, p); 1054: return 0; 1055: } 1056: 1057: static int dns_transaction_emit_udp(DnsTransaction *t) { 1058: int r; #8 0x000055d99a302563 in source_dispatch.lto_priv.501 (s=0x55d99b3b82b0) at ../src/libsystemd/sd-event/sd-event.c:2268 2263: s->dispatching = true; 2264: 2265: switch (s->type) { 2266: 2267: case SOURCE_IO: 2268: r = s->io.callback(s, s->io.fd, s->io.revents, s->userdata); 2269: break; 2270: 2271: case SOURCE_TIME_REALTIME: 2272: case SOURCE_TIME_BOOTTIME: 2273: case SOURCE_TIME_MONOTONIC: #9 0x000055d99a29d7fc in sd_event_dispatch (e=0x55d99b39b1d0) at ../src/libsystemd/sd-event/sd-event.c:2629 2624: p = event_next_pending(e); 2625: if (p) { 2626: sd_event_ref(e); 2627: 2628: e->state = SD_EVENT_RUNNING; 2629: r = source_dispatch(p); 2630: e->state = SD_EVENT_INITIAL; 2631: 2632: sd_event_unref(e); 2633: 2634: return r; #10 sd_event_run (timeout=18446744073709551615, e=0x55d99b39b1d0) at ../src/libsystemd/sd-event/sd-event.c:2688 2683: if (e->profile_delays) 2684: e->last_run = now(CLOCK_MONOTONIC); 2685: 2686: if (r > 0) { 2687: /* There's something now, then let's dispatch it */ 2688: r = sd_event_dispatch(e); 2689: if (r < 0) 2690: return r; 2691: 2692: return 1; 2693: } #11 sd_event_loop (e=0x55d99b39b1d0) at ../src/libsystemd/sd-event/sd-event.c:2708 2703: assert_return(e->state == SD_EVENT_INITIAL, -EBUSY); 2704: 2705: sd_event_ref(e); 2706: 2707: while (e->state != SD_EVENT_FINISHED) { 2708: r = sd_event_run(e, (uint64_t) -1); 2709: if (r < 0) 2710: goto finish; 2711: } 2712: 2713: r = e->exit_code; #12 main (argc=, argv=) at ../src/resolve/resolved.c:98 93: 94: sd_notify(false, 95: "READY=1\n" 96: "STATUS=Processing requests..."); 97: 98: r = sd_event_loop(m->event); 99: if (r < 0) { 100: log_error_errno(r, "Event loop failed: %m"); 101: goto finish; 102: } 103: