- for(CGIHostlist::iterator iter = Hosts.begin(); iter != Hosts.end(); iter++)
- {
- if(InspIRCd::Match(user->host, iter->hostmask, ascii_case_insensitive_map) || InspIRCd::MatchCIDR(user->GetIPString(), iter->hostmask, ascii_case_insensitive_map))
- {
- if(iter->type == WEBIRC && parameters[0] == iter->password)
- {
- realhost.set(user, user->host);
- realip.set(user, user->GetIPString());
-
- // 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
- bool host_ok = (parameters[2].length() <= ServerInstance->Config->Limits.MaxHost);
- const std::string& newhost = (host_ok ? parameters[2] : parameters[3]);
-
- if (notify)
- ServerInstance->SNO->WriteGlobalSno('w', "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());
-
- // Where the magic happens - change their IP
- ChangeIP(user, parameters[3]);
- // And follow this up by changing their host
- user->host = user->dhost = newhost;
- user->InvalidateCache();
-
- return CMD_SUCCESS;
- }
- }
- }