summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modules/m_chgident.cpp93
-rw-r--r--src/modules/m_setident.cpp82
2 files changed, 175 insertions, 0 deletions
diff --git a/src/modules/m_chgident.cpp b/src/modules/m_chgident.cpp
new file mode 100644
index 000000000..b43773631
--- /dev/null
+++ b/src/modules/m_chgident.cpp
@@ -0,0 +1,93 @@
+#include <string>
+#include "users.h"
+#include "modules.h"
+#include "helperfuncs.h"
+
+/* $ModDesc: Provides support for the CHGIDENT command */
+
+Server *Srv;
+
+
+class cmd_chgident : public command_t
+{
+ public:
+ cmd_chgident() : command_t("CHGIDENT", 'o', 2)
+ {
+ this->source = "m_chgident.so";
+ }
+
+ void Handle(char **parameters, int pcnt, userrec *user)
+ {
+ userrec* dest = Srv->FindNick(std::string(parameters[0]));
+
+ if(dest)
+ {
+ for(unsigned int x = 0; x < strlen(parameters[1]); x++)
+ {
+ if(((parameters[1][x] >= 'A') && (parameters[1][x] <= '}')) || strchr(".-0123456789", parameters[1][x]))
+ continue;
+
+ WriteServ(user->fd, "NOTICE %s :*** Invalid characters in ident", user->nick);
+ return;
+ }
+
+ WriteOpers("%s used CHGIDENT to change %s's host from '%s' to '%s'", user->nick, dest->nick, dest->ident, parameters[1]);
+ strlcpy(dest->ident, parameters[1], IDENTMAX+2);
+ }
+ else
+ {
+ WriteServ(user->fd, "401 %s %s :No such nick/channel", user->nick, parameters[0]);
+ }
+ }
+};
+
+
+class ModuleChgIdent : public Module
+{
+ cmd_chgident* mycommand;
+
+public:
+ ModuleChgIdent(Server* Me) : Module::Module(Me)
+ {
+ Srv = Me;
+ mycommand = new cmd_chgident();
+ Srv->AddCommand(mycommand);
+ }
+
+ virtual ~ModuleChgIdent()
+ {
+ }
+
+ virtual Version GetVersion()
+ {
+ return Version(1,0,0,0,0);
+ }
+
+};
+
+// stuff down here is the module-factory stuff. For basic modules you can ignore this.
+
+class ModuleChgIdentFactory : public ModuleFactory
+{
+ public:
+ ModuleChgIdentFactory()
+ {
+ }
+
+ ~ModuleChgIdentFactory()
+ {
+ }
+
+ virtual Module * CreateModule(Server* Me)
+ {
+ return new ModuleChgIdent(Me);
+ }
+
+};
+
+
+extern "C" void * init_module( void )
+{
+ return new ModuleChgIdentFactory;
+}
+
diff --git a/src/modules/m_setident.cpp b/src/modules/m_setident.cpp
new file mode 100644
index 000000000..b4dac72a5
--- /dev/null
+++ b/src/modules/m_setident.cpp
@@ -0,0 +1,82 @@
+#include "users.h"
+#include "modules.h"
+#include "helperfuncs.h"
+
+/* $ModDesc: Provides support for the SETIDENT command */
+
+Server *Srv;
+
+class cmd_setident : public command_t
+{
+ public:
+ cmd_setident() : command_t("SETIDENT", 'o', 1)
+ {
+ this->source = "m_setident.so";
+ }
+
+ void Handle(char **parameters, int pcnt, userrec *user)
+ {
+ for(unsigned int x = 0; x < strlen(parameters[0]); x++)
+ {
+ if(((parameters[0][x] >= 'A') && (parameters[0][x] <= '}')) || strchr(".-0123456789", parameters[0][x]))
+ continue;
+
+ WriteServ(user->fd, "NOTICE %s :*** Invalid characters in ident", user->nick);
+ return;
+ }
+
+ WriteOpers("%s used SETIDENT to change their ident from '%s' to '%s'", user->nick, user->ident, parameters[0]);
+ strlcpy(user->ident, parameters[0], IDENTMAX+2);
+ }
+};
+
+
+class ModuleSetIdent : public Module
+{
+ cmd_setident* mycommand;
+
+ public:
+ ModuleSetIdent(Server* Me) : Module::Module(Me)
+ {
+ Srv = Me;
+ mycommand = new cmd_setident();
+ Srv->AddCommand(mycommand);
+ }
+
+ virtual ~ModuleSetIdent()
+ {
+ }
+
+ virtual Version GetVersion()
+ {
+ return Version(1,0,0,0,0);
+ }
+
+};
+
+// stuff down here is the module-factory stuff. For basic modules you can ignore this.
+
+class ModuleSetIdentFactory : public ModuleFactory
+{
+ public:
+ ModuleSetIdentFactory()
+ {
+ }
+
+ ~ModuleSetIdentFactory()
+ {
+ }
+
+ virtual Module * CreateModule(Server* Me)
+ {
+ return new ModuleSetIdent(Me);
+ }
+
+};
+
+
+extern "C" void * init_module( void )
+{
+ return new ModuleSetIdentFactory;
+}
+