]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_password_hash.cpp
Remove current time parameter of the Timer constructor
[user/henk/code/inspircd.git] / src / modules / m_password_hash.cpp
index 0e3afb9661c48ba8ff3edcda44aae3776d3b1e32..926ba56323d2c05fbfe6d25638160c4fee92663e 100644 (file)
@@ -34,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,7 +82,7 @@ class ModuleOperHash : public Module
 
        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);
@@ -106,15 +106,15 @@ 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;
        }