diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mode.cpp | 2 | ||||
-rw-r--r-- | src/modules/m_check.cpp | 4 | ||||
-rw-r--r-- | src/users.cpp | 7 |
3 files changed, 7 insertions, 6 deletions
diff --git a/src/mode.cpp b/src/mode.cpp index beea6d3a0..b7a7b7d41 100644 --- a/src/mode.cpp +++ b/src/mode.cpp @@ -294,7 +294,7 @@ ModeAction ModeParser::TryMode(User* user, User* targetuser, Channel* chan, Mode } } - if (adding && IS_LOCAL(user) && mh->NeedsOper() && !user->HasModePermission(modechar, type)) + if ((adding) && (IS_LOCAL(user)) && (mh->NeedsOper()) && (!user->HasModePermission(mh))) { /* It's an oper only mode, and they don't have access to it. */ if (user->IsOper()) diff --git a/src/modules/m_check.cpp b/src/modules/m_check.cpp index 17eb9d9c5..ddac033c1 100644 --- a/src/modules/m_check.cpp +++ b/src/modules/m_check.cpp @@ -184,10 +184,10 @@ class CommandCheck : public Command for(char c='A'; c <= 'z'; c++) { ModeHandler* mh = ServerInstance->Modes->FindMode(c, MODETYPE_USER); - if (mh && mh->NeedsOper() && loctarg->HasModePermission(c, MODETYPE_USER)) + if (mh && mh->NeedsOper() && loctarg->HasModePermission(mh)) umodes.push_back(c); mh = ServerInstance->Modes->FindMode(c, MODETYPE_CHANNEL); - if (mh && mh->NeedsOper() && loctarg->HasModePermission(c, MODETYPE_CHANNEL)) + if (mh && mh->NeedsOper() && loctarg->HasModePermission(mh)) cmodes.push_back(c); } context.Write("modeperms", "user=" + umodes + " channel=" + cmodes); diff --git a/src/users.cpp b/src/users.cpp index c57b6fc14..5d1c12b13 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -153,19 +153,20 @@ const std::string& User::GetFullRealHost() return this->cached_fullrealhost; } -bool User::HasModePermission(unsigned char, ModeType) +bool User::HasModePermission(const ModeHandler* mh) const { return true; } -bool LocalUser::HasModePermission(unsigned char mode, ModeType type) +bool LocalUser::HasModePermission(const ModeHandler* mh) const { if (!this->IsOper()) return false; + const unsigned char mode = mh->GetModeChar(); if (mode < 'A' || mode > ('A' + 64)) return false; - return ((type == MODETYPE_USER ? oper->AllowedUserModes : oper->AllowedChanModes))[(mode - 'A')]; + return ((mh->GetModeType() == MODETYPE_USER ? oper->AllowedUserModes : oper->AllowedChanModes))[(mode - 'A')]; } /* |