X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_hideoper.cpp;h=2e0b388cf7eeec0630410a5f4fea687165b23882;hb=9c4cc196c073145d4ad2ae92fb2be2194cf621f4;hp=0fa5206eaea2eb5b44c142534f900245d3863bde;hpb=304b6dbbf56710b1310fce8c5cf71b73334c060a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_hideoper.cpp b/src/modules/m_hideoper.cpp index 0fa5206ea..2e0b388cf 100644 --- a/src/modules/m_hideoper.cpp +++ b/src/modules/m_hideoper.cpp @@ -34,7 +34,7 @@ class HideOper : public SimpleUserModeHandler oper = true; } - ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string& parameter, bool adding) + ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string& parameter, bool adding) CXX11_OVERRIDE { if (SimpleUserModeHandler::OnModeChange(source, dest, channel, parameter, adding) == MODEACTION_DENY) return MODEACTION_DENY; @@ -73,7 +73,7 @@ class ModuleHideOper : public Module, public Whois::LineEventListener ModResult OnNumeric(User* user, const Numeric::Numeric& numeric) CXX11_OVERRIDE { - if (numeric.GetNumeric() != 252 || active || user->HasPrivPermission("users/auspex")) + if (numeric.GetNumeric() != RPL_LUSEROP || active || user->HasPrivPermission("users/auspex")) return MOD_RES_PASSTHRU; // If there are no visible operators then we shouldn't send the numeric. @@ -81,7 +81,7 @@ class ModuleHideOper : public Module, public Whois::LineEventListener if (opercount) { active = true; - user->WriteNumeric(252, opercount, "operator(s) online"); + user->WriteNumeric(RPL_LUSEROP, opercount, "operator(s) online"); active = false; } return MOD_RES_DENY; @@ -104,22 +104,25 @@ class ModuleHideOper : public Module, public Whois::LineEventListener return MOD_RES_PASSTHRU; } - void OnSendWhoLine(User* source, const std::vector& params, User* user, Membership* memb, std::string& line) CXX11_OVERRIDE + ModResult OnSendWhoLine(User* source, const std::vector& params, User* user, Membership* memb, Numeric::Numeric& numeric) CXX11_OVERRIDE { if (user->IsModeSet(hm) && !source->HasPrivPermission("users/auspex")) { + // Hide the line completely if doing a "/who * o" query + if ((params.size() > 1) && (params[1].find('o') != std::string::npos)) + return MOD_RES_DENY; + // hide the "*" that marks the user as an oper from the /WHO line - std::string::size_type spcolon = line.find(" :"); - if (spcolon == std::string::npos) - return; // Another module hid the user completely - std::string::size_type sp = line.rfind(' ', spcolon-1); - std::string::size_type pos = line.find('*', sp); + // #chan ident localhost insp22.test nick H@ :0 Attila + if (numeric.GetParams().size() < 6) + return MOD_RES_PASSTHRU; + + std::string& param = numeric.GetParams()[5]; + const std::string::size_type pos = param.find('*'); if (pos != std::string::npos) - line.erase(pos, 1); - // hide the line completely if doing a "/who * o" query - if (params.size() > 1 && params[1].find('o') != std::string::npos) - line.clear(); + param.erase(pos, 1); } + return MOD_RES_PASSTHRU; } ModResult OnStats(Stats::Context& stats) CXX11_OVERRIDE @@ -135,7 +138,7 @@ class ModuleHideOper : public Module, public Whois::LineEventListener if (!oper->server->IsULine() && (stats.GetSource()->IsOper() || !oper->IsModeSet(hm))) { LocalUser* lu = IS_LOCAL(oper); - stats.AddRow(249, oper->nick + " (" + oper->ident + "@" + oper->dhost + ") Idle: " + + stats.AddRow(249, oper->nick + " (" + oper->ident + "@" + oper->GetDisplayedHost() + ") Idle: " + (lu ? ConvToStr(ServerInstance->Time() - lu->idle_lastmsg) + " secs" : "unavailable")); count++; }