]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Merge branch 'insp20' into master.
authorPeter Powell <petpow@saberuk.com>
Mon, 24 Sep 2018 17:25:06 +0000 (18:25 +0100)
committerPeter Powell <petpow@saberuk.com>
Mon, 24 Sep 2018 17:25:06 +0000 (18:25 +0100)
1  2 
src/users.cpp

diff --cc src/users.cpp
index 1ddd3ca0ef99864d0c1da9a87b8ede2654be3c96,ac87f1187992cc943d1dab44cc9de778473ffcdb..8f20b7523fca082dd751f4d8812660c7f37e95ed
@@@ -720,23 -1001,23 +720,33 @@@ irc::sockets::cidr_mask User::GetCIDRMa
        return irc::sockets::cidr_mask(client_sa, range);
  }
  
 -bool User::SetClientIP(const char* sip, bool recheck_eline)
 +bool User::SetClientIP(const std::string& address, bool recheck_eline)
  {
--      this->InvalidateCache();
-       return irc::sockets::aptosa(address, 0, client_sa);
 -      return irc::sockets::aptosa(sip, 0, client_sa);
++      irc::sockets::sockaddrs sa;
++      if (!irc::sockets::aptosa(address, client_sa.port(), sa))
++              return false;
++
++      User::SetClientIP(sa, recheck_eline);
++      return true;
  }
  
  void User::SetClientIP(const irc::sockets::sockaddrs& sa, bool recheck_eline)
  {
--      this->InvalidateCache();
++      const std::string oldip(GetIPString());
        memcpy(&client_sa, &sa, sizeof(irc::sockets::sockaddrs));
++      this->InvalidateCache();
++
++      // If the users hostname was their IP then update it.
++      if (GetRealHost() == oldip)
++              ChangeRealHost(GetIPString(), false);
++      if (GetDisplayedHost() == oldip)
++              ChangeDisplayedHost(GetIPString());
  }
  
 -bool LocalUser::SetClientIP(const char* sip, bool recheck_eline)
 +bool LocalUser::SetClientIP(const std::string& address, bool recheck_eline)
  {
        irc::sockets::sockaddrs sa;
-       if (!irc::sockets::aptosa(address, 0, sa))
 -      if (!irc::sockets::aptosa(sip, 0, sa))
--              // Invalid
++      if (!irc::sockets::aptosa(address, client_sa.port(), sa))
                return false;
  
        LocalUser::SetClientIP(sa, recheck_eline);