-/* +------------------------------------+\r * | Inspire Internet Relay Chat Daemon |\r * +------------------------------------+\r *\r * InspIRCd: (C) 2002-2007 InspIRCd Development Team\r * See: http://www.inspircd.org/wiki/index.php/Credits\r *\r * This program is free but copyrighted software; see\r * the file COPYING for details.\r *\r * ---------------------------------------------------\r */\r\r#include "inspircd.h"\r#include "users.h"\r#include "channels.h"\r#include "modules.h"\r\r/* $ModDesc: Changes the ident of connecting bottler clients to 'bottler' */\r\rclass ModuleAntiBottler : public Module\r{\r public:\r ModuleAntiBottler(InspIRCd* Me)\r : Module(Me)\r {\r \r }\r\r void Implements(char* List)\r {\r List[I_OnPreCommand] = 1;\r }\r\r \r virtual ~ModuleAntiBottler()\r {\r }\r \r virtual Version GetVersion()\r {\r return Version(1,1,0,1,VF_VENDOR,API_VERSION);\r }\r\r virtual int OnPreCommand(const std::string &command, const char** parameters, int pcnt, userrec *user, bool validated, const std::string &original_line)\r {\r char data[MAXBUF];\r strlcpy(data,original_line.c_str(),MAXBUF);\r bool not_bottler = false;\r if (!strncmp(data,"user ",5))\r {\r for (char* j = data; *j; j++)\r {\r if (*j == ':')\r break;\r \r if (*j == '"')\r {\r not_bottler = true;\r }\r }\r // Bug Fix (#14) -- FCS\r if (!(data) || !(*data))\r return 0;\r\r strtok(data," ");\r char *ident = strtok(NULL," ");\r char *local = strtok(NULL," ");\r char *remote = strtok(NULL," :");\r char *gecos = strtok(NULL,"\r\n");\r\r if (!ident || !local || !remote || !gecos)\r return 0;\r\r for (char* j = remote; *j; j++)\r {\r if (((*j < '0') || (*j > '9')) && (*j != '.'))\r {\r not_bottler = true;\r }\r }\r\r if (!not_bottler)\r {\r std::string strgecos = std::string(gecos) + "[Possible bottler, ident: " + std::string(ident) + "]";\r const char* modified[4];\r modified[0] = "bottler";\r modified[1] = local;\r modified[2] = remote;\r modified[3] = strgecos.c_str();\r ServerInstance->Parser->CallHandler("USER", modified, 4, user);\r return 1;\r }\r }\r return 0;\r }\r};\r\rMODULE_INIT(ModuleAntiBottler)\r
\ No newline at end of file
+/* +------------------------------------+
+ * | 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: Changes the ident of connecting bottler clients to 'bottler' */
+
+class ModuleAntiBottler : public Module
+{
+ public:
+ ModuleAntiBottler(InspIRCd* Me)
+ : Module(Me)
+ {
+
+ Implementation eventlist[] = { I_OnPreCommand };
+ ServerInstance->Modules->Attach(eventlist, this, 1);
+ }
+
+
+
+ virtual ~ModuleAntiBottler()
+ {
+ }
+
+ virtual Version GetVersion()
+ {
+ return Version(1,2,0,1,VF_VENDOR,API_VERSION);
+ }
+
+ virtual int OnPreCommand(const std::string &command, const std::vector<std::string> ¶meters, User *user, bool validated, const std::string &original_line)
+ {
+ char data[MAXBUF];
+ strlcpy(data,original_line.c_str(),MAXBUF);
+ bool not_bottler = false;
+ if (!strncmp(data,"user ",5))
+ {
+ for (char* j = data; *j; j++)
+ {
+ if (*j == ':')
+ break;
+
+ if (*j == '"')
+ {
+ not_bottler = true;
+ }
+ }
+ // Bug Fix (#14) -- FCS
+ if (!*data)
+ return 0;
+
+ strtok(data," ");
+ char *ident = strtok(NULL," ");
+ char *local = strtok(NULL," ");
+ char *remote = strtok(NULL," :");
+ char *gecos = strtok(NULL,"\r\n");
+
+ if (!ident || !local || !remote || !gecos)
+ return 0;
+
+ for (char* j = remote; *j; j++)
+ {
+ if (((*j < '0') || (*j > '9')) && (*j != '.'))
+ {
+ not_bottler = true;
+ }
+ }
+
+ if (!not_bottler)
+ {
+ std::string strgecos = std::string(gecos) + "[Possible bottler, ident: " + std::string(ident) + "]";
+ std::vector<std::string> modified;
+ modified.push_back("bottler");
+ modified.push_back(local);
+ modified.push_back(remote);
+ modified.push_back(strgecos);
+ ServerInstance->Parser->CallHandler("USER", modified, user);
+ return 1;
+ }
+ }
+ return 0;
+ }
+};
+
+MODULE_INIT(ModuleAntiBottler)