diff options
author | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2019-12-18 22:26:41 +0000 |
---|---|---|
committer | evergreen <evergreen@mongodb.com> | 2019-12-18 22:26:41 +0000 |
commit | e742c986376a7c06cee67d369261feab0efea1d3 (patch) | |
tree | d3bb2f60e1908917dc00efbae348c7b29bfc11ab /src/mongo | |
parent | e7f76047ebac65f583d60ed5e879525c9c03d52f (diff) | |
download | mongo-e742c986376a7c06cee67d369261feab0efea1d3.tar.gz |
SERVER-45156 SockAddr constructor should take sockaddr, not sockaddr_storage
Diffstat (limited to 'src/mongo')
-rw-r--r-- | src/mongo/transport/asio_utils.h | 4 | ||||
-rw-r--r-- | src/mongo/transport/transport_layer_asio.cpp | 4 | ||||
-rw-r--r-- | src/mongo/util/net/sockaddr.cpp | 11 | ||||
-rw-r--r-- | src/mongo/util/net/sockaddr.h | 2 | ||||
-rw-r--r-- | src/mongo/util/net/ssl_manager_openssl.cpp | 3 | ||||
-rw-r--r-- | src/mongo/util/net/ssl_manager_windows.cpp | 4 |
6 files changed, 12 insertions, 16 deletions
diff --git a/src/mongo/transport/asio_utils.h b/src/mongo/transport/asio_utils.h index f755693307e..48a12138432 100644 --- a/src/mongo/transport/asio_utils.h +++ b/src/mongo/transport/asio_utils.h @@ -48,9 +48,7 @@ namespace mongo { namespace transport { inline SockAddr endpointToSockAddr(const asio::generic::stream_protocol::endpoint& endPoint) { - struct sockaddr_storage sa = {}; - memcpy(&sa, endPoint.data(), endPoint.size()); - SockAddr wrappedAddr(sa, endPoint.size()); + SockAddr wrappedAddr(endPoint.data(), endPoint.size()); return wrappedAddr; } diff --git a/src/mongo/transport/transport_layer_asio.cpp b/src/mongo/transport/transport_layer_asio.cpp index a08cad4b578..a8d59579585 100644 --- a/src/mongo/transport/transport_layer_asio.cpp +++ b/src/mongo/transport/transport_layer_asio.cpp @@ -731,9 +731,7 @@ Status TransportLayerASIO::setup() { _listenerPort = endpointToHostAndPort(endpoint).port(); } - sockaddr_storage sa; - memcpy(&sa, addr->data(), addr->size()); - _acceptors.emplace_back(SockAddr(sa, addr->size()), std::move(acceptor)); + _acceptors.emplace_back(SockAddr(addr->data(), addr->size()), std::move(acceptor)); } if (_acceptors.empty() && _listenerOptions.isIngress()) { diff --git a/src/mongo/util/net/sockaddr.cpp b/src/mongo/util/net/sockaddr.cpp index 6a8bfaa1336..ed4135d1eb7 100644 --- a/src/mongo/util/net/sockaddr.cpp +++ b/src/mongo/util/net/sockaddr.cpp @@ -196,17 +196,14 @@ std::vector<SockAddr> SockAddr::createAll(StringData target, int port, sa_family memset(&storage, 0, sizeof(storage)); for (const auto* addrs = addrErr.addr.get(); addrs; addrs = addrs->ai_next) { fassert(40594, static_cast<size_t>(addrs->ai_addrlen) <= sizeof(struct sockaddr_storage)); - // Make a temp copy in a local sockaddr_storage so that the - // SockAddr constructor below can copy the entire buffer - // without over-running addrinfo's storage - memcpy(&storage, addrs->ai_addr, addrs->ai_addrlen); - ret.emplace(storage, addrs->ai_addrlen); + ret.emplace(addrs->ai_addr, addrs->ai_addrlen); } return std::vector<SockAddr>(ret.begin(), ret.end()); } -SockAddr::SockAddr(const sockaddr_storage& other, socklen_t size) - : addressSize(size), _hostOrIp(), sa(other), _isValid(true) { +SockAddr::SockAddr(const sockaddr* other, socklen_t size) + : addressSize(size), _hostOrIp(), sa(), _isValid(true) { + memcpy(&sa, other, size); _hostOrIp = toString(true); } diff --git a/src/mongo/util/net/sockaddr.h b/src/mongo/util/net/sockaddr.h index d704f227523..7b455d3b40b 100644 --- a/src/mongo/util/net/sockaddr.h +++ b/src/mongo/util/net/sockaddr.h @@ -88,7 +88,7 @@ struct SockAddr { */ explicit SockAddr(StringData target, int port, sa_family_t familyHint); - explicit SockAddr(const sockaddr_storage& other, socklen_t size); + explicit SockAddr(const sockaddr* other, socklen_t size); /** * Resolve an ip or hostname to a vector of SockAddr objects. diff --git a/src/mongo/util/net/ssl_manager_openssl.cpp b/src/mongo/util/net/ssl_manager_openssl.cpp index af98fcf4311..a7524ce57e8 100644 --- a/src/mongo/util/net/ssl_manager_openssl.cpp +++ b/src/mongo/util/net/ssl_manager_openssl.cpp @@ -1723,7 +1723,8 @@ StatusWith<SSLPeerInfo> SSLManagerOpenSSL::parseAndValidatePeerCertificate( sa->sin6_family = AF_INET6; memcpy(&(sa->sin6_addr), ipAddrStruct->data, ipAddrStruct->length); } - auto ipAddress = SockAddr(ss, sizeof(ss)).getAddr(); + auto ipAddress = + SockAddr(reinterpret_cast<struct sockaddr*>(&ss), sizeof(ss)).getAddr(); auto swIpAddress = CIDR::parse(ipAddress); if (swCIDRRemoteHost.isOK() && swIpAddress.isOK() && swCIDRRemoteHost.getValue() == swIpAddress.getValue()) { diff --git a/src/mongo/util/net/ssl_manager_windows.cpp b/src/mongo/util/net/ssl_manager_windows.cpp index 603f84b6917..4106f1f8ba3 100644 --- a/src/mongo/util/net/ssl_manager_windows.cpp +++ b/src/mongo/util/net/ssl_manager_windows.cpp @@ -1657,7 +1657,9 @@ StatusWith<std::vector<std::string>> getSubjectAlternativeNames(PCCERT_CONTEXT c sa->sin6_family = AF_INET6; memcpy(&(sa->sin6_addr), ipAddrStruct.pbData, ipAddrStruct.cbData); } - names.push_back(SockAddr(ss, sizeof(struct sockaddr_storage)).getAddr()); + names.push_back( + SockAddr(reinterpret_cast<sockaddr*>(&ss), sizeof(struct sockaddr_storage)) + .getAddr()); } } return names; |