]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_password_hash.cpp
Move typedef OperIndex to ServerConfig::OperIndex
[user/henk/code/inspircd.git] / src / modules / m_password_hash.cpp
index da4342ae400844cbe6ee889ad68b759e7956a32c..926ba56323d2c05fbfe6d25638160c4fee92663e 100644 (file)
@@ -18,8 +18,6 @@
  */
 
 
-/* $ModDesc: Allows for hashed oper passwords */
-
 #include "inspircd.h"
 #include "modules/hash.h"
 
@@ -36,7 +34,7 @@ class CommandMkpasswd : public Command
 
        void MakeHash(User* user, const std::string& algo, const std::string& stuff)
        {
-               if (algo.substr(0,5) == "hmac-")
+               if (!algo.compare(0, 5, "hmac-", 5))
                {
                        std::string type = algo.substr(5);
                        HashProvider* hp = ServerInstance->Modules->FindDataService<HashProvider>("hash/" + type);
@@ -82,19 +80,9 @@ class ModuleOperHash : public Module
        {
        }
 
-       void init()
-       {
-               /* Read the config file first */
-               OnRehash(NULL);
-
-               ServerInstance->Modules->AddService(cmd);
-               Implementation eventlist[] = { I_OnPassCompare };
-               ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
-       }
-
-       virtual ModResult OnPassCompare(Extensible* ex, const std::string &data, const std::string &input, const std::string &hashtype)
+       ModResult OnPassCompare(Extensible* ex, const std::string &data, const std::string &input, const std::string &hashtype) CXX11_OVERRIDE
        {
-               if (hashtype.substr(0,5) == "hmac-")
+               if (!hashtype.compare(0, 5, "hmac-", 5))
                {
                        std::string type = hashtype.substr(5);
                        HashProvider* hp = ServerInstance->Modules->FindDataService<HashProvider>("hash/" + type);
@@ -118,19 +106,19 @@ class ModuleOperHash : public Module
                /* Is this a valid hash name? */
                if (hp)
                {
-                       /* Compare the hash in the config to the generated hash */
-                       if (data == hp->hexsum(input))
+                       // Use the timing-safe compare function to compare the hashes
+                       if (InspIRCd::TimingSafeCompare(data, hp->hexsum(input)))
                                return MOD_RES_ALLOW;
                        else
                                /* No match, and must be hashed, forbid */
                                return MOD_RES_DENY;
                }
 
-               /* Not a hash, fall through to strcmp in core */
+               // We don't handle this type, let other mods or the core decide
                return MOD_RES_PASSTHRU;
        }
 
-       virtual Version GetVersion()
+       Version GetVersion() CXX11_OVERRIDE
        {
                return Version("Allows for hashed oper passwords",VF_VENDOR);
        }