realhost.set(user, user->host);
realip.set(user, user->GetIPString());
- bool host_ok = (parameters[2].length() < 64) && (parameters[2].find_first_not_of("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-") == std::string::npos);
+ // Check if we're happy with the provided hostname. If it's problematic then use the IP instead.
+ bool host_ok = (parameters[2].length() < 64) && (parameters[2].find_first_not_of("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.:-") == std::string::npos);
const std::string& newhost = (host_ok ? parameters[2] : parameters[3]);
if (notify)
ServerInstance->SNO->WriteGlobalSno('a', "Connecting user %s detected as using CGI:IRC (%s), changing real host to %s from %s", user->nick.c_str(), user->host.c_str(), newhost.c_str(), user->host.c_str());
- // Check if we're happy with the provided hostname. If it's problematic then make sure we won't set a host later, just the IP
- if (host_ok)
- webirc_hostname.set(user, parameters[2]);
- else
- webirc_hostname.unset(user);
-
+ webirc_hostname.set(user, newhost);
webirc_ip.set(user, parameters[3]);
return CMD_SUCCESS;
}
{
cmd.realhost.set(user, user->host);
cmd.realip.set(user, user->GetIPString());
- ChangeIP(user, newip);
user->host = user->dhost = user->GetIPString();
+ ChangeIP(user, newip);
user->InvalidateCache();
RecheckClass(user);
// Don't create the resolver if the core couldn't put the user in a connect class or when dns is disabled
if (!webirc_ip)
return MOD_RES_PASSTHRU;
- ChangeIP(user, *webirc_ip);
-
std::string* webirc_hostname = cmd.webirc_hostname.get(user);
user->host = user->dhost = (webirc_hostname ? *webirc_hostname : user->GetIPString());
+
+ ChangeIP(user, *webirc_ip);
user->InvalidateCache();
RecheckClass(user);