From 68dceb9e8d007b72ea8dc3ef5e8b1681f635b7de Mon Sep 17 00:00:00 2001 From: danieldg Date: Fri, 19 Feb 2010 21:39:53 +0000 Subject: Allow autoop to use long names --- src/modules/m_autoop.cpp | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) (limited to 'src/modules/m_autoop.cpp') diff --git a/src/modules/m_autoop.cpp b/src/modules/m_autoop.cpp index 25cd9cda3..0a7d774c0 100644 --- a/src/modules/m_autoop.cpp +++ b/src/modules/m_autoop.cpp @@ -33,34 +33,31 @@ class AutoOpList : public ListModeBase if (pos == 0 || pos == std::string::npos) return adding ? MOD_RES_DENY : MOD_RES_PASSTHRU; unsigned int mylevel = channel->GetPrefixValue(source); - while (pos > 0) + std::string mid = parameter.substr(0, pos); + ModeHandler* mh = ServerInstance->Modes->FindMode(mid); + + if (adding && (!mh || !mh->GetPrefixRank())) { - pos--; - ModeHandler* mh = ServerInstance->Modes->FindMode(parameter[pos], MODETYPE_CHANNEL); - if (adding && (!mh || !mh->GetPrefixRank())) - { - source->WriteNumeric(415, "%s %c :Cannot find prefix mode '%c' for autoop", - source->nick.c_str(), parameter[pos], parameter[pos]); - return MOD_RES_DENY; - } - else if (!mh) - continue; + source->WriteNumeric(415, "%s %s :Cannot find prefix mode '%s' for autoop", + source->nick.c_str(), mid.c_str(), mid.c_str()); + return MOD_RES_DENY; + } + else if (!mh) + return MOD_RES_PASSTHRU; - std::string dummy; - if (mh->AccessCheck(source, channel, dummy, true) == MOD_RES_DENY) - return MOD_RES_DENY; - if (mh->GetLevelRequired() > mylevel) - { - source->WriteNumeric(482, "%s %s :You must be able to set mode '%c' to include it in an autoop", - source->nick.c_str(), channel->name.c_str(), parameter[pos]); - return MOD_RES_DENY; - } + std::string dummy; + if (mh->AccessCheck(source, channel, dummy, true) == MOD_RES_DENY) + return MOD_RES_DENY; + if (mh->GetLevelRequired() > mylevel) + { + source->WriteNumeric(482, "%s %s :You must be able to set mode '%s' to include it in an autoop", + source->nick.c_str(), channel->name.c_str(), mid.c_str()); + return MOD_RES_DENY; } return MOD_RES_PASSTHRU; } }; - class ModuleAutoOp : public Module { AutoOpList mh; @@ -93,7 +90,11 @@ public: if (colon == std::string::npos) continue; if (chan->CheckBan(user, (**it).mask.substr(colon+1))) - privs += (**it).mask.substr(0, colon); + { + ModeHandler* given = ServerInstance->Modes->FindMode((**it).mask.substr(0, colon)); + if (given) + privs += given->GetModeChar(); + } } } -- cgit v1.3.1-10-gc9f91