diff --git a/doc/Changelog b/doc/Changelog index 58c9d4a96..da092d19b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,8 @@ 4 July 2022: George - Fix bug introduced in 'improve val_sigcrypt.c::algo_needs_missing for one loop pass'. + - Merge PR #668 from Cristian Rodríguez: Set IP_BIND_ADDRESS_NO_PORT on + outbound tcp sockets. 3 July 2022: George - Merge PR #671 from Petr Menšík: Disable ED25519 and ED448 in FIPS diff --git a/services/outside_network.c b/services/outside_network.c index edb8ca13a..3f479a3a3 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -271,7 +271,7 @@ outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss, int s; int af; char* err; -#ifdef SO_REUSEADDR +#if defined(SO_REUSEADDR) || defined(IP_BIND_ADDRESS_NO_PORT) int on = 1; #endif #ifdef INET6 @@ -317,7 +317,13 @@ outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss, " setsockopt(TCP_MAXSEG) unsupported"); #endif /* defined(IPPROTO_TCP) && defined(TCP_MAXSEG) */ } - +#ifdef IP_BIND_ADDRESS_NO_PORT + if(setsockopt(s, IPPROTO_IP, IP_BIND_ADDRESS_NO_PORT, (void*)&on, + (socklen_t)sizeof(on)) < 0) { + verbose(VERB_ALGO, "outgoing tcp:" + " setsockopt(.. IP_BIND_ADDRESS_NO_PORT ..) failed"); + } +#endif /* IP_BIND_ADDRESS_NO_PORT */ return s; }