]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_antibottler.cpp
DOH! Fix my muppetry of a segfault, and fix some warnings
[user/henk/code/inspircd.git] / src / modules / m_antibottler.cpp
index efa2de7e2a3dcc92cf1d0c12bb82294ed609e1fc..9831730eff442c79d4af4dc34568f0d122fbab38 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-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 "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()
+       ModuleAntiBottler(InspIRCd* Me)
+               : Module(Me)
        {
-               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(1,2,0,1,VF_VENDOR,API_VERSION);
        }
 
-
-       virtual void OnServerRaw(std::string &raw, bool inbound, userrec* user)
+       virtual int OnPreCommand(const std::string &command, const char* const* parameters, int pcnt, 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 (*j == ':')
+                                       break;
+                                       
+                               if (*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;
-                                       }
+                                       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 (!not_bottler)
+                       if (!ident || !local || !remote || !gecos)
+                               return 0;
+
+                       for (char* j = remote; *j; j++)
+                       {
+                               if (((*j < '0') || (*j > '9')) && (*j != '.'))
                                {
-                                       raw = "USER bottler "+std::string(local)+" "+std::string(remote)+" "+std::string(gecos)+" [Possible bottler, ident: "+std::string(ident)+"]";
+                                       not_bottler = true;
                                }
                        }
-               }
-       }       
-};
 
-
-class ModuleAntiBottlerFactory : public ModuleFactory
-{
- public:
-       ModuleAntiBottlerFactory()
-       {
-       }
-       
-       ~ModuleAntiBottlerFactory()
-       {
-       }
-       
-       virtual Module * CreateModule()
-       {
-               return new ModuleAntiBottler;
-       }
-       
+                       if (!not_bottler)
+                       {
+                               std::string strgecos = std::string(gecos) + "[Possible bottler, ident: " + std::string(ident) + "]";
+                               const char* modified[4];
+                               modified[0] = "bottler";
+                               modified[1] = local;
+                               modified[2] = remote;
+                               modified[3] = strgecos.c_str();
+                               ServerInstance->Parser->CallHandler("USER", modified, 4, user);
+                               return 1;
+                       }
+               }
+               return 0;
+       }
 };
 
-
-extern "C" void * init_module( void )
-{
-       return new ModuleAntiBottlerFactory;
-}
-
+MODULE_INIT(ModuleAntiBottler)