Skip to content
Snippets Groups Projects
Commit db8bb221 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

parseIPv4Address() and IPv4AddresstoStr() now return/accept network byte order

Since that's the most used/assumed byte order for IP addresses, let's make
that the default and eliminate a lot of unnecessary byte-swapping.

This fixes the issue reported by Keyop in IRC, introduced in commit 29b93c32
parent 8fdf0405
Branches
Tags
No related merge requests found
Pipeline #8288 passed
...@@ -52,7 +52,7 @@ int sbbs_t::exec_net(csi_t* csi) ...@@ -52,7 +52,7 @@ int sbbs_t::exec_net(csi_t* csi)
SOCKADDR_IN addr; SOCKADDR_IN addr;
memset(&addr, 0, sizeof(addr)); memset(&addr, 0, sizeof(addr));
addr.sin_addr.s_addr = htonl(startup->outgoing4.s_addr); addr.sin_addr.s_addr = startup->outgoing4.s_addr;
addr.sin_family = AF_INET; addr.sin_family = AF_INET;
if ((i = bind(sock, (struct sockaddr *) &addr, sizeof (addr))) != 0) { if ((i = bind(sock, (struct sockaddr *) &addr, sizeof (addr))) != 0) {
...@@ -538,7 +538,7 @@ SOCKET sbbs_t::ftp_data_sock(csi_t* csi, SOCKET ctrl_sock, SOCKADDR_IN* addr) ...@@ -538,7 +538,7 @@ SOCKET sbbs_t::ftp_data_sock(csi_t* csi, SOCKET ctrl_sock, SOCKADDR_IN* addr)
} }
memset(addr, 0, sizeof(SOCKADDR_IN)); memset(addr, 0, sizeof(SOCKADDR_IN));
addr->sin_addr.s_addr = htonl(startup->outgoing4.s_addr); addr->sin_addr.s_addr = startup->outgoing4.s_addr;
addr->sin_family = AF_INET; addr->sin_family = AF_INET;
if (bind(data_sock, (struct sockaddr *)addr, xp_sockaddr_len(addr)) != 0) { if (bind(data_sock, (struct sockaddr *)addr, xp_sockaddr_len(addr)) != 0) {
......
...@@ -5308,7 +5308,7 @@ static BOOL sendmail_open_socket(SOCKET *sock, CRYPT_SESSION *session) ...@@ -5308,7 +5308,7 @@ static BOOL sendmail_open_socket(SOCKET *sock, CRYPT_SESSION *session)
} }
memset(&addr, 0, sizeof(addr)); memset(&addr, 0, sizeof(addr));
addr.sin_addr.s_addr = htonl(startup->outgoing4.s_addr); addr.sin_addr.s_addr = startup->outgoing4.s_addr;
addr.sin_family = AF_INET; addr.sin_family = AF_INET;
i = bind(*sock, (struct sockaddr *)&addr, sizeof(addr)); i = bind(*sock, (struct sockaddr *)&addr, sizeof(addr));
......
...@@ -273,7 +273,7 @@ bool sbbs_t::telnet_gate(char* destaddr, uint mode, unsigned timeout, str_list_t ...@@ -273,7 +273,7 @@ bool sbbs_t::telnet_gate(char* destaddr, uint mode, unsigned timeout, str_list_t
} }
memset(&addr, 0, sizeof(addr)); memset(&addr, 0, sizeof(addr));
addr.sin_addr.s_addr = htonl(startup->outgoing4.s_addr); addr.sin_addr.s_addr = startup->outgoing4.s_addr;
addr.sin_family = AF_INET; addr.sin_family = AF_INET;
if ((i = bind(remote_socket, (struct sockaddr *) &addr, sizeof (addr))) != 0) { if ((i = bind(remote_socket, (struct sockaddr *) &addr, sizeof (addr))) != 0) {
......
...@@ -110,6 +110,7 @@ void freeNameServerList(str_list_t list) ...@@ -110,6 +110,7 @@ void freeNameServerList(str_list_t list)
} }
// If the input is invalid, INADDR_NONE (usually -1) is returned // If the input is invalid, INADDR_NONE (usually -1) is returned
// The return value is in *network* (not host) byte order
uint32_t parseIPv4Address(const char* value) uint32_t parseIPv4Address(const char* value)
{ {
uint32_t result = 0; uint32_t result = 0;
...@@ -123,7 +124,7 @@ uint32_t parseIPv4Address(const char* value) ...@@ -123,7 +124,7 @@ uint32_t parseIPv4Address(const char* value)
if (inet_pton(AF_INET, value, &result) != 1) if (inet_pton(AF_INET, value, &result) != 1)
result = INADDR_NONE; result = INADDR_NONE;
#endif #endif
return ntohl(result); return result;
} }
struct in6_addr parseIPv6Address(const char* value) struct in6_addr parseIPv6Address(const char* value)
...@@ -149,6 +150,7 @@ struct in6_addr parseIPv6Address(const char* value) ...@@ -149,6 +150,7 @@ struct in6_addr parseIPv6Address(const char* value)
return ret; return ret;
} }
// 'addr' must be in network byte order
const char* IPv4AddressToStr(uint32_t addr, char* dest, size_t size) const char* IPv4AddressToStr(uint32_t addr, char* dest, size_t size)
{ {
#if defined _WIN32 #if defined _WIN32
...@@ -156,7 +158,7 @@ const char* IPv4AddressToStr(uint32_t addr, char* dest, size_t size) ...@@ -156,7 +158,7 @@ const char* IPv4AddressToStr(uint32_t addr, char* dest, size_t size)
WSADATA wsaData; WSADATA wsaData;
SOCKADDR_IN sockaddr = {0}; SOCKADDR_IN sockaddr = {0};
sockaddr.sin_family = AF_INET; sockaddr.sin_family = AF_INET;
sockaddr.sin_addr.s_addr = htonl(addr); sockaddr.sin_addr.s_addr = addr;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
return NULL; return NULL;
...@@ -167,7 +169,7 @@ const char* IPv4AddressToStr(uint32_t addr, char* dest, size_t size) ...@@ -167,7 +169,7 @@ const char* IPv4AddressToStr(uint32_t addr, char* dest, size_t size)
return dest; return dest;
#else #else
struct in_addr in_addr; struct in_addr in_addr;
in_addr.s_addr = htonl(addr); in_addr.s_addr = addr;
return inet_ntop(AF_INET, &in_addr, dest, size); return inet_ntop(AF_INET, &in_addr, dest, size);
#endif #endif
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment