mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 11:09:04 -04:00
Fix for bug #466 reported by John
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9042 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
b8412d56a2
commit
68216fd12c
@ -521,13 +521,11 @@ void ModeParser::Process(const char* const* parameters, int pcnt, User *user, bo
|
||||
|
||||
if (!SkipAccessChecks && IS_LOCAL(user) && (MOD_RESULT != ACR_ALLOW))
|
||||
{
|
||||
ServerInstance->Logs->Log("MODE", DEBUG,"Enter minimum prefix check");
|
||||
/* Check access to this mode character */
|
||||
if ((type == MODETYPE_CHANNEL) && (modehandlers[handler_id]->GetNeededPrefix()))
|
||||
{
|
||||
char needed = modehandlers[handler_id]->GetNeededPrefix();
|
||||
ModeHandler* prefixmode = FindPrefix(needed);
|
||||
ServerInstance->Logs->Log("MODE", DEBUG,"Needed prefix: %c", needed);
|
||||
|
||||
/* If the mode defined by the handler is not '\0', but the handler for it
|
||||
* cannot be found, they probably dont have the right module loaded to implement
|
||||
|
@ -703,11 +703,27 @@ void User::UnOper()
|
||||
{
|
||||
if (IS_OPER(this))
|
||||
{
|
||||
// unset their oper type (what IS_OPER checks), and remove +o
|
||||
/* Remove all oper only modes from the user when the deoper - Bug #466*/
|
||||
std::string moderemove("-");
|
||||
|
||||
for (unsigned char letter = 'A'; letter <= 'z'; letter++)
|
||||
{
|
||||
if (letter != 'o')
|
||||
{
|
||||
ModeHandler* mh = ServerInstance->Modes->FindMode(letter, MODETYPE_USER);
|
||||
if (mh && mh->NeedsOper())
|
||||
moderemove += letter;
|
||||
}
|
||||
}
|
||||
|
||||
const char* parameters[] = { this->nick, moderemove.c_str() };
|
||||
ServerInstance->Parser->CallHandler("MODE", parameters, 2, this);
|
||||
|
||||
/* unset their oper type (what IS_OPER checks), and remove +o */
|
||||
*this->oper = 0;
|
||||
this->modes[UM_OPERATOR] = 0;
|
||||
|
||||
// remove the user from the oper list. Will remove multiple entries as a safeguard against bug #404
|
||||
/* remove the user from the oper list. Will remove multiple entries as a safeguard against bug #404 */
|
||||
ServerInstance->Users->all_opers.remove(this);
|
||||
|
||||
if (AllowedOperCommands)
|
||||
|
Loading…
x
Reference in New Issue
Block a user