aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/m_antibottler.cpp
diff options
context:
space:
mode:
authorGravatar brain2004-04-12 16:05:08 +0000
committerGravatar brain2004-04-12 16:05:08 +0000
commit9ed4641ba3aaac8e133a73ec1c3d42965ee59241 (patch)
tree4bbd24979c93a410ff719603acf850b0b3e5c983 /src/modules/m_antibottler.cpp
parentUpdated with 'a', 'b', 'K' and '@' (diff)
downloadinspircd++-9ed4641ba3aaac8e133a73ec1c3d42965ee59241.tar.gz
inspircd++-9ed4641ba3aaac8e133a73ec1c3d42965ee59241.tar.bz2
inspircd++-9ed4641ba3aaac8e133a73ec1c3d42965ee59241.zip
Added preliminary support for a bottler-detection module
Fixed broken rewrite in OnServerRaw git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@566 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules/m_antibottler.cpp')
-rw-r--r--src/modules/m_antibottler.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/modules/m_antibottler.cpp b/src/modules/m_antibottler.cpp
new file mode 100644
index 000000000..d6a47fa90
--- /dev/null
+++ b/src/modules/m_antibottler.cpp
@@ -0,0 +1,94 @@
+#include "users.h"
+#include "channels.h"
+#include "modules.h"
+
+/* $ModDesc: Changes the ident of connecting bottler clients to 'bottler' */
+
+class ModuleAntiBottler : public Module
+{
+ private:
+
+ Server *Srv;
+ public:
+ ModuleAntiBottler()
+ {
+ Srv = new Server;
+ }
+
+ virtual ~ModuleAntiBottler()
+ {
+ delete Srv;
+ }
+
+ virtual Version GetVersion()
+ {
+ return Version(1,0,0,0);
+ }
+
+
+ virtual void OnServerRaw(std::string &raw, bool inbound)
+ {
+ if (inbound)
+ {
+ char data[MAXBUF];
+ strncpy(data,raw.c_str(),MAXBUF);
+ bool not_bottler = false;
+ if (!strncmp(data,"user ",5))
+ {
+ for (int j = 0; j < strlen(data); j++)
+ {
+ if (data[j] = ':')
+ break;
+
+ if (data[j] = '"')
+ {
+ not_bottler = true;
+ }
+ }
+ char *user = strtok(data," ");
+ char *ident = strtok(NULL," ");
+ char *local = strtok(NULL," ");
+ char *remote = strtok(NULL," :");
+ char *gecos = strtok(NULL,"\r\n");
+ for (int j = 0; j < strlen(remote); j++)
+ {
+ if (((remote[j] < '0') || (remote[j] > '9')) && (remote[j] != '.'))
+ {
+ not_bottler = true;
+ }
+ }
+
+ if (!not_bottler)
+ {
+ raw = "USER bottler "+std::string(local)+" "+std::string(remote)+" "+std::string(gecos)+" [Possible bottler, ident: "+std::string(ident)+"]";
+ }
+ }
+ }
+ }
+};
+
+
+class ModuleAntiBottlerFactory : public ModuleFactory
+{
+ public:
+ ModuleAntiBottlerFactory()
+ {
+ }
+
+ ~ModuleAntiBottlerFactory()
+ {
+ }
+
+ virtual Module * CreateModule()
+ {
+ return new ModuleAntiBottler;
+ }
+
+};
+
+
+extern "C" void * init_module( void )
+{
+ return new ModuleAntiBottlerFactory;
+}
+