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