summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2021-10-21 13:57:16 +0000
committerHåvard Pettersen <havardpe@oath.com>2021-10-21 13:57:16 +0000
commit78ebc6b018c3de6c744755e70e516a01e081ab0a (patch)
treef90134e2a342262055b51fc15ddb9d2ef58f2596 /vespalib
parent9abe019606f2367b05e4e13d796de65dddf7c449 (diff)
expose fallback host if you ask nicely
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/tests/net/socket_spec/socket_spec_test.cpp14
-rw-r--r--vespalib/src/vespa/vespalib/net/socket_spec.cpp9
-rw-r--r--vespalib/src/vespa/vespalib/net/socket_spec.h1
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.cpp4
4 files changed, 19 insertions, 9 deletions
diff --git a/vespalib/src/tests/net/socket_spec/socket_spec_test.cpp b/vespalib/src/tests/net/socket_spec/socket_spec_test.cpp
index 508559893c2..6f266ccb9bd 100644
--- a/vespalib/src/tests/net/socket_spec/socket_spec_test.cpp
+++ b/vespalib/src/tests/net/socket_spec/socket_spec_test.cpp
@@ -6,33 +6,35 @@ using namespace vespalib;
void verify(const SocketSpec &spec, bool valid,
const vespalib::string &path, const vespalib::string &name,
- const vespalib::string &host, int port)
+ const vespalib::string &host, const vespalib::string &host_with_fallback,
+ int port)
{
EXPECT_EQUAL(spec.valid(), valid);
EXPECT_EQUAL(spec.path(), path);
EXPECT_EQUAL(spec.name(), name);
EXPECT_EQUAL(spec.host(), host);
+ EXPECT_EQUAL(spec.host_with_fallback(), host_with_fallback);
EXPECT_EQUAL(spec.port(), port);
}
void verify_path(const SocketSpec &spec, const vespalib::string &path) {
- TEST_DO(verify(spec, true, path, "", "", -1));
+ TEST_DO(verify(spec, true, path, "", "", "", -1));
}
void verify_name(const SocketSpec &spec, const vespalib::string &name) {
- TEST_DO(verify(spec, true, "", name, "", -1));
+ TEST_DO(verify(spec, true, "", name, "", "", -1));
}
void verify_host_port(const SocketSpec &spec, const vespalib::string &host, int port) {
- TEST_DO(verify(spec, true, "", "", host, port));
+ TEST_DO(verify(spec, true, "", "", host, host, port));
}
void verify_port(const SocketSpec &spec, int port) {
- TEST_DO(verify(spec, true, "", "", "", port));
+ TEST_DO(verify(spec, true, "", "", "", "localhost", port));
}
void verify_invalid(const SocketSpec &spec) {
- TEST_DO(verify(spec, false, "", "", "", -1));
+ TEST_DO(verify(spec, false, "", "", "", "", -1));
}
void verify_spec(const vespalib::string &str, const vespalib::string &expect) {
diff --git a/vespalib/src/vespa/vespalib/net/socket_spec.cpp b/vespalib/src/vespa/vespalib/net/socket_spec.cpp
index c8d1f6eb04b..10293d80c3e 100644
--- a/vespalib/src/vespa/vespalib/net/socket_spec.cpp
+++ b/vespalib/src/vespa/vespalib/net/socket_spec.cpp
@@ -10,6 +10,7 @@ namespace {
const vespalib::string tcp_prefix("tcp/");
const vespalib::string ipc_path_prefix("ipc/file:");
const vespalib::string ipc_name_prefix("ipc/name:");
+const vespalib::string fallback_host("localhost");
SocketAddress make_address(const char *node, int port, bool server) {
if (server) {
@@ -20,7 +21,7 @@ SocketAddress make_address(const char *node, int port, bool server) {
}
SocketAddress make_address(int port, bool server) {
- const char *node = server ? nullptr : "localhost";
+ const char *node = server ? nullptr : fallback_host.c_str();
return make_address(node, port, server);
}
@@ -110,4 +111,10 @@ SocketSpec::replace_host(const vespalib::string &new_host) const
return SocketSpec();
}
+const vespalib::string &
+SocketSpec::host_with_fallback() const
+{
+ return (_type == Type::PORT) ? fallback_host : host();
+}
+
} // namespace vespalib
diff --git a/vespalib/src/vespa/vespalib/net/socket_spec.h b/vespalib/src/vespa/vespalib/net/socket_spec.h
index ef41a471480..06206800797 100644
--- a/vespalib/src/vespa/vespalib/net/socket_spec.h
+++ b/vespalib/src/vespa/vespalib/net/socket_spec.h
@@ -44,6 +44,7 @@ public:
const vespalib::string &path() const { return (_type == Type::PATH) ? _node : _empty; }
const vespalib::string &name() const { return (_type == Type::NAME) ? _node : _empty; }
const vespalib::string &host() const { return (_type == Type::HOST_PORT) ? _node : _empty; }
+ const vespalib::string &host_with_fallback() const;
int port() const { return _port; }
SocketAddress client_address() const { return address(false); }
SocketAddress server_address() const { return address(true); }
diff --git a/vespalib/src/vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.cpp b/vespalib/src/vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.cpp
index db705e7644a..d504857d5ae 100644
--- a/vespalib/src/vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.cpp
+++ b/vespalib/src/vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.cpp
@@ -258,7 +258,7 @@ void OpenSslCryptoCodecImpl::enable_hostname_validation_if_requested() {
if (_peer_spec.valid() && !_ctx->transport_security_options().disable_hostname_validation()) {
auto* verify_param = SSL_get0_param(_ssl.get()); // Internal ptr, no refcount bump or alloc. We must not free.
LOG_ASSERT(verify_param != nullptr);
- vespalib::string host = _peer_spec.host();
+ vespalib::string host = _peer_spec.host_with_fallback();
if (X509_VERIFY_PARAM_set1_host(verify_param, host.c_str(), host.size()) != 1) {
throw CryptoException("X509_VERIFY_PARAM_set1_host() failed");
}
@@ -268,7 +268,7 @@ void OpenSslCryptoCodecImpl::enable_hostname_validation_if_requested() {
void OpenSslCryptoCodecImpl::set_server_name_indication_extension() {
if (_peer_spec.valid()) {
- vespalib::string host = _peer_spec.host();
+ vespalib::string host = _peer_spec.host_with_fallback();
// OpenSSL tries to cast const char* to void* in a macro, even on 1.1.1. GCC is not overly impressed,
// so to satiate OpenSSL's quirks we pre-cast away the constness.
auto* host_cstr_that_trusts_openssl_not_to_mess_up = const_cast<char*>(host.c_str());