- std::string *webirc_hostname, *webirc_ip;
- if(user->GetExt("cgiirc_webirc_hostname", webirc_hostname))
- {
- user->host.assign(*webirc_hostname, 0, 64);
- user->dhost.assign(*webirc_hostname, 0, 64);
- delete webirc_hostname;
- user->InvalidateCache();
- user->Shrink("cgiirc_webirc_hostname");
- }
- if(user->GetExt("cgiirc_webirc_ip", webirc_ip))
- {
- ServerInstance->Users->RemoveCloneCounts(user);
- user->SetSockAddr(user->GetProtocolFamily(), webirc_ip->c_str(), user->GetPort());
- delete webirc_ip;
- user->InvalidateCache();
- user->Shrink("cgiirc_webirc_ip");
- ServerInstance->Users->AddLocalClone(user);
- ServerInstance->Users->AddGlobalClone(user);
- user->CheckClass();
- user->CheckLines(true);
- }
+ std::string *webirc_hostname = cmd.webirc_hostname.get(user);
+ std::string *webirc_ip = cmd.webirc_ip.get(user);
+ if (!webirc_ip)
+ return;
+ ServerInstance->Users->RemoveCloneCounts(user);
+ user->SetClientIP(webirc_ip->c_str());
+ user->InvalidateCache();
+ if (webirc_hostname && webirc_hostname->length() < 64)
+ user->host = user->dhost = *webirc_hostname;
+ else
+ user->host = user->dhost = user->GetIPString();
+ user->InvalidateCache();
+ ServerInstance->Users->AddLocalClone(user);
+ ServerInstance->Users->AddGlobalClone(user);
+ user->SetClass();
+ user->CheckClass();
+ user->CheckLines(true);
+ cmd.webirc_ip.unset(user);
+ cmd.webirc_hostname.unset(user);