From 7796a3118d7b4f58752fad0ca5f676dcafd7a76c Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sun, 3 Feb 2019 12:31:55 +0000 Subject: [PATCH] Disable confirmation dialog on localhost --- src/network/address.cpp | 16 ++++++++++++++++ src/network/address.h | 1 + src/network/clientpackethandler.cpp | 7 ++++--- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/network/address.cpp b/src/network/address.cpp index f698a2e91b7e..0ecface37f47 100644 --- a/src/network/address.cpp +++ b/src/network/address.cpp @@ -271,3 +271,19 @@ void Address::print(std::ostream *s) const else *s << serializeString() << ":" << m_port; } + +bool Address::isLocalhost() const { + if (isIPv6()) { + static const unsigned char localhost_bytes[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; + static const unsigned char mapped_ipv4_localhost[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0x7f, 0, 0, 1}; + + auto addr = m_address.ipv6.sin6_addr.s6_addr; + + return memcmp(addr, localhost_bytes, 16) == 0 || + memcmp(addr, mapped_ipv4_localhost, 16) == 0; + } else { + return m_address.ipv4.sin_addr.s_addr == 0x0100007F; + } +} diff --git a/src/network/address.h b/src/network/address.h index fb25b35650e2..4329c84a84e8 100644 --- a/src/network/address.h +++ b/src/network/address.h @@ -66,6 +66,7 @@ class Address void setPort(unsigned short port); void print(std::ostream *s) const; std::string serializeString() const; + bool isLocalhost() const; private: unsigned int m_addr_family = 0; diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 909d336ae8ca..2d02d07559c2 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -97,9 +97,10 @@ void Client::handleCommand_Hello(NetworkPacket* pkt) // Authenticate using that method, or abort if there wasn't any method found if (chosen_auth_mechanism != AUTH_MECHANISM_NONE) { - if (chosen_auth_mechanism == AUTH_MECHANISM_FIRST_SRP - && !m_simple_singleplayer_mode - && g_settings->getBool("enable_register_confirmation")) { + if (chosen_auth_mechanism == AUTH_MECHANISM_FIRST_SRP && + !m_simple_singleplayer_mode && + !getServerAddress().isLocalhost() && + g_settings->getBool("enable_register_confirmation")) { promptConfirmRegistration(chosen_auth_mechanism); } else { startAuth(chosen_auth_mechanism);