summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2019-12-18 22:26:41 +0000
committerevergreen <evergreen@mongodb.com>2019-12-18 22:26:41 +0000
commite742c986376a7c06cee67d369261feab0efea1d3 (patch)
treed3bb2f60e1908917dc00efbae348c7b29bfc11ab /src/mongo
parente7f76047ebac65f583d60ed5e879525c9c03d52f (diff)
downloadmongo-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.h4
-rw-r--r--src/mongo/transport/transport_layer_asio.cpp4
-rw-r--r--src/mongo/util/net/sockaddr.cpp11
-rw-r--r--src/mongo/util/net/sockaddr.h2
-rw-r--r--src/mongo/util/net/ssl_manager_openssl.cpp3
-rw-r--r--src/mongo/util/net/ssl_manager_windows.cpp4
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;