if(hostmask.length())
{
- Hosts.push_back(CGIhost(hostmask));
-
- if(type == "pass")
- Hosts.back().type = PASS;
- else if(type == "ident")
- Hosts.back().type = IDENT;
- else if(type == "passfirst")
- Hosts.back().type = PASSFIRST;
- else if(type == "webirc") {
- Hosts.back().type = WEBIRC;
- if(password.length())
- Hosts.back().password=password;
- else
+ if(type == "webirc" && !password.length()) {
ServerInstance->Log(DEFAULT, "m_cgiirc: Missing password in config: %s", hostmask.c_str());
+ } else {
+ CGItype cgitype;
+ if(type == "pass")
+ cgitype = PASS;
+ else if(type == "ident")
+ cgitype = IDENT;
+ else if(type == "passfirst")
+ cgitype = PASSFIRST;
+ else if(type == "webirc") {
+ cgitype = WEBIRC;
+ }
+ Hosts.push_back(CGIhost(hostmask,cgitype, password.length() ? password : "" ));
}
}
else
if(user->GetExt("cgiirc_webirc_ip", webirc_ip))
{
bool valid=false;
+ user->RemoveCloneCounts();
#ifdef IPV6
valid = (inet_pton(AF_INET6, webirc_ip->c_str(), &((sockaddr_in6*)user->ip)->sin6_addr) > 0);
delete webirc_ip;
user->InvalidateCache();
user->Shrink("cgiirc_webirc_ip");
+ ServerInstance->AddLocalClone(user);
+ ServerInstance->AddGlobalClone(user);
+ user->CheckClass();
}
}
user->InvalidateCache();
bool valid = false;
+ user->RemoveCloneCounts();
#ifdef IPV6
if (user->GetProtocolFamily() == AF_INET6)
valid = (inet_pton(AF_INET6, user->password, &((sockaddr_in6*)user->ip)->sin6_addr) > 0);
if (inet_aton(user->password, &((sockaddr_in*)user->ip)->sin_addr))
valid = true;
#endif
+ ServerInstance->AddLocalClone(user);
+ ServerInstance->AddGlobalClone(user);
+ user->CheckClass();
+
if (valid)
{
/* We were given a IP in the password, we don't do DNS so they get this is as their host as well. */
CGIResolver* r = new CGIResolver(this, ServerInstance, NotifyOpers, user->password, false, user, user->GetFd(), "PASS", cached);
ServerInstance->AddResolver(r, cached);
}
- catch (ModuleException)
+ catch (...)
{
if (NotifyOpers)
ServerInstance->WriteOpers("*** Connecting user %s detected as using CGI:IRC (%s), but i could not resolve their hostname!", user->nick, user->host);
user->Extend("cgiirc_realhost", new std::string(user->host));
user->Extend("cgiirc_realip", new std::string(user->GetIPString()));
+ user->RemoveCloneCounts();
#ifdef IPV6
if (user->GetProtocolFamily() == AF_INET6)
inet_pton(AF_INET6, newip, &((sockaddr_in6*)user->ip)->sin6_addr);
else
- inet_aton(newip, &((sockaddr_in*)user->ip)->sin_addr);
-#else
- inet_aton(newip, &((sockaddr_in*)user->ip)->sin_addr);
#endif
-
+ inet_aton(newip, &((sockaddr_in*)user->ip)->sin_addr);
+ ServerInstance->AddLocalClone(user);
+ ServerInstance->AddGlobalClone(user);
+ user->CheckClass();
try
{
strlcpy(user->host, newip, 16);
CGIResolver* r = new CGIResolver(this, ServerInstance, NotifyOpers, newip, false, user, user->GetFd(), "IDENT", cached);
ServerInstance->AddResolver(r, cached);
}
- catch (ModuleException)
+ catch (...)
{
strlcpy(user->host, newip, 16);
strlcpy(user->dhost, newip, 16);
};
-class ModuleCgiIRCFactory : public ModuleFactory
-{
- public:
- ModuleCgiIRCFactory()
- {
- }
-
- ~ModuleCgiIRCFactory()
- {
- }
-
- virtual Module * CreateModule(InspIRCd* Me)
- {
- return new ModuleCgiIRC(Me);
- }
-
-};
-
-
-extern "C" DllExport void * init_module( void )
-{
- return new ModuleCgiIRCFactory;
-}
+MODULE_INIT(ModuleCgiIRC)