summaryrefslogtreecommitdiff
path: root/src/config.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2016-11-11 12:58:14 -0500
committerAdam <Adam@anope.org>2016-11-11 12:58:14 -0500
commitef5b6919e3508cc9d4c722285d9d56f5a275f650 (patch)
tree56497f0a4f5d1847bae511c72bdb2d3581df58ef /src/config.cpp
parent8dd6e3195ed7600e39935e887df2626215733dfb (diff)
Fix opers not really being serializable
Diffstat (limited to 'src/config.cpp')
-rw-r--r--src/config.cpp54
1 files changed, 22 insertions, 32 deletions
diff --git a/src/config.cpp b/src/config.cpp
index e8f81c1a2..e34177e8f 100644
--- a/src/config.cpp
+++ b/src/config.cpp
@@ -511,18 +511,19 @@ Conf::Conf() : Block("")
/* Clear existing conf opers */
if (Config)
- for (Oper *o : Serialize::GetObjects<Oper *>())
- if (o->conf == Config)
- o->Delete();
- /* Apply new opers */
- for (Oper *o : Serialize::GetObjects<Oper *>())
{
- NickServ::Nick *na = NickServ::FindNick(o->GetName());
- if (!na)
- continue;
+ for (int i = 0; i < Config->CountBlock("oper"); ++i)
+ {
+ Block *oper = Config->GetBlock("oper", i);
- na->GetAccount()->o = o;
- Log() << "Tied oper " << na->GetAccount()->GetDisplay() << " to type " << o->GetType()->GetName();
+ const Anope::string &nname = oper->Get<Anope::string>("name");
+
+ Oper *o = Oper::Find(nname);
+ if (o != nullptr)
+ {
+ o->Delete();
+ }
+ }
}
/* Check the user keys */
@@ -575,27 +576,6 @@ void Conf::Post(Conf *old)
ModeManager::Apply(old);
- /* Apply opertype changes, as non-conf opers still point to the old oper types */
- for (Oper *o : Serialize::GetObjects<Oper *>())
- {
- /* Oper's type is in the old config, so update it */
- if (std::find(old->MyOperTypes.begin(), old->MyOperTypes.end(), o->GetType()) != old->MyOperTypes.end())
- {
- OperType *ot = o->GetType();
- o->SetType(nullptr);
-
- for (unsigned j = 0; j < MyOperTypes.size(); ++j)
- if (ot->GetName() == MyOperTypes[j]->GetName())
- o->SetType(MyOperTypes[j]);
-
- if (o->GetType() == NULL)
- {
- /* Oper block has lost type */
- o->Delete();
- }
- }
- }
-
for (BotInfo *bi : Serialize::GetObjects<BotInfo *>())
{
if (!bi->conf)
@@ -753,7 +733,6 @@ void Conf::LoadOpers()
if (o == nullptr)
o = Serialize::New<Oper *>();
- o->conf = this;
o->SetName(nname);
o->SetType(ot);
o->SetRequireOper(require_oper);
@@ -764,6 +743,17 @@ void Conf::LoadOpers()
Log(LOG_DEBUG) << "Creating oper " << nname << " of type " << ot->GetName();
}
+
+ /* Apply new opers */
+ for (Oper *o : Serialize::GetObjects<Oper *>())
+ {
+ NickServ::Nick *na = NickServ::FindNick(o->GetName());
+ if (!na)
+ continue;
+
+ na->GetAccount()->SetOper(o);
+ Log() << "Tied oper " << na->GetAccount()->GetDisplay() << " to type " << o->GetType()->GetName();
+ }
}
Block *Conf::GetModule(Module *m)