summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Base/etc/LookupServer.ini1
-rw-r--r--Base/etc/hosts1
-rw-r--r--Servers/LookupServer/main.cpp27
4 files changed, 27 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore
index 916779b255..c821301076 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 b0504773c4..8ee1c6619e 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 0000000000..ba712fe033
--- /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 3a2c713ba5..9929565a11 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<String, IPv4Address> dns_cache;
+ dbgprintf("LookupServer: Loading hosts from /etc/hosts:\n");
+ HashMap<String, IPv4Address> 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<String> 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 {