]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_antibottler.cpp
Remove InspIRCd* parameters and fields
[user/henk/code/inspircd.git] / src / modules / m_antibottler.cpp
index efa2de7e2a3dcc92cf1d0c12bb82294ed609e1fc..8d4931e3b17e8ff66359d6d164d3b024d1fad09c 100644 (file)
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
- *                       E-mail:
- *                <brain@chatspike.net>
- *               <Craig@chatspike.net>
- *     
- * Written by Craig Edwards, Craig McLure, and others.
+ *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ * See: http://wiki.inspircd.org/Credits
+ *
  * This program is free but copyrighted software; see
  *            the file COPYING for details.
  *
  * ---------------------------------------------------
  */
 
-#include "users.h"
-#include "channels.h"
-#include "modules.h"
+#include "inspircd.h"
 
 /* $ModDesc: Changes the ident of connecting bottler clients to 'bottler' */
 
 class ModuleAntiBottler : public Module
 {
- private:
-        
-        Server *Srv;
  public:
        ModuleAntiBottler()
-       {
-               Srv = new Server;
+                       {
+
+               Implementation eventlist[] = { I_OnPreCommand };
+               ServerInstance->Modules->Attach(eventlist, this, 1);
        }
-       
+
+
+
        virtual ~ModuleAntiBottler()
        {
-               delete Srv;
        }
-       
+
        virtual Version GetVersion()
        {
-               return Version(1,0,0,0);
+               return Version("Changes the ident of connecting bottler clients to 'bottler'",VF_VENDOR,API_VERSION);
        }
 
-
-       virtual void OnServerRaw(std::string &raw, bool inbound, userrec* user)
+       virtual ModResult OnPreCommand(std::string &command, std::vector<std::string> &parameters, User *user, bool validated, const std::string &original_line)
        {
-               if (inbound)
+               char data[MAXBUF];
+               strlcpy(data,original_line.c_str(),MAXBUF);
+               bool not_bottler = false;
+               if (!strncmp(data,"user ",5))
                {
-                       char data[MAXBUF];
-                       strncpy(data,raw.c_str(),MAXBUF);
-                       bool not_bottler = false;
-                       if (!strncmp(data,"user ",5))
+                       for (char* j = data; *j; j++)
                        {
-                               for (int j = 0; j < strlen(data); j++)
-                               {
-                                       if (data[j] = ':')
-                                               break;
-                                               
-                                       if (data[j] = '"')
-                                       {
-                                               not_bottler = true;
-                                       }
-                               }
-                               // Bug Fix (#14) -- FCS
-                               if (!strlen(data)) return;                              
-                               char *user = strtok(data," ");
-                               if (!strlen(data)) return;
-                               char *ident = strtok(NULL," ");
-                               if (!strlen(data)) return;
-                               char *local = strtok(NULL," ");
-                               if (!strlen(data)) return;
-                               char *remote = strtok(NULL," :");
-                               if (!strlen(data)) return;
-                               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 (*j == ':')
+                                       break;
 
-                               if (!not_bottler)
+                               if (*j == '"')
                                {
-                                       raw = "USER bottler "+std::string(local)+" "+std::string(remote)+" "+std::string(gecos)+" [Possible bottler, ident: "+std::string(ident)+"]";
+                                       not_bottler = true;
                                }
                        }
-               }
-       }       
-};
+                       // Bug Fix (#14) -- FCS
+                       if (!*data)
+                               return MOD_RES_PASSTHRU;
 
+                       strtok(data," ");
+                       char *ident = strtok(NULL," ");
+                       char *local = strtok(NULL," ");
+                       char *remote = strtok(NULL," :");
+                       char *gecos = strtok(NULL,"\r\n");
 
-class ModuleAntiBottlerFactory : public ModuleFactory
-{
- public:
-       ModuleAntiBottlerFactory()
-       {
-       }
-       
-       ~ModuleAntiBottlerFactory()
-       {
-       }
-       
-       virtual Module * CreateModule()
-       {
-               return new ModuleAntiBottler;
-       }
-       
-};
+                       if (!ident || !local || !remote || !gecos)
+                               return MOD_RES_PASSTHRU;
 
+                       for (char* j = remote; *j; j++)
+                       {
+                               if (((*j < '0') || (*j > '9')) && (*j != '.'))
+                               {
+                                       not_bottler = true;
+                               }
+                       }
 
-extern "C" void * init_module( void )
-{
-       return new ModuleAntiBottlerFactory;
-}
+                       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 MOD_RES_DENY;
+                       }
+               }
+               return MOD_RES_PASSTHRU;
+       }
+};
 
+MODULE_INIT(ModuleAntiBottler)