diff --git a/userspace/programs/resolver/main.cpp b/userspace/programs/resolver/main.cpp index 752dabb3..ecc1bbde 100644 --- a/userspace/programs/resolver/main.cpp +++ b/userspace/programs/resolver/main.cpp @@ -127,7 +127,7 @@ BAN::Optional read_dns_response(int socket) DNSAnswer& answer = *reinterpret_cast(&reply.data[idx]); if (answer.type() != QTYPE::A) { - dprintln("Not A record"); + dprintln("Not A record, but {}", static_cast(answer.type())); return {}; } if (answer.data_len() != 4) @@ -197,6 +197,10 @@ int main(int, char**) { srand(time(nullptr)); + char hostname[HOST_NAME_MAX]; + if (gethostname(hostname, sizeof(hostname)) == -1) + hostname[0] = '\0'; + int service_socket = create_service_socket(); if (service_socket == -1) return 1; @@ -306,7 +310,14 @@ int main(int, char**) BAN::Optional result; - if (dns_cache.contains(*query)) + if (*hostname && strcmp(query->data(), hostname) == 0) + { + result = DNSEntry { + .valid_until = time(nullptr), + .address = ntohl(INADDR_LOOPBACK), + }; + } + else if (dns_cache.contains(*query)) { auto& cached = dns_cache[*query]; if (time(nullptr) <= cached.valid_until)