summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/modules/m_spanningtree/opertype.cpp3
-rw-r--r--src/usermanager.cpp1
-rw-r--r--src/users.cpp15
3 files changed, 11 insertions, 8 deletions
diff --git a/src/modules/m_spanningtree/opertype.cpp b/src/modules/m_spanningtree/opertype.cpp
index 473cdb857..99c5ea8bc 100644
--- a/src/modules/m_spanningtree/opertype.cpp
+++ b/src/modules/m_spanningtree/opertype.cpp
@@ -33,7 +33,8 @@ CmdResult CommandOpertype::HandleRemote(RemoteUser* u, CommandBase::Params& para
ServerInstance->Users->all_opers.push_back(u);
ModeHandler* opermh = ServerInstance->Modes->FindMode('o', MODETYPE_USER);
- u->SetMode(opermh, true);
+ if (opermh)
+ u->SetMode(opermh, true);
ServerConfig::OperIndex::const_iterator iter = ServerInstance->Config->OperTypes.find(opertype);
if (iter != ServerInstance->Config->OperTypes.end())
diff --git a/src/usermanager.cpp b/src/usermanager.cpp
index 968d5db00..6f9d15502 100644
--- a/src/usermanager.cpp
+++ b/src/usermanager.cpp
@@ -221,6 +221,7 @@ void UserManager::QuitUser(User* user, const std::string& quitreason, const std:
uuidlist.erase(user->uuid);
user->PurgeEmptyChannels();
+ user->UnOper();
}
void UserManager::AddClone(User* user)
diff --git a/src/users.cpp b/src/users.cpp
index 8f20b7523..f11a7a380 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -357,10 +357,12 @@ CullResult FakeUser::cull()
void User::Oper(OperInfo* info)
{
ModeHandler* opermh = ServerInstance->Modes->FindMode('o', MODETYPE_USER);
- if (this->IsModeSet(opermh))
- this->UnOper();
-
- this->SetMode(opermh, true);
+ if (opermh)
+ {
+ if (this->IsModeSet(opermh))
+ this->UnOper();
+ this->SetMode(opermh, true);
+ }
this->oper = info;
LocalUser* localuser = IS_LOCAL(this);
@@ -474,7 +476,8 @@ void User::UnOper()
stdalgo::vector::swaperase(ServerInstance->Users->all_opers, this);
ModeHandler* opermh = ServerInstance->Modes->FindMode('o', MODETYPE_USER);
- this->SetMode(opermh, false);
+ if (opermh)
+ this->SetMode(opermh, false);
FOREACH_MOD(OnPostDeoper, (this));
}
@@ -1161,8 +1164,6 @@ void User::PurgeEmptyChannels()
++i;
c->DelUser(this);
}
-
- this->UnOper();
}
void User::WriteNotice(const std::string& text)