]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_opermd5.cpp
Add m_sqlutils - Currently provides ID->chan/user lookups
[user/henk/code/inspircd.git] / src / modules / m_opermd5.cpp
index 6ce0cab2fac0b26a8df39fd46f189426ed324365..4116ccb37810693bf0ecbe167aae89c1116078cb 100644 (file)
@@ -2,7 +2,7 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
+ *  InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
  *                       E-mail:
  *                <brain@chatspike.net>
  *               <Craig@chatspike.net>
 using namespace std;
 
 #include <stdio.h>
+#include "inspircd_config.h"
+#ifdef HAS_STDINT
+#include <stdint.h>
+#endif
 #include "users.h"
 #include "channels.h"
 #include "modules.h"
 #include "helperfuncs.h"
 
-
 /* The four core functions - F1 is optimized somewhat */
 #define F1(x, y, z) (z ^ (x & (y ^ z)))
 #define F2(x, y, z) F1(z, x, y)
@@ -35,17 +38,21 @@ using namespace std;
 #define MD5STEP(f,w,x,y,z,in,s) \
          (w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
 
-typedef unsigned long word32;
+#ifndef HAS_STDINT
+typedef unsigned int uint32_t;
+#endif
+
+typedef uint32_t word32; /* NOT unsigned long. We don't support 16 bit platforms, anyway. */
 typedef unsigned char byte;
 
-struct MD5Context {
+class MD5Context : public classbase
+{
+ public:
        word32 buf[4];
        word32 bytes[2];
        word32 in[16];
 };
 
-Server *Srv;
-
 void MD5Init(struct MD5Context *context);
 void MD5Update(struct MD5Context *context, byte const *buf, int len);
 void MD5Final(byte digest[16], struct MD5Context *context);
@@ -245,7 +252,7 @@ void GenHash(const char* src, char* dest)
        int i = 0;
        unsigned char bytes[16];
        char hash[1024];
-       strcpy(hash,"");
+       *hash = 0;
        MyMD5((char*)bytes,(void*)src,strlen(src));
        for (i = 0; i < 16; i++)
        {
@@ -261,29 +268,46 @@ void GenHash(const char* src, char* dest)
        strcpy(dest,hash);
 }
 
-void handle_mkpasswd(char **parameters, int pcnt, userrec *user)
+class cmd_mkpasswd : public command_t
 {
-       char buffer[MAXBUF];
-       GenHash(parameters[0],buffer);
-       WriteServ(user->fd,"NOTICE %s :MD5 hashed password for %s is %s",user->nick,parameters[0],buffer);
-}
+ public:
+       cmd_mkpasswd () : command_t("MKPASSWD", 'o', 1)
+       {
+               this->source = "m_opermd5.so";
+       }
+
+       void Handle (const char** parameters, int pcnt, userrec *user)
+       {
+               char buffer[MAXBUF];
+               GenHash(parameters[0],buffer);
+               WriteServ(user->fd,"NOTICE %s :MD5 hashed password for %s is %s",user->nick,parameters[0],buffer);
+       }
+};
 
 class ModuleOperMD5 : public Module
 {
+       Server* Srv;
+       cmd_mkpasswd* mycommand;
  public:
 
        ModuleOperMD5(Server* Me)
                : Module::Module(Me)
        {
                Srv = Me;
-               Srv->AddCommand("MKPASSWD",handle_mkpasswd,'o',1,"m_opermd5.so");
+               mycommand = new cmd_mkpasswd();
+               Srv->AddCommand(mycommand);
        }
        
        virtual ~ModuleOperMD5()
        {
        }
 
-       virtual int OnOperCompare(std::string data, std::string input)
+       void Implements(char* List)
+       {
+               List[I_OnOperCompare] = 1;
+       }
+
+       virtual int OnOperCompare(const std::string &data, const std::string &input)
        {
                char buffer[MAXBUF];
                if (data.length() == 32)        // if its 32 chars long, try it as an md5
@@ -302,11 +326,6 @@ class ModuleOperMD5 : public Module
        {
                return Version(1,0,0,1,VF_VENDOR);
        }
-       
-       virtual void OnUserConnect(userrec* user)
-       {
-       }
-
 };