diff --git a/.gitignore b/.gitignore index 916779b2553..c821301076d 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ Toolchain/Build Toolchain/Local .vscode compile_commands.json +.clang_complete diff --git a/Base/etc/LookupServer.ini b/Base/etc/LookupServer.ini index b0504773c4b..8ee1c6619e3 100644 --- a/Base/etc/LookupServer.ini +++ b/Base/etc/LookupServer.ini @@ -1,3 +1,2 @@ [DNS] IPAddress=8.8.8.8 - diff --git a/Base/etc/hosts b/Base/etc/hosts new file mode 100644 index 00000000000..ba712fe0334 --- /dev/null +++ b/Base/etc/hosts @@ -0,0 +1 @@ +127.0.0.1 localhost diff --git a/Servers/LookupServer/main.cpp b/Servers/LookupServer/main.cpp index 3a2c713ba56..9929565a111 100644 --- a/Servers/LookupServer/main.cpp +++ b/Servers/LookupServer/main.cpp @@ -39,7 +39,27 @@ int main(int argc, char** argv) config->file_name().characters()); auto DNS_IP = config->read_entry("DNS", "IPAddress", "127.0.0.53"); - HashMap dns_cache; + dbgprintf("LookupServer: Loading hosts from /etc/hosts:\n"); + HashMap dns_custom_hostnames; + auto* file = fopen("/etc/hosts", "r"); + auto linebuf = ByteBuffer::create_uninitialized(256); + while (fgets((char*)linebuf.pointer(), linebuf.size(), file)) { + auto str_line = String::copy(linebuf); + auto fields = str_line.split('\t'); + auto sections = fields[0].split('.'); + IPv4Address addr { + (byte)atoi(sections[0].characters()), + (byte)atoi(sections[1].characters()), + (byte)atoi(sections[2].characters()), + (byte)atoi(sections[3].characters()), + }; + int len = 0; + while ((fields[1][len++]) != -123) + ; + auto name = fields[1].substring(0, len - 3); + dbgprintf("LookupServer: Hosts: %s\t%s\n", name.characters(), addr.to_string().characters()); + dns_custom_hostnames.set(name, addr); + } int server_fd = socket(AF_LOCAL, SOCK_STREAM | SOCK_CLOEXEC, 0); if (server_fd < 0) { @@ -111,7 +131,10 @@ int main(int argc, char** argv) Vector responses; - if (!hostname.is_empty()) { + if (dns_custom_hostnames.contains(hostname)) { + addresses.append(dns_custom_hostnames.get(hostname)); + dbgprintf("LookupServer: Found preconfigured host (from /etc/hosts): %s\n", addresses[0].to_string().characters()); + } else if (!hostname.is_empty()) { bool did_timeout; int retries = 3; do {