summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2006-06-19 02:54:05 +0000
committerw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2006-06-19 02:54:05 +0000
commit3c43bf1c71c49d07b682c260a3b251e536385dba (patch)
tree36040740f3e7d8fdabd39ce86088c69fd04a7143 /src
parente529eff4ed5062e7976b375888b291dd0a59da74 (diff)
Forward-port CBAN expiry fix
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4035 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r--src/modules/m_cban.cpp44
1 files changed, 30 insertions, 14 deletions
diff --git a/src/modules/m_cban.cpp b/src/modules/m_cban.cpp
index db0bf657a..06284a964 100644
--- a/src/modules/m_cban.cpp
+++ b/src/modules/m_cban.cpp
@@ -1,16 +1,16 @@
-/* +------------------------------------+
- * | Inspire Internet Relay Chat Daemon |
- * +------------------------------------+
+/* +------------------------------------+
+ * | Inspire Internet Relay Chat Daemon |
+ * +------------------------------------+
*
* InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
- * E-mail:
- * <brain@chatspike.net>
- * <Craig@chatspike.net>
+ * E-mail:
+ *<brain@chatspike.net>
+ * <Craig@chatspike.net>
* <omster@gmail.com>
- *
+ *
* Written by Craig Edwards, Craig McLure, and others.
* This program is free but copyrighted software; see
- * the file COPYING for details.
+ *the file COPYING for details.
*
* ---------------------------------------------------
*/
@@ -229,13 +229,29 @@ bool CBanComp(const CBan &ban1, const CBan &ban2)
void ExpireBans()
{
- while(cbans.size() && ((cbans.begin()->set_on + cbans.begin()->length) <= TIME))
+ bool go_again = true;
+
+ while (go_again)
{
- cbanlist::iterator iter = cbans.begin();
-
- log(DEBUG, "m_cban.so: Ban on %s expired, removing...", iter->chname.c_str());
- WriteOpers("*** %li second CBAN on %s (%s) set %u seconds ago expired", iter->length, iter->chname.c_str(), iter->reason.c_str(), TIME - iter->set_on);
- cbans.erase(iter);
+ go_again = false;
+
+ for (cbanlist::iterator iter = cbans.begin(); iter != cbans.end(); iter++)
+ {
+ /* 0 == permanent, don't mess with them! -- w00t */
+ if (iter->length != 0)
+ {
+ if (iter->set_on + iter->length <= TIME)
+ {
+ log(DEBUG, "m_cban.so: Ban on %s expired, removing...", iter->chname.c_str());
+ WriteOpers("*** %li second CBAN on %s (%s) set %u seconds ago expired", iter->length, iter->chname.c_str(), iter->reason.c_str(), TIME - iter->set_on);
+ cbans.erase(iter);
+ go_again = true;
+ }
+ }
+
+ if (go_again == true)
+ break;
+ }
}
}