diff options
author | Adam <Adam@anope.org> | 2016-11-11 12:58:14 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2016-11-11 12:58:14 -0500 |
commit | ef5b6919e3508cc9d4c722285d9d56f5a275f650 (patch) | |
tree | 56497f0a4f5d1847bae511c72bdb2d3581df58ef /src/config.cpp | |
parent | 8dd6e3195ed7600e39935e887df2626215733dfb (diff) |
Fix opers not really being serializable
Diffstat (limited to 'src/config.cpp')
-rw-r--r-- | src/config.cpp | 54 |
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) |