From f1956b039d3c7be38ad03fbb79be6a4eed440cf0 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 11 Aug 2013 17:14:39 -0400 Subject: Remove channels from accesss lists when they expire/drop --- modules/pseudoclients/chanserv.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'modules') diff --git a/modules/pseudoclients/chanserv.cpp b/modules/pseudoclients/chanserv.cpp index 07d997aa4..e1d98e64c 100644 --- a/modules/pseudoclients/chanserv.cpp +++ b/modules/pseudoclients/chanserv.cpp @@ -199,6 +199,32 @@ class ChanServCore : public Module, public ChanServService } } + void OnDelChan(ChannelInfo *ci) anope_override + { + /* remove access entries that are this channel */ + + std::deque chans; + ci->GetChannelReferences(chans); + + for (unsigned i = 0; i < chans.size(); ++i) + { + ChannelInfo *c = ChannelInfo::Find(chans[i]); + if (!c) + continue; + + for (unsigned j = 0; j < c->GetAccessCount(); ++j) + { + ChanAccess *a = c->GetAccess(j); + + if (a->mask.equals_ci(ci->name)) + { + delete a; + break; + } + } + } + } + EventReturn OnPreHelp(CommandSource &source, const std::vector ¶ms) anope_override { if (!params.empty() || source.c || source.service != *ChanServ) -- cgit