* | 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 std::vector<std::string> ¶meters, 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) + "]";
+ 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;
+ }
};
-
-extern "C" void * init_module( void )
-{
- return new ModuleAntiBottlerFactory;
-}
-
+MODULE_INIT(ModuleAntiBottler)