mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-09 18:49:03 -04:00
Remove ValidateParam and rename CanonicalizeParam.
There's basically no safe way to handle a malformed list mode sent by a remote server without causing a desync. Its probably for the best if we just only apply validation to locally added list modes entries.
This commit is contained in:
parent
3b71730688
commit
80e8013282
@ -156,16 +156,7 @@ public:
|
||||
* @param parameter The parameter that the user specified.
|
||||
* @return True if the parameter is valid; otherwise, false.
|
||||
*/
|
||||
virtual bool CanonicalizeParam(LocalUser* user, Channel* channel, std::string& parameter);
|
||||
|
||||
/** Validate parameters.
|
||||
* Overridden by implementing module.
|
||||
* @param user Source user adding the parameter
|
||||
* @param channel Channel the parameter is being added to
|
||||
* @param parameter The actual parameter being added
|
||||
* @return true if the parameter is valid
|
||||
*/
|
||||
virtual bool ValidateParam(User* user, Channel* channel, const std::string& parameter);
|
||||
virtual bool ValidateParam(LocalUser* user, Channel* channel, std::string& parameter);
|
||||
|
||||
/** @copydoc ModeHandler::OnParameterMissing */
|
||||
void OnParameterMissing(User* user, User* dest, Channel* channel) override;
|
||||
|
@ -114,7 +114,7 @@ private:
|
||||
ExtBan::ManagerRef extbanmgr;
|
||||
public:
|
||||
ModeChannelBan(Module* Creator);
|
||||
bool CanonicalizeParam(LocalUser* user, Channel* channel, std::string& parameter) override;
|
||||
bool ValidateParam(LocalUser* user, Channel* channel, std::string& parameter) override;
|
||||
};
|
||||
|
||||
class ModeChannelKey final
|
||||
|
@ -27,7 +27,7 @@ ModeChannelBan::ModeChannelBan(Module* Creator)
|
||||
syntax = "<mask>";
|
||||
}
|
||||
|
||||
bool ModeChannelBan::CanonicalizeParam(LocalUser* user, Channel* channel, std::string& parameter)
|
||||
bool ModeChannelBan::ValidateParam(LocalUser* user, Channel* channel, std::string& parameter)
|
||||
{
|
||||
if (!extbanmgr || !extbanmgr->Canonicalize(parameter))
|
||||
ModeParser::CleanMask(parameter);
|
||||
|
@ -157,7 +157,7 @@ ModeAction ListModeBase::OnModeChange(User* source, User*, Channel* channel, Mod
|
||||
{
|
||||
// Try to canonicalise the parameter locally.
|
||||
LocalUser* lsource = IS_LOCAL(source);
|
||||
if (lsource && !CanonicalizeParam(lsource, channel, change.param))
|
||||
if (lsource && !ValidateParam(lsource, channel, change.param))
|
||||
return MODEACTION_DENY;
|
||||
|
||||
// If there was no list
|
||||
@ -188,27 +188,8 @@ ModeAction ListModeBase::OnModeChange(User* source, User*, Channel* channel, Mod
|
||||
return MODEACTION_DENY;
|
||||
}
|
||||
|
||||
/* Ok, it *could* be allowed, now give someone subclassing us
|
||||
* a chance to validate the parameter.
|
||||
* The param is passed by reference, so they can both modify it
|
||||
* and tell us if we allow it or not.
|
||||
*
|
||||
* eg, the subclass could:
|
||||
* 1) allow
|
||||
* 2) 'fix' parameter and then allow
|
||||
* 3) deny
|
||||
*/
|
||||
if (ValidateParam(source, channel, change.param))
|
||||
{
|
||||
// And now add the mask onto the list...
|
||||
cd->list.emplace_back(change.param, change.set_by.value_or(source->nick), change.set_at.value_or(ServerInstance->Time()));
|
||||
return MODEACTION_ALLOW;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If they deny it they have the job of giving an error message */
|
||||
return MODEACTION_DENY;
|
||||
}
|
||||
cd->list.emplace_back(change.param, change.set_by.value_or(source->nick), change.set_at.value_or(ServerInstance->Time()));
|
||||
return MODEACTION_ALLOW;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -231,12 +212,7 @@ ModeAction ListModeBase::OnModeChange(User* source, User*, Channel* channel, Mod
|
||||
}
|
||||
}
|
||||
|
||||
bool ListModeBase::CanonicalizeParam(LocalUser* user, Channel* channel, std::string& parameter)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ListModeBase::ValidateParam(User* user, Channel* channel, const std::string& parameter)
|
||||
bool ListModeBase::ValidateParam(LocalUser* user, Channel* channel, std::string& parameter)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ public:
|
||||
syntax = "<mask>";
|
||||
}
|
||||
|
||||
bool CanonicalizeParam(LocalUser* user, Channel* channel, std::string& parameter) override
|
||||
bool ValidateParam(LocalUser* user, Channel* channel, std::string& parameter) override
|
||||
{
|
||||
if (!extbanmgr || !extbanmgr->Canonicalize(parameter))
|
||||
ModeParser::CleanMask(parameter);
|
||||
|
@ -47,8 +47,9 @@ public:
|
||||
syntax = "<pattern>";
|
||||
}
|
||||
|
||||
bool ValidateParam(User* user, Channel* chan, const std::string& parameter) override
|
||||
bool ValidateParam(LocalUser* user, Channel* chan, std::string& parameter) override
|
||||
{
|
||||
// We only enforce the length restriction against local users to avoid causing a desync.
|
||||
if (parameter.length() > maxlen)
|
||||
{
|
||||
user->WriteNumeric(Numerics::InvalidModeParameter(chan, this, parameter, "Entry is too long for the spamfilter list."));
|
||||
|
@ -81,8 +81,9 @@ public:
|
||||
return MOD_RES_DENY;
|
||||
}
|
||||
|
||||
bool ValidateParam(User* user, Channel* chan, const std::string& parameter) override
|
||||
bool ValidateParam(LocalUser* user, Channel* chan, std::string& parameter) override
|
||||
{
|
||||
// We only enforce the format restriction against local users to avoid causing a desync.
|
||||
std::string restriction;
|
||||
std::string prefix;
|
||||
if (!ParseEntry(parameter, restriction, prefix))
|
||||
|
@ -48,7 +48,7 @@ public:
|
||||
syntax = "<mask>";
|
||||
}
|
||||
|
||||
bool CanonicalizeParam(LocalUser* user, Channel* channel, std::string& parameter) override
|
||||
bool ValidateParam(LocalUser* user, Channel* channel, std::string& parameter) override
|
||||
{
|
||||
if (!extbanmgr || !extbanmgr->Canonicalize(parameter))
|
||||
ModeParser::CleanMask(parameter);
|
||||
|
Loading…
x
Reference in New Issue
Block a user