- for(int i = 0; i < 4; i++)
- if(!HexToInt(ip[i], ident + i*2))
- return false;
-
- snprintf(newip, 16, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
-
- user->Extend("cgiirc_realhost", new std::string(user->host));
- user->Extend("cgiirc_realip", new std::string(user->GetIPString()));
- ServerInstance->Users->RemoveCloneCounts(user);
-#ifdef IPV6
- if (user->GetProtocolFamily() == AF_INET6)
- inet_pton(AF_INET6, newip, &((sockaddr_in6*)user->ip)->sin6_addr);
- else
-#endif
- inet_aton(newip, &((sockaddr_in*)user->ip)->sin_addr);
- ServerInstance->Users->AddLocalClone(user);
- ServerInstance->Users->AddGlobalClone(user);
- user->CheckClass();
- try
- {
- user->host.assign(newip, 0, 16);
- user->dhost.assign(newip, 0, 16);
- user->ident.assign("~cgiirc", 0, 8);
-
- bool cached;
- CGIResolver* r = new CGIResolver(this, ServerInstance, NotifyOpers, newip, false, user, user->GetFd(), "IDENT", cached);
- ServerInstance->AddResolver(r, cached);
- }
- catch (...)
- {
- user->host.assign(newip, 0, 16);
- user->dhost.assign(newip, 0, 16);
- user->ident.assign("~cgiirc", 0, 8);
- user->InvalidateCache();