summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cmd_who.cpp2
-rw-r--r--src/helperfuncs.cpp2
-rw-r--r--src/snomasks.cpp2
-rw-r--r--src/users.cpp13
4 files changed, 6 insertions, 13 deletions
diff --git a/src/cmd_who.cpp b/src/cmd_who.cpp
index 07370f31e..93855dce2 100644
--- a/src/cmd_who.cpp
+++ b/src/cmd_who.cpp
@@ -295,7 +295,7 @@ CmdResult cmd_who::Handle (const char** parameters, int pcnt, userrec *user)
if (opt_viewopersonly)
{
/* Showing only opers */
- for (std::vector<userrec*>::iterator i = ServerInstance->all_opers.begin(); i != ServerInstance->all_opers.end(); i++)
+ for (std::list<userrec*>::iterator i = ServerInstance->all_opers.begin(); i != ServerInstance->all_opers.end(); i++)
{
userrec* oper = *i;
diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp
index 1defef047..1cad143c5 100644
--- a/src/helperfuncs.cpp
+++ b/src/helperfuncs.cpp
@@ -114,7 +114,7 @@ void InspIRCd::WriteOpers(const char* text, ...)
void InspIRCd::WriteOpers(const std::string &text)
{
- for (std::vector<userrec*>::iterator i = this->all_opers.begin(); i != this->all_opers.end(); i++)
+ for (std::list<userrec*>::iterator i = this->all_opers.begin(); i != this->all_opers.end(); i++)
{
userrec* a = *i;
if (IS_LOCAL(a) && a->IsModeSet('s'))
diff --git a/src/snomasks.cpp b/src/snomasks.cpp
index e447cd637..df524b51f 100644
--- a/src/snomasks.cpp
+++ b/src/snomasks.cpp
@@ -53,7 +53,7 @@ void SnomaskManager::WriteToSnoMask(char letter, const std::string &text)
if (n != SnoMasks.end())
{
/* Only opers can receive snotices, so we iterate the oper list */
- for (std::vector<userrec*>::iterator i = ServerInstance->all_opers.begin(); i != ServerInstance->all_opers.end(); i++)
+ for (std::list<userrec*>::iterator i = ServerInstance->all_opers.begin(); i != ServerInstance->all_opers.end(); i++)
{
userrec* a = *i;
if (IS_LOCAL(a) && a->IsModeSet('s') && a->IsModeSet('n') && a->IsNoticeMaskSet(n->first))
diff --git a/src/users.cpp b/src/users.cpp
index b357fd149..4f5c567d2 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -830,16 +830,9 @@ void userrec::UnOper()
// unset their oper type (what IS_OPER checks), and remove +o
*this->oper = 0;
this->modes[UM_OPERATOR] = 0;
-
- // remove them from the opers list.
- for (std::vector<userrec*>::iterator a = ServerInstance->all_opers.begin(); a < ServerInstance->all_opers.end(); a++)
- {
- if (*a == this)
- {
- ServerInstance->all_opers.erase(a);
- return;
- }
- }
+
+ // remove the user from the oper list. Will remove multiple entries as a safeguard against bug #404
+ ServerInstance->all_opers.remove(this);
}
}