diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index 413349b80119d61931ee48be2c5507c270c287b3..b2cb5286c7e0810aef31d271a6bb6dbd5cc7bfe2 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -1003,7 +1003,8 @@ static in_addr_t resolve_ip(const char *inaddr) char* p; char* addr; char buf[128]; - HOSTENT* host; + struct addrinfo* res; + in_addr_t ipa = INADDR_NONE; SAFECOPY(buf, inaddr); addr = buf; @@ -1019,15 +1020,15 @@ static in_addr_t resolve_ip(const char *inaddr) if (*p != '.' && !IS_DIGIT(*p)) break; if (!(*p)) - return inet_addr(addr); + return parseIPv4Address(addr); - if ((host = gethostbyname(inaddr)) == NULL) + if (getaddrinfo(addr, NULL, NULL, &res) != 0) return INADDR_NONE; - if (host->h_addr_list[0] == NULL) - return INADDR_NONE; - - return *((in_addr_t*)host->h_addr_list[0]); + if (res->ai_family == AF_INET) + ipa = ((struct sockaddr_in*)res->ai_addr)->sin_addr.s_addr; + freeaddrinfo(res); + return ipa; } /****************************************************************************/ @@ -2788,7 +2789,7 @@ static int chk_received_hdr(SOCKET socket, const char* prot, const char *buf, IN strncpy(ip, p, 16); ip[15] = 0; addr.in.sin_family = AF_INET; - addr.in.sin_addr.s_addr = inet_addr(ip); + addr.in.sin_addr.s_addr = parseIPv4Address(ip); lprintf(LOG_DEBUG, "%04d %s DNSBL checking received header address %s [%s]", socket, prot, host_name, ip); } diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index 5d5ccaaef296a72d5628fc4c8be338b41ffca9bf..54069cb9249d243d8d26925b33465cdce46ee470 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -458,8 +458,9 @@ int close_socket(SOCKET sock) /* TODO: IPv6 */ in_addr_t resolve_ip(char *addr) { - HOSTENT* host; char* p; + struct addrinfo* res; + in_addr_t ipa = INADDR_NONE; if (*addr == 0) return INADDR_NONE; @@ -468,12 +469,15 @@ in_addr_t resolve_ip(char *addr) if (*p != '.' && !IS_DIGIT(*p)) break; if (!(*p)) - return inet_addr(addr); - if ((host = gethostbyname(addr)) == NULL) - return INADDR_NONE; - if (host->h_addr_list[0] == NULL) + return parseIPv4Address(addr); + + if (getaddrinfo(addr, NULL, NULL, &res) != 0) return INADDR_NONE; - return *((in_addr_t*)host->h_addr_list[0]); + + if (res->ai_family == AF_INET) + ipa = ((struct sockaddr_in*)res->ai_addr)->sin_addr.s_addr; + freeaddrinfo(res); + return ipa; } } /* extern "C" */ @@ -5921,8 +5925,10 @@ NO_SSH: result = connect(new_node->passthru_socket, (struct sockaddr *)&tmp_addr, tmp_addr_len); if (result != 0) { + char tmp[16]; lprintf(LOG_ERR, "Node %d !ERROR %d (%d) connecting to passthru socket: %s port %u" - , new_node->cfg.node_num, result, SOCKET_ERRNO, inet_ntoa(tmp_addr.sin_addr), htons(tmp_addr.sin_port)); + , new_node->cfg.node_num, result, SOCKET_ERRNO + , inet_ntop(AF_INET, &tmp_addr.sin_addr.s_addr, tmp, sizeof tmp), htons(tmp_addr.sin_port)); close_socket(new_node->passthru_socket); new_node->passthru_socket = INVALID_SOCKET; close_socket(tmp_sock);