]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Added m_vhost, authenticated vhosts from the conf similar to unrealircd's way, reques...
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Sun, 15 Jan 2006 19:34:04 +0000 (19:34 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Sun, 15 Jan 2006 19:34:04 +0000 (19:34 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@2801 e03df62e-2008-0410-955e-edbf42e46eb7

src/modules/m_vhost.cpp [new file with mode: 0644]

diff --git a/src/modules/m_vhost.cpp b/src/modules/m_vhost.cpp
new file mode 100644 (file)
index 0000000..238de02
--- /dev/null
@@ -0,0 +1,124 @@
+/*       +------------------------------------+
+ *       | Inspire Internet Relay Chat Daemon |
+ *       +------------------------------------+
+ *
+ *  InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
+ *                       E-mail:
+ *                <brain@chatspike.net>
+ *               <Craig@chatspike.net>
+ *     
+ * Written by Craig Edwards, Craig McLure, and others.
+ * This program is free but copyrighted software; see
+ *            the file COPYING for details.
+ *
+ * ---------------------------------------------------
+ */
+
+using namespace std;
+
+#include <stdio.h>
+#include "users.h"
+#include "channels.h"
+#include "modules.h"
+
+/* $ModDesc: Provides masking of user hostnames via traditional /VHOST command */
+
+ConfigReader *Conf;
+Server* Srv;
+
+class cmd_vhost : public command_t
+{
+ public:
+        cmd_vhost() : command_t("VHOST", 0, 2)
+        {
+                this->source = "m_vhost.so";
+        }
+
+        void Handle (char **parameters, int pcnt, userrec *user)
+        {
+                for (int index = 0; index < Conf->Enumerate("vhost"); index++)
+                {
+                        std::string mask = Conf->ReadValue("vhost","host",index);
+                       std::string user = Conf->ReadValue("vhost","user",index);
+                       std::string pass = Conf->ReadValue("vhost","pass",index);
+                        if ((!strcmp(parameters[0],user.c_str())) && (!strcmp(parameters[1],pass.c_str())))
+                        {
+                                if (mask != "")
+                                {
+                                        Srv->SendServ(user->fd,"NOTICE "+std::string(user->nick)+" :Setting your VHost: " + mask);
+                                        Srv->ChangeHost(user,mask);
+                                        return;
+                                }
+                        }
+                }
+               Srv->SendServ(user->fd,"NOTICE "+std::string(user->nick)+" :Invalid username or password.");
+        }
+};
+
+class ModuleVHost : public Module
+{
+ private:
+
+       cmd_vhost* mycommand;
+        
+ public:
+       ModuleVHost(Server* Me)
+               : Module::Module(Me)
+       {
+               Srv = Me;
+                Conf = new ConfigReader;
+                mycommand = new cmd_vhost();
+                Srv->AddCommand(mycommand);
+       }
+       
+       virtual ~ModuleVHost()
+       {
+               delete Conf;
+       }
+
+       void Implements(char* List)
+       {
+               List[I_OnRehash] = 1;
+       }
+
+       virtual void OnRehash(std::string parameter)
+       {
+               delete Conf;
+               Conf = new ConfigReader;
+       }
+       
+       virtual Version GetVersion()
+       {
+               // returns the version number of the module to be
+               // listed in /MODULES
+               return Version(1,0,0,1,VF_VENDOR);
+       }
+       
+};
+
+// stuff down here is the module-factory stuff. For basic modules you can ignore this.
+
+class ModuleVHostFactory : public ModuleFactory
+{
+ public:
+       ModuleVHostFactory()
+       {
+       }
+       
+       ~ModuleVHostFactory()
+       {
+       }
+       
+       virtual Module * CreateModule(Server* Me)
+       {
+               return new ModuleVHost(Me);
+       }
+       
+};
+
+
+extern "C" void * init_module( void )
+{
+       return new ModuleVHostFactory;
+}
+