+ // We have matched an <cgihost> block! Try to parse the encoded IPv4 address
+ // out of the ident.
+ irc::sockets::sockaddrs address(user->client_sa);
+ if (!ParseIdent(user, address))
+ return MOD_RES_PASSTHRU;
+
+ // Store the hostname and IP of the gateway for later use.
+ cmd.realhost.set(user, user->GetRealHost());
+ cmd.realip.set(user, user->GetIPString());
+
+ const std::string& newident = iter->GetIdent();
+ cmd.WriteLog("Connecting user %s is using an ident gateway; changing their IP from %s to %s and their ident from %s to %s.",
+ user->uuid.c_str(), user->GetIPString().c_str(), address.addr().c_str(), user->ident.c_str(), newident.c_str());
+
+ user->ChangeIdent(newident);
+ ChangeIP(user, address);
+ break;