Disable confirmation dialog on localhost

This commit is contained in:
rubenwardy 2019-02-03 12:31:55 +00:00 committed by Loic Blot
parent b7e1bca28c
commit 7796a3118d
No known key found for this signature in database
GPG Key ID: EFAA458E8C153987
3 changed files with 21 additions and 3 deletions

@ -271,3 +271,19 @@ void Address::print(std::ostream *s) const
else else
*s << serializeString() << ":" << m_port; *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;
}
}

@ -66,6 +66,7 @@ public:
void setPort(unsigned short port); void setPort(unsigned short port);
void print(std::ostream *s) const; void print(std::ostream *s) const;
std::string serializeString() const; std::string serializeString() const;
bool isLocalhost() const;
private: private:
unsigned int m_addr_family = 0; unsigned int m_addr_family = 0;

@ -97,9 +97,10 @@ void Client::handleCommand_Hello(NetworkPacket* pkt)
// Authenticate using that method, or abort if there wasn't any method found // 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_NONE) {
if (chosen_auth_mechanism == AUTH_MECHANISM_FIRST_SRP if (chosen_auth_mechanism == AUTH_MECHANISM_FIRST_SRP &&
&& !m_simple_singleplayer_mode !m_simple_singleplayer_mode &&
&& g_settings->getBool("enable_register_confirmation")) { !getServerAddress().isLocalhost() &&
g_settings->getBool("enable_register_confirmation")) {
promptConfirmRegistration(chosen_auth_mechanism); promptConfirmRegistration(chosen_auth_mechanism);
} else { } else {
startAuth(chosen_auth_mechanism); startAuth(chosen_auth_mechanism);