}
}
ModeAction ma = modehandlers[handler_id]->OnModeChange(user, targetuser, targetchannel, parameter, adding);
+
+ if ((modehandlers[handler_id]->GetNumParams(adding)) && (parameter == ""))
+ {
+ /* The handler nuked the parameter and they are supposed to have one.
+ * We CANT continue now, even if they actually returned MODEACTION_ALLOW,
+ * so we bail to the next mode character.
+ */
+ continue;
+ }
+
if (ma == MODEACTION_ALLOW)
{
log(DEBUG,"ModeAction was allow");
if ((pos_of_pling == std::string::npos) && (pos_of_at == std::string::npos))
{
/* Just a nick, or just a host */
- if ((pos_of_dot == std::string::npos) && (pos_of_dot == std::string::npos))
+ if ((pos_of_dot == std::string::npos) && (pos_of_colon == std::string::npos))
{
/* It has no '.' in it, it must be a nick. */
mask.append("!*@*");
/* Has a ! but no @, it must be a nick!ident */
mask.append("@*");
}
-
- /* Check for dumb stuff like *@*!*
- * swap the two items over so that at least the n!u@h ordering
- * is correct even if the elements may not be
- */
- if (pos_of_pling > pos_of_at)
- {
- mask.replace(pos_of_pling, 1, "@");
- mask.replace(pos_of_at, 1, "!");
- }
}
bool ModeParser::AddMode(ModeHandler* mh, unsigned const char modeletter)