diff options
author | Adam <Adam@anope.org> | 2015-01-05 16:31:09 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2015-01-05 19:00:51 -0500 |
commit | d79d8e2608e304760c42bdf87502e3bc51781b88 (patch) | |
tree | 179913b8b328f88d52d84c3453fceb28a2d63422 /modules/commands/cs_flags.cpp | |
parent | 8ab1c71d7dc7a0d47e5711dc72e3fc9c3ee850bb (diff) | |
parent | c46ec39e5088119cd21f5f7e16e64e61a876ca20 (diff) |
Merge branch '2.0' into 2.1
Conflicts:
CMakeLists.txt
include/modules.h
include/serialize.h
modules/commands/bs_assign.cpp
modules/commands/bs_badwords.cpp
modules/commands/bs_bot.cpp
modules/commands/bs_control.cpp
modules/commands/bs_kick.cpp
modules/commands/cs_access.cpp
modules/commands/cs_akick.cpp
modules/commands/cs_drop.cpp
modules/commands/cs_entrymsg.cpp
modules/commands/cs_flags.cpp
modules/commands/cs_info.cpp
modules/commands/cs_invite.cpp
modules/commands/cs_kick.cpp
modules/commands/cs_mode.cpp
modules/commands/cs_register.cpp
modules/commands/cs_seen.cpp
modules/commands/cs_set.cpp
modules/commands/cs_suspend.cpp
modules/commands/cs_topic.cpp
modules/commands/cs_unban.cpp
modules/commands/cs_xop.cpp
modules/commands/hs_del.cpp
modules/commands/hs_list.cpp
modules/commands/hs_request.cpp
modules/commands/ms_ignore.cpp
modules/commands/ms_send.cpp
modules/commands/ns_recover.cpp
modules/commands/ns_register.cpp
modules/commands/ns_suspend.cpp
modules/commands/os_dns.cpp
modules/commands/os_noop.cpp
modules/commands/os_oper.cpp
modules/commands/os_session.cpp
modules/database/db_sql_live.cpp
modules/encryption/enc_bcrypt.cpp
modules/extra/m_ldap_authentication.cpp
modules/extra/m_ldap_oper.cpp
modules/fantasy.cpp
modules/m_dnsbl.cpp
modules/m_sasl.cpp
modules/protocol/hybrid.cpp
modules/protocol/inspircd20.cpp
modules/protocol/unreal.cpp
modules/pseudoclients/chanserv.cpp
modules/pseudoclients/nickserv.cpp
modules/webcpanel/pages/chanserv/access.cpp
modules/webcpanel/webcpanel.cpp
modules/webcpanel/webcpanel.h
src/command.cpp
src/messages.cpp
src/modulemanager.cpp
src/regchannel.cpp
src/serialize.cpp
Diffstat (limited to 'modules/commands/cs_flags.cpp')
-rw-r--r-- | modules/commands/cs_flags.cpp | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/modules/commands/cs_flags.cpp b/modules/commands/cs_flags.cpp index 03edc28e9..c8ef11796 100644 --- a/modules/commands/cs_flags.cpp +++ b/modules/commands/cs_flags.cpp @@ -82,11 +82,8 @@ void FlagsChanAccess::SetFlags(const Anope::string &i) class CommandCSFlags : public Command { - void DoModify(CommandSource &source, ChanServ::Channel *ci, const std::vector<Anope::string> ¶ms) + void DoModify(CommandSource &source, ChanServ::Channel *ci, Anope::string mask, const Anope::string &flags) { - Anope::string mask = params.size() > 2 ? params[2] : ""; - Anope::string flags = params.size() > 3 ? params[3] : ""; - if (flags.empty()) { this->OnSyntaxError(source, ""); @@ -140,6 +137,9 @@ class CommandCSFlags : public Command return; } } + + if (na) + mask = na->GetNick(); } ChanServ::ChanAccess *current = NULL; @@ -149,7 +149,7 @@ class CommandCSFlags : public Command for (current_idx = ci->GetAccessCount(); current_idx > 0; --current_idx) { ChanServ::ChanAccess *access = ci->GetAccess(current_idx - 1); - if (mask.equals_ci(access->Mask())) + if ((na && na->GetAccount() == access->GetAccount()) || mask.equals_ci(access->Mask())) { // Flags allows removing others that have the same access as you, // but no other access system does. @@ -375,7 +375,7 @@ class CommandCSFlags : public Command CommandCSFlags(Module *creator) : Command(creator, "chanserv/flags", 1, 4) { this->SetDesc(_("Modify the list of privileged users")); - this->SetSyntax(_("\037channel\037 MODIFY \037mask\037 \037changes\037")); + this->SetSyntax(_("\037channel\037 [MODIFY] \037mask\037 \037changes\037")); this->SetSyntax(_("\037channel\037 LIST [\037mask\037 | +\037flags\037]")); this->SetSyntax(_("\037channel\037 CLEAR")); } @@ -396,6 +396,8 @@ class CommandCSFlags : public Command bool has_access = false; if (source.HasPriv("chanserv/access/modify")) has_access = true; + else if (is_list && source.HasPriv("chanserv/access/list")) + has_access = true; else if (is_list && source.AccessFor(ci).HasPriv("ACCESS_LIST")) has_access = true; else if (source.AccessFor(ci).HasPriv("ACCESS_CHANGE")) @@ -413,14 +415,26 @@ class CommandCSFlags : public Command return; } - if (cmd.equals_ci("MODIFY")) - this->DoModify(source, ci, params); - else if (is_list) + if (is_list) this->DoList(source, ci, params); else if (cmd.equals_ci("CLEAR")) this->DoClear(source, ci); else - this->OnSyntaxError(source, cmd); + { + Anope::string mask, flags; + if (cmd.equals_ci("MODIFY")) + { + mask = params.size() > 2 ? params[2] : ""; + flags = params.size() > 3 ? params[3] : ""; + } + else + { + mask = cmd; + flags = params.size() > 2 ? params[2] : ""; + } + + this->DoModify(source, ci, mask, flags); + } } bool OnHelp(CommandSource &source, const Anope::string &subcommand) override |