X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_cgiirc.cpp;h=09f6a4659d88e0d760a85d48166514ed825b68d8;hb=f24239657e749d7d03f9dbafa4128c5720910153;hp=63efd6bae8caf541b844c181cf800c8225b51ddc;hpb=349106f3f9f75d7f957fc5d1e71ca650f4807bb9;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_cgiirc.cpp b/src/modules/m_cgiirc.cpp index 63efd6bae..09f6a4659 100644 --- a/src/modules/m_cgiirc.cpp +++ b/src/modules/m_cgiirc.cpp @@ -73,6 +73,7 @@ class CommandWebirc : public Command realhost("cgiirc_realhost", Creator), realip("cgiirc_realip", Creator), webirc_hostname("cgiirc_webirc_hostname", Creator), webirc_ip("cgiirc_webirc_ip", Creator) { + allow_empty_last_param = false; works_before_reg = true; this->syntax = "password client hostname ip"; } @@ -81,6 +82,14 @@ class CommandWebirc : public Command if(user->registered == REG_ALL) return CMD_FAILURE; + irc::sockets::sockaddrs ipaddr; + if (!irc::sockets::aptosa(parameters[3], 0, ipaddr)) + { + IS_LOCAL(user)->CommandFloodPenalty += 5000; + ServerInstance->SNO->WriteGlobalSno('a', "Connecting user %s tried to use WEBIRC but gave an invalid IP address.", user->GetFullRealHost().c_str()); + return CMD_FAILURE; + } + 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)) @@ -108,6 +117,7 @@ class CommandWebirc : public Command } } + IS_LOCAL(user)->CommandFloodPenalty += 5000; ServerInstance->SNO->WriteGlobalSno('a', "Connecting user %s tried to use WEBIRC, but didn't match any configured webirc blocks.", user->GetFullRealHost().c_str()); return CMD_FAILURE; } @@ -176,9 +186,9 @@ class ModuleCgiIRC : public Module CommandWebirc cmd; LocalIntExt waiting; - static void RecheckElineAndClass(LocalUser* user) + static void RecheckClass(LocalUser* user) { - user->exempt = (ServerInstance->XLines->MatchesLine("E", user) != NULL); + user->MyClass = NULL; user->SetClass(); user->CheckClass(); } @@ -198,7 +208,7 @@ class ModuleCgiIRC : public Module ChangeIP(user, newip); user->host = user->dhost = user->GetIPString(); user->InvalidateCache(); - RecheckElineAndClass(user); + RecheckClass(user); // Don't create the resolver if the core couldn't put the user in a connect class or when dns is disabled if (user->quitting || ServerInstance->Config->NoUserDns) return; @@ -207,8 +217,8 @@ class ModuleCgiIRC : public Module { bool cached; CGIResolver* r = new CGIResolver(this, cmd.notify, newip, user, (was_pass ? "PASS" : "IDENT"), cached, waiting); - ServerInstance->AddResolver(r, cached); waiting.set(user, waiting.get(user) + 1); + ServerInstance->AddResolver(r, cached); } catch (...) { @@ -294,8 +304,9 @@ public: std::string* webirc_hostname = cmd.webirc_hostname.get(user); user->host = user->dhost = (webirc_hostname ? *webirc_hostname : user->GetIPString()); + user->InvalidateCache(); - RecheckElineAndClass(user); + RecheckClass(user); if (user->quitting) return MOD_RES_DENY;