summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-09-27 07:11:40 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-09-27 07:11:40 +0000
commitf5c3ae7d2ad21b7d5e2585f0d3458c6d758a9989 (patch)
tree1a1f6c62849f9d83b811964090b25d95eb45d34a
parentb40174821d0039d13a6a458346786a2cc62c2542 (diff)
Someone forgot support for CIDR here
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5345 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--src/modules/m_banexception.cpp32
-rw-r--r--src/modules/m_inviteexception.cpp23
2 files changed, 47 insertions, 8 deletions
diff --git a/src/modules/m_banexception.cpp b/src/modules/m_banexception.cpp
index e704b0223..5095a4e5d 100644
--- a/src/modules/m_banexception.cpp
+++ b/src/modules/m_banexception.cpp
@@ -1,13 +1,28 @@
-#include <stdio.h>
+/* +------------------------------------+
+ * | Inspire Internet Relay Chat Daemon |
+ * +------------------------------------+
+ *
+ * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
+ * E-mail:
+ * <brain@chatspike.net>
+ * <Craig@chatspike.net>
+ *
+ * Written by Craig Edwards, Craig McLure, and others.
+ * This program is free but copyrighted software; see
+ * the file COPYING for details.
+ *
+ * ---------------------------------------------------
+ */
+
#include <string>
#include <vector>
#include "users.h"
#include "channels.h"
#include "modules.h"
#include "mode.h"
-
#include "inspircd.h"
#include "u_listmode.h"
+#include "wildcard.h"
/* $ModDesc: Provides support for the +e channel mode */
@@ -17,6 +32,7 @@
// The +e channel mode takes a nick!ident@host, glob patterns allowed,
// and if a user matches an entry on the +e list then they can join the channel, overriding any (+b) bans set on them
+// Now supports CIDR and IP addresses -- Brain
/** Handles +e channel mode
@@ -54,17 +70,23 @@ public:
virtual int OnCheckBan(userrec* user, chanrec* chan)
{
- if(chan != NULL)
+ if (chan != NULL)
{
modelist* list;
chan->GetExt(be->GetInfoKey(), list);
- if(list)
+ if (list)
{
+ char mask[MAXBUF];
+ snprintf(mask, MAXBUF, "%s!%s@%s", user->nick, user->ident, user->GetIPString());
for (modelist::iterator it = list->begin(); it != list->end(); it++)
- if(ServerInstance->MatchText(user->GetFullRealHost(), it->mask) || ServerInstance->MatchText(user->GetFullHost(), it->mask))
+ {
+ if (ServerInstance->MatchText(user->GetFullRealHost(), it->mask) || ServerInstance->MatchText(user->GetFullHost(), it->mask) || (match(mask, it->mask.c_str(), true)))
+ {
// They match an entry on the list, so let them in.
return 1;
+ }
+ }
return 0;
}
// or if there wasn't a list, there can't be anyone on it, so we don't need to do anything.
diff --git a/src/modules/m_inviteexception.cpp b/src/modules/m_inviteexception.cpp
index bcb2d7d6d..6c697e152 100644
--- a/src/modules/m_inviteexception.cpp
+++ b/src/modules/m_inviteexception.cpp
@@ -1,11 +1,25 @@
-#include <stdio.h>
+/* +------------------------------------+
+ * | Inspire Internet Relay Chat Daemon |
+ * +------------------------------------+
+ *
+ * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
+ * E-mail:
+ * <brain@chatspike.net>
+ * <Craig@chatspike.net>
+ *
+ * Written by Craig Edwards, Craig McLure, and others.
+ * This program is free but copyrighted software; see
+ * the file COPYING for details.
+ *
+ * ---------------------------------------------------
+ */
+
#include <string>
#include <vector>
#include "users.h"
#include "channels.h"
#include "modules.h"
#include "mode.h"
-
#include "u_listmode.h"
/* $ModDesc: Provides support for the +I channel mode */
@@ -17,6 +31,7 @@
* The +I channel mode takes a nick!ident@host, glob patterns allowed,
* and if a user matches an entry on the +I list then they can join the channel,
* ignoring if +i is set on the channel
+ * Now supports CIDR and IP addresses -- Brain
*/
class InspIRCd* ServerInstance;
@@ -58,9 +73,11 @@ public:
chan->GetExt(ie->GetInfoKey(), list);
if (list)
{
+ char mask[MAXBUF];
+ snprintf(mask, MAXBUF, "%s!%s@%s", user->nick, user->ident, user->GetIPString());
for (modelist::iterator it = list->begin(); it != list->end(); it++)
{
- if(match(user->GetFullRealHost(), it->mask.c_str()) || match(user->GetFullHost(), it->mask.c_str()))
+ if(match(user->GetFullRealHost(), it->mask.c_str()) || match(user->GetFullHost(), it->mask.c_str()) || (match(mask, it->mask.c_str(), true)))
{
// They match an entry on the list, so let them in.
return 1;