Skip to content

Commit

Permalink
Networking: remove support for ipv4-only build
Browse files Browse the repository at this point in the history
As all supported operating systems support IPv6, we remove  support for
OS that do not support IPv6.

- removed macro "HAVE_IPV6"
- removed all code that is built when "HAVE_IPV6" is undefined
- removed cmake switch "ipv6"
  • Loading branch information
pstorz authored and arogge committed Sep 28, 2021
1 parent 855348e commit 63154e3
Show file tree
Hide file tree
Showing 12 changed files with 13 additions and 119 deletions.
11 changes: 4 additions & 7 deletions core/cmake/BareosSetVariableDefaults.cmake
Expand Up @@ -415,12 +415,6 @@ if(NOT DEFINED ndmp)
set(ndmp ON)
endif()

# ipv6
if((NOT DEFINED ipv6) OR (${ipv6}))
set(ipv6 ON)
set(HAVE_IPV6 1)
endif()

# acl
if(NOT DEFINED acl)
set(acl ON)
Expand Down Expand Up @@ -739,5 +733,8 @@ endif()

# gfapi-fd
if(NOT DEFINED gfapi_fd_testvolume)
set(gfapi_fd_testvolume testvol PARENT_SCOPE)
set(gfapi_fd_testvolume
testvol
PARENT_SCOPE
)
endif()
Expand Up @@ -108,7 +108,6 @@ CMAKE_ARGS+= -DCMAKE_VERBOSE_MAKEFILE=ON \
-Dscsi-crypto=no\
-Dlmdb=yes\
-Dndmp=yes\
-Dipv6=yes\
-Dacl=yes\
-Dxattr=yes\
-Dpostgresql=yes\
Expand Down
1 change: 0 additions & 1 deletion core/platforms/packaging/bareos.spec
Expand Up @@ -1005,7 +1005,6 @@ cmake .. \
-Dscsi-crypto=yes \
-Dlmdb=yes \
-Dndmp=yes \
-Dipv6=yes \
-Dacl=yes \
-Dxattr=yes \
%if 0%{?build_bat}
Expand Down
4 changes: 1 addition & 3 deletions core/src/include/bareos.h
Expand Up @@ -159,9 +159,7 @@ extern "C" {
*/
# include <winsock2.h>
# include <windows.h>
# if defined(HAVE_IPV6)
# include <ws2tcpip.h>
# endif
# include <ws2tcpip.h>
#endif


Expand Down
3 changes: 0 additions & 3 deletions core/src/include/config.h.in
Expand Up @@ -268,9 +268,6 @@ extern char win_os[];
// Define to 1 if ioctl request is unsigned long int
#cmakedefine HAVE_IOCTL_ULINT_REQUEST @HAVE_IOCTL_ULINT_REQUEST@

// Define to 1 if IPv6 support should be enabled
#cmakedefine HAVE_IPV6 @HAVE_IPV6@

// Define to 1 if you are running IRIX
#cmakedefine HAVE_IRIX_OS @HAVE_IRIX_OS@

Expand Down
63 changes: 7 additions & 56 deletions core/src/lib/address_conf.cc
Expand Up @@ -42,12 +42,7 @@
#endif

IPADDR::IPADDR()
: type(R_UNDEFINED)
, saddr(nullptr)
, saddr4(nullptr)
#ifdef HAVE_IPV6
, saddr6(nullptr)
#endif
: type(R_UNDEFINED), saddr(nullptr), saddr4(nullptr), saddr6(nullptr)
{
memset(&saddrbuf, 0, sizeof(saddrbuf));
}
Expand All @@ -58,40 +53,28 @@ IPADDR::IPADDR(const IPADDR& src) : IPADDR()
memcpy(&saddrbuf, &src.saddrbuf, sizeof(saddrbuf));
saddr = &saddrbuf.dontuse;
saddr4 = &saddrbuf.dontuse4;
#ifdef HAVE_IPV6
saddr6 = &saddrbuf.dontuse6;
#endif
}

IPADDR::IPADDR(int af) : IPADDR()
{
type = R_EMPTY;
#ifdef HAVE_IPV6
if (!(af == AF_INET6 || af == AF_INET)) {
Emsg1(M_ERROR_TERM, 0, _("Only ipv4 and ipv6 are supported (%d)\n"), af);
}
#else
if (af != AF_INET) {
Emsg1(M_ERROR_TERM, 0, _("Only ipv4 is supported (%d)\n"), af);
}
#endif

memset(&saddrbuf, 0, sizeof(saddrbuf));
saddr = &saddrbuf.dontuse;
saddr4 = &saddrbuf.dontuse4;
#ifdef HAVE_IPV6
saddr6 = &saddrbuf.dontuse6;
#endif
saddr->sa_family = af;
switch (af) {
case AF_INET:
saddr4->sin_port = 0xffff;
break;
#ifdef HAVE_IPV6
case AF_INET6:
saddr6->sin6_port = 0xffff;
break;
#endif
}

SetAddrAny();
Expand All @@ -106,25 +89,19 @@ unsigned short IPADDR::GetPortNetOrder() const
unsigned short port = 0;
if (saddr->sa_family == AF_INET) {
port = saddr4->sin_port;
}
#ifdef HAVE_IPV6
else {
} else {
port = saddr6->sin6_port;
}
#endif
return port;
}

void IPADDR::SetPortNet(unsigned short port)
{
if (saddr->sa_family == AF_INET) {
saddr4->sin_port = port;
}
#ifdef HAVE_IPV6
else {
} else {
saddr6->sin6_port = port;
}
#endif
}

int IPADDR::GetFamily() const { return saddr->sa_family; }
Expand All @@ -133,34 +110,24 @@ struct sockaddr* IPADDR::get_sockaddr() { return saddr; }

int IPADDR::GetSockaddrLen()
{
#ifdef HAVE_IPV6
return saddr->sa_family == AF_INET ? sizeof(*saddr4) : sizeof(*saddr6);
#else
return sizeof(*saddr4);
#endif
}
void IPADDR::CopyAddr(IPADDR* src)
{
if (saddr->sa_family == AF_INET) {
saddr4->sin_addr.s_addr = src->saddr4->sin_addr.s_addr;
}
#ifdef HAVE_IPV6
else {
} else {
saddr6->sin6_addr = src->saddr6->sin6_addr;
}
#endif
}

void IPADDR::SetAddrAny()
{
if (saddr->sa_family == AF_INET) {
saddr4->sin_addr.s_addr = INADDR_ANY;
}
#ifdef HAVE_IPV6
else {
} else {
saddr6->sin6_addr = in6addr_any;
}
#endif
}

void IPADDR::SetAddr4(struct in_addr* ip4)
Expand All @@ -173,7 +140,6 @@ void IPADDR::SetAddr4(struct in_addr* ip4)
saddr4->sin_addr = *ip4;
}

#ifdef HAVE_IPV6
void IPADDR::SetAddr6(struct in6_addr* ip6)
{
if (saddr->sa_family != AF_INET6) {
Expand All @@ -183,20 +149,15 @@ void IPADDR::SetAddr6(struct in6_addr* ip6)
}
saddr6->sin6_addr = *ip6;
}
#endif

const char* IPADDR::GetAddress(char* outputbuf, int outlen)
{
outputbuf[0] = '\0';
#ifdef HAVE_INET_NTOP
# ifdef HAVE_IPV6
inet_ntop(saddr->sa_family,
saddr->sa_family == AF_INET ? (void*)&(saddr4->sin_addr)
: (void*)&(saddr6->sin6_addr),
outputbuf, outlen);
# else
inet_ntop(saddr->sa_family, (void*)&(saddr4->sin_addr), outputbuf, outlen);
# endif
#else
bstrncpy(outputbuf, inet_ntoa(saddr4->sin_addr), outlen);
#endif
Expand Down Expand Up @@ -494,25 +455,19 @@ int SockaddrGetPortNetOrder(const struct sockaddr* client_addr)
{
if (client_addr->sa_family == AF_INET) {
return ((struct sockaddr_in*)client_addr)->sin_port;
}
#ifdef HAVE_IPV6
else {
} else {
return ((struct sockaddr_in6*)client_addr)->sin6_port;
}
#endif
return -1;
}

int SockaddrGetPort(const struct sockaddr* client_addr)
{
if (client_addr->sa_family == AF_INET) {
return ntohs(((struct sockaddr_in*)client_addr)->sin_port);
}
#ifdef HAVE_IPV6
else {
} else {
return ntohs(((struct sockaddr_in6*)client_addr)->sin6_port);
}
#endif
return -1;
}

Expand All @@ -521,13 +476,9 @@ char* SockaddrToAscii(const struct sockaddr* sa, char* buf, int len)
#ifdef HAVE_INET_NTOP
/* MA Bug 5 the problem was that i mixed up sockaddr and in_addr */
inet_ntop(sa->sa_family,
# ifdef HAVE_IPV6
sa->sa_family == AF_INET
? (void*)&(((struct sockaddr_in*)sa)->sin_addr)
: (void*)&(((struct sockaddr_in6*)sa)->sin6_addr),
# else
(void*)&(((struct sockaddr_in*)sa)->sin_addr),
# endif /* HAVE_IPV6 */
buf, len);
#else
bstrncpy(buf, inet_ntoa(((struct sockaddr_in*)sa)->sin_addr), len);
Expand Down
6 changes: 0 additions & 6 deletions core/src/lib/address_conf.h
Expand Up @@ -54,15 +54,11 @@ class IPADDR {
union {
struct sockaddr dontuse;
struct sockaddr_in dontuse4;
#ifdef HAVE_IPV6
struct sockaddr_in6 dontuse6;
#endif
} saddrbuf;
struct sockaddr* saddr = nullptr;
struct sockaddr_in* saddr4 = nullptr;
#ifdef HAVE_IPV6
struct sockaddr_in6* saddr6 = nullptr;
#endif
public:
void SetType(i_type o);
i_type GetType() const;
Expand All @@ -75,9 +71,7 @@ class IPADDR {
void CopyAddr(IPADDR* src);
void SetAddrAny();
void SetAddr4(struct in_addr* ip4);
#ifdef HAVE_IPV6
void SetAddr6(struct in6_addr* ip6);
#endif
const char* GetAddress(char* outputbuf, int outlen);
void BuildConfigString(OutputFormatterResource& send,
bool inherited);
Expand Down
12 changes: 0 additions & 12 deletions core/src/lib/bnet.cc
Expand Up @@ -284,7 +284,6 @@ const char* resolv_host(int family, const char* host, dlist<IPADDR>* addr_list)
*/
addr->SetAddr4(&(((struct sockaddr_in*)rp->ai_addr)->sin_addr));
break;
# ifdef HAVE_IPV6
case AF_INET6:
addr = new IPADDR(rp->ai_addr->sa_family);
addr->SetType(IPADDR::R_MULTIPLE);
Expand All @@ -298,7 +297,6 @@ const char* resolv_host(int family, const char* host, dlist<IPADDR>* addr_list)
*/
addr->SetAddr6(&(((struct sockaddr_in6*)rp->ai_addr)->sin6_addr));
break;
# endif
default:
continue;
}
Expand Down Expand Up @@ -363,13 +361,11 @@ static const char* resolv_host(int family, const char* host, dlist* addr_list)
addr->SetType(IPADDR::R_MULTIPLE);
addr->SetAddr4((struct in_addr*)*p);
break;
# ifdef HAVE_IPV6
case AF_INET6:
addr = new IPADDR(hp->h_addrtype);
addr->SetType(IPADDR::R_MULTIPLE);
addr->SetAddr6((struct in6_addr*)*p);
break;
# endif
default:
continue;
}
Expand Down Expand Up @@ -397,32 +393,26 @@ dlist<IPADDR>* BnetHost2IpAddrs(const char* host,
struct in_addr inaddr;
IPADDR* addr = 0;
const char* errmsg;
#ifdef HAVE_IPV6
struct in6_addr inaddr6;
#endif

dlist<IPADDR>* addr_list = new dlist<IPADDR>(addr, &addr->link);
if (!host || host[0] == '\0') {
if (family != 0) {
addr_list->append(add_any(family));
} else {
addr_list->append(add_any(AF_INET));
#ifdef HAVE_IPV6
addr_list->append(add_any(AF_INET6));
#endif
}
} else if (inet_aton(host, &inaddr)) { /* MA Bug 4 */
addr = new IPADDR(AF_INET);
addr->SetType(IPADDR::R_MULTIPLE);
addr->SetAddr4(&inaddr);
addr_list->append(addr);
#ifdef HAVE_IPV6
} else if (inet_pton(AF_INET6, host, &inaddr6) == 1) {
addr = new IPADDR(AF_INET6);
addr->SetType(IPADDR::R_MULTIPLE);
addr->SetAddr6(&inaddr6);
addr_list->append(addr);
#endif
} else {
if (family != 0) {
errmsg = resolv_host(family, host, addr_list);
Expand All @@ -432,13 +422,11 @@ dlist<IPADDR>* BnetHost2IpAddrs(const char* host,
return 0;
}
} else {
#ifdef HAVE_IPV6
/* We try to resolv host for ipv6 and ipv4, the connection procedure
* will try to reach the host for each protocols. We report only "Host
* not found" ipv4 message (no need to have ipv6 and ipv4 messages).
*/
resolv_host(AF_INET6, host, addr_list);
#endif
errmsg = resolv_host(AF_INET, host, addr_list);

if (addr_list->size() == 0) {
Expand Down
15 changes: 0 additions & 15 deletions core/src/lib/res.cc
Expand Up @@ -1215,17 +1215,11 @@ void ConfigurationParser::StoreAddresses(LEX* lc,
}
if (Bstrcasecmp("ip", lc->str) || Bstrcasecmp("ipv4", lc->str)) {
family = AF_INET;
#ifdef HAVE_IPV6
} else if (Bstrcasecmp("ipv6", lc->str)) {
family = AF_INET6;
} else {
scan_err1(lc, _("Expected a string [ip|ipv4|ipv6], got: %s"), lc->str);
}
#else
} else {
scan_err1(lc, _("Expected a string [ip|ipv4], got: %s"), lc->str);
}
#endif
token = LexGetToken(lc, BCT_SKIP_EOL);
if (token != BCT_EQUALS) {
scan_err1(lc, _("Expected a equal =, got: %s"), lc->str);
Expand Down Expand Up @@ -1356,21 +1350,12 @@ void ConfigurationParser::StoreAddressesPort(LEX* lc,
scan_err2(lc, _("can't add port (%s) to (%s)"), lc->str, errmsg);
}
} else {
#ifdef HAVE_IPV6
if (pass == 1
&& !AddAddress(GetItemVariablePointer<dlist<IPADDR>**>(*item),
IPADDR::R_SINGLE, htons(port), 0, 0, lc->str, errmsg,
sizeof(errmsg))) {
scan_err2(lc, _("can't add port (%s) to (%s)"), lc->str, errmsg);
}
#else
if (pass == 1
&& !AddAddress(GetItemVariablePointer<dlist<IPADDR>**>(*item),
IPADDR::R_SINGLE_PORT, htons(port), AF_INET, 0, lc->str,
errmsg, sizeof(errmsg))) {
scan_err2(lc, _("can't add port (%s) to (%s)"), lc->str, errmsg);
}
#endif
}
}

Expand Down

0 comments on commit 63154e3

Please sign in to comment.