]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Add m_serverban, implements extban +b s:server.mask.here, allows +e. This essentially...
authorw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>
Tue, 5 Aug 2008 12:19:34 +0000 (12:19 +0000)
committerw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>
Tue, 5 Aug 2008 12:19:34 +0000 (12:19 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10092 e03df62e-2008-0410-955e-edbf42e46eb7

conf/modules.conf.example
src/modules/m_serverban.cpp [new file with mode: 0644]

index 61f35102f818da57091bae689a7096b1c88e2aeb..2d44ffbe7f44a05772a011f8ffeda96e91fd11ab 100644 (file)
 # SETNAME module: Adds the /SETNAME command
 #<module name="m_setname.so">
 
+#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
+# Serverban: Implements extended ban s:, which stops anyone connected
+# to a server matching a mask like +b s:server.mask.here from joining.
+#<module name="m_serverban.so">
+
 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
 # Show Whois module: Adds the +W usermode which allows opers
 # to see when they are whois'ed (can be annoying).
diff --git a/src/modules/m_serverban.cpp b/src/modules/m_serverban.cpp
new file mode 100644 (file)
index 0000000..e6fda05
--- /dev/null
@@ -0,0 +1,63 @@
+/*       +------------------------------------+
+ *       | Inspire Internet Relay Chat Daemon |
+ *       +------------------------------------+
+ *
+ *  InspIRCd: (C) 2002-2008 InspIRCd Development Team
+ * See: http://www.inspircd.org/wiki/index.php/Credits
+ *
+ * This program is free but copyrighted software; see
+ *            the file COPYING for details.
+ *
+ * ---------------------------------------------------
+ */
+
+#include "inspircd.h"
+
+/* $ModDesc: Implements extban +b s: - server name bans */
+
+class ModuleServerBan : public Module
+{
+ private:
+ public:
+       ModuleServerBan(InspIRCd* Me) : Module(Me)
+       {
+               Implementation eventlist[] = { I_OnUserPreJoin, I_On005Numeric };
+               ServerInstance->Modules->Attach(eventlist, this, 2);
+       }
+
+       virtual ~ModuleServerBan()
+       {
+       }
+
+       virtual Version GetVersion()
+       {
+               return Version(1,2,0,0,VF_VENDOR,API_VERSION);
+       }
+
+       virtual int OnUserPreJoin(User *user, Channel *c, const char *cname, std::string &privs, const std::string &key)
+       {
+               if (!IS_LOCAL(user))
+                       return 0;
+
+               if (!c)
+                       return 0;
+
+               if (c->IsExtBanned(user->server, 's'))
+               {
+                       // XXX: send a numeric here
+                       user->WriteServ("NOTICE "+std::string(user->nick)+" :*** Cannot join " + c->name + ", as you match a ban");
+                       return 1;
+               }
+
+               return 0;
+       }
+
+       virtual void On005Numeric(std::string &output)
+       {
+               ServerInstance->AddExtBanChar('s');
+       }
+};
+
+
+MODULE_INIT(ModuleServerBan)
+