diff options
author | Adam <Adam@anope.org> | 2012-04-23 05:08:26 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2012-04-23 05:08:26 -0400 |
commit | 573e49a7ead331219eb6f0d3ca9cf83e793a5c9c (patch) | |
tree | e145e04fa3d041cf92ce46da4ac790b63231059c /src/access.cpp | |
parent | 63c639e108a00d7dbb0d7ac9891684fc83a3b207 (diff) |
Reworked live SQL support yet again
Diffstat (limited to 'src/access.cpp')
-rw-r--r-- | src/access.cpp | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/src/access.cpp b/src/access.cpp index 4ed19c7fe..1100d8e7c 100644 --- a/src/access.cpp +++ b/src/access.cpp @@ -46,8 +46,11 @@ void PrivilegeManager::RemovePrivilege(Privilege &p) if (it != privs.end()) privs.erase(it); - for (registered_channel_map::const_iterator cit = RegisteredChannelList.begin(), cit_end = RegisteredChannelList.end(); cit != cit_end; ++cit) + for (registered_channel_map::const_iterator cit = RegisteredChannelList->begin(), cit_end = RegisteredChannelList->end(); cit != cit_end; ++cit) + { + cit->second->QueueUpdate(); cit->second->RemoveLevel(p.name); + } } Privilege *PrivilegeManager::FindPrivilege(const Anope::string &name) @@ -84,14 +87,14 @@ ChanAccess::~ChanAccess() { } -Anope::string ChanAccess::serialize_name() const +const Anope::string ChanAccess::serialize_name() const { return "ChanAccess"; } -Serializable::serialized_data ChanAccess::serialize() +Serialize::Data ChanAccess::serialize() const { - serialized_data data; + Serialize::Data data; data["provider"] << this->provider->name; data["ci"] << this->ci->name; @@ -104,14 +107,18 @@ Serializable::serialized_data ChanAccess::serialize() return data; } -void ChanAccess::unserialize(serialized_data &data) +Serializable* ChanAccess::unserialize(Serializable *obj, Serialize::Data &data) { service_reference<AccessProvider> aprovider("AccessProvider", data["provider"].astr()); ChannelInfo *ci = cs_findchan(data["ci"].astr()); if (!aprovider || !ci) - return; + return NULL; - ChanAccess *access = aprovider->Create(); + ChanAccess *access; + if (obj) + access = debug_cast<ChanAccess *>(obj); + else + access = const_cast<ChanAccess *>(aprovider->Create()); access->provider = aprovider; access->ci = ci; data["mask"] >> access->mask; @@ -120,10 +127,12 @@ void ChanAccess::unserialize(serialized_data &data) data["created"] >> access->created; access->Unserialize(data["data"].astr()); - ci->AddAccess(access); + if (!obj) + ci->AddAccess(access); + return access; } -bool ChanAccess::Matches(User *u, NickCore *nc) +bool ChanAccess::Matches(const User *u, const NickCore *nc) const { bool is_mask = this->mask.find_first_of("!@?*") != Anope::string::npos; if (u && is_mask && Anope::Match(u->nick, this->mask)) @@ -131,10 +140,10 @@ bool ChanAccess::Matches(User *u, NickCore *nc) else if (u && Anope::Match(u->GetDisplayedMask(), this->mask)) return true; else if (nc) - for (std::list<NickAlias *>::iterator it = nc->aliases.begin(); it != nc->aliases.end(); ++it) + for (std::list<serialize_obj<NickAlias> >::const_iterator it = nc->aliases.begin(); it != nc->aliases.end();) { - NickAlias *na = *it; - if (Anope::Match(na->nick, this->mask)) + const NickAlias *na = *it++; + if (na && Anope::Match(na->nick, this->mask)) return true; } return false; @@ -245,7 +254,7 @@ bool AccessGroup::HasPriv(const Anope::string &name) const return false; } -ChanAccess *AccessGroup::Highest() const +const ChanAccess *AccessGroup::Highest() const { const std::vector<Privilege> &privs = PrivilegeManager::GetPrivileges(); for (unsigned i = privs.size(); i > 0; --i) |