X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_redirect.cpp;h=1a5a48b00607578722ffdacc1286f1aad6cf6165;hb=8085aa879bd989b526791797910295944a364084;hp=8e66060b8b258c03015a60087eda1f1e1ef95a98;hpb=d2a71fd3447c8bac65cc26077e2b9fc3fb0b28a7;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_redirect.cpp b/src/modules/m_redirect.cpp index 8e66060b8..1a5a48b00 100644 --- a/src/modules/m_redirect.cpp +++ b/src/modules/m_redirect.cpp @@ -30,38 +30,35 @@ class Redirect : public ModeHandler return std::make_pair(false, parameter); } - bool CheckTimeStamp(time_t theirs, time_t ours, const std::string &their_param, const std::string &our_param, Channel* channel) - { - /* When TS is equal, the alphabetically later one wins */ - return (their_param < our_param); - } - - ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding, bool) + ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding, bool server) { if (adding) { - Channel* c = NULL; - - if (IS_LOCAL(source) && !ServerInstance->IsChannel(parameter.c_str(), ServerInstance->Config->Limits.ChanMax)) - { - source->WriteNumeric(403, "%s %s :Invalid channel name", source->nick.c_str(), parameter.c_str()); - parameter.clear(); - return MODEACTION_DENY; - } - - c = ServerInstance->FindChan(parameter); - if (!c && !IS_OPER(source)) + if (IS_LOCAL(source)) { - source->WriteNumeric(690, "%s :Target channel %s must exist to be set as a redirect.",source->nick.c_str(),parameter.c_str()); - parameter.clear(); - return MODEACTION_DENY; + if (!ServerInstance->IsChannel(parameter.c_str(), ServerInstance->Config->Limits.ChanMax)) + { + source->WriteNumeric(403, "%s %s :Invalid channel name", source->nick.c_str(), parameter.c_str()); + parameter.clear(); + return MODEACTION_DENY; + } } - if (c && c->GetStatus(source) < STATUS_OP && !IS_OPER(source)) + if (IS_LOCAL(source) && !IS_OPER(source) && !server) { - source->WriteNumeric(690, "%s :You must be opped on %s to set it as a redirect.",source->nick.c_str(),parameter.c_str()); - parameter.clear(); - return MODEACTION_DENY; + Channel* c = ServerInstance->FindChan(parameter); + if (!c) + { + source->WriteNumeric(690, "%s :Target channel %s must exist to be set as a redirect.",source->nick.c_str(),parameter.c_str()); + parameter.clear(); + return MODEACTION_DENY; + } + else if (c->GetStatus(source) < STATUS_OP) + { + source->WriteNumeric(690, "%s :You must be opped on %s to set it as a redirect.",source->nick.c_str(),parameter.c_str()); + parameter.clear(); + return MODEACTION_DENY; + } } /* @@ -88,16 +85,15 @@ class Redirect : public ModeHandler class ModuleRedirect : public Module { - Redirect* re; + Redirect re; public: ModuleRedirect(InspIRCd* Me) - : Module(Me) + : Module(Me), re(Me) { - re = new Redirect(ServerInstance); - if (!ServerInstance->Modes->AddMode(re)) + if (!ServerInstance->Modes->AddMode(&re)) throw ModuleException("Could not add new modes!"); Implementation eventlist[] = { I_OnUserPreJoin }; ServerInstance->Modules->Attach(eventlist, this, 1); @@ -134,8 +130,7 @@ class ModuleRedirect : public Module virtual ~ModuleRedirect() { - ServerInstance->Modes->DelMode(re); - delete re; + ServerInstance->Modes->DelMode(&re); } virtual Version GetVersion()