/*
* InspIRCd -- Internet Relay Chat Daemon
*
+ * Copyright (C) 2019 Matt Schatz <genius3000@g3k.solutions>
+ * Copyright (C) 2013, 2017-2019 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013 Adam <Adam@anope.org>
+ * Copyright (C) 2012-2014, 2016 Attila Molnar <attilamolnar@hush.com>
+ * Copyright (C) 2012, 2018-2019 Robby <robby@chatbelgie.be>
+ * Copyright (C) 2009 Uli Schlachter <psychon@inspircd.org>
* Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
- * Copyright (C) 2005-2009 Robin Burchell <robin+git@viroteck.net>
- * Copyright (C) 2004-2008 Craig Edwards <craigedwards@brainbox.cc>
+ * Copyright (C) 2007-2009 Robin Burchell <robin+git@viroteck.net>
* Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
- * Copyright (C) 2007 John Brooks <john.brooks@dereferenced.net>
+ * Copyright (C) 2006-2008, 2010 Craig Edwards <brain@inspircd.org>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
* redistribute it and/or modify it under the terms of the GNU General Public
void XLineManager::ApplyLines()
{
const UserManager::LocalList& list = ServerInstance->Users.GetLocalUsers();
- for (UserManager::LocalList::const_iterator j = list.begin(); j != list.end(); ++j)
+ for (UserManager::LocalList::const_iterator j = list.begin(); j != list.end(); )
{
- LocalUser* u = *j;
+ LocalUser* u = *j++;
// Don't ban people who are exempt.
if (u->exempt)
{
XLine *x = *i;
if (x->Matches(u))
+ {
x->Apply(u);
+
+ // If applying the X-line has killed the user then don't
+ // apply any more lines to them.
+ if (u->quitting)
+ break;
+ }
}
}