From 7189b3660218e53d04a62131ce2015d5dcc4af03 Mon Sep 17 00:00:00 2001 From: "Rob Swindell (on Windows 11)" <rob@synchro.net> Date: Fri, 14 Feb 2025 13:28:30 -0800 Subject: [PATCH] Fix issue resolving "localhost" to IPv4 address on (some) IPv6-enabled systems We need to provide an address family "hint" to getaddrinfo() to limit the results to IPv4 addresses. Regression introduced in commit 29b93c3297c Reported by Keyop via IRC --- src/sbbs3/mailsrvr.c | 4 +++- src/sbbs3/main.cpp | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index 940e19603c..b88a872078 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -1004,6 +1004,7 @@ static in_addr_t resolve_ip(const char *inaddr) char* addr; char buf[128]; struct addrinfo* res; + struct addrinfo hints = {0}; in_addr_t ipa = INADDR_NONE; SAFECOPY(buf, inaddr); @@ -1022,7 +1023,8 @@ static in_addr_t resolve_ip(const char *inaddr) if (!(*p)) return parseIPv4Address(addr); - if (getaddrinfo(addr, NULL, NULL, &res) != 0) + hints.ai_family = AF_INET; + if (getaddrinfo(addr, NULL, &hints, &res) != 0) return INADDR_NONE; if (res->ai_family == AF_INET) diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index 20bea4fad6..9033bcbeb1 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -460,6 +460,7 @@ in_addr_t resolve_ip(char *addr) { char* p; struct addrinfo* res; + struct addrinfo hints = {0}; in_addr_t ipa = INADDR_NONE; if (*addr == 0) @@ -471,7 +472,8 @@ in_addr_t resolve_ip(char *addr) if (!(*p)) return parseIPv4Address(addr); - if (getaddrinfo(addr, NULL, NULL, &res) != 0) + hints.ai_family = AF_INET; + if (getaddrinfo(addr, NULL, &hints, &res) != 0) return INADDR_NONE; if (res->ai_family == AF_INET) -- GitLab