diff options
author | Håvard Pettersen <havardpe@oath.com> | 2021-10-21 13:57:16 +0000 |
---|---|---|
committer | Håvard Pettersen <havardpe@oath.com> | 2021-10-21 13:57:16 +0000 |
commit | 78ebc6b018c3de6c744755e70e516a01e081ab0a (patch) | |
tree | f90134e2a342262055b51fc15ddb9d2ef58f2596 /vespalib | |
parent | 9abe019606f2367b05e4e13d796de65dddf7c449 (diff) |
expose fallback host if you ask nicely
Diffstat (limited to 'vespalib')
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()); |