]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/hmac.cpp
Revert not-required hax
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / hmac.cpp
index 1aa2afddbc746e26fdd418cd841b0f306aba62e2..4ad6658b8f5d38fee1491f8b35af56fa3336cfc5 100644 (file)
@@ -90,35 +90,36 @@ std::string TreeSocket::MakePass(const std::string &password, const std::string
                return "HMAC-SHA256:"+ hmac;
        }
        else if (!challenge.empty() && !sha256)
-               Instance->Log(DEFAULT,"Not authenticating to server using SHA256/HMAC because we don't have m_sha256 loaded!");
+               Instance->Logs->Log("m_spanningtree",DEFAULT,"Not authenticating to server using SHA256/HMAC because we don't have m_sha256 loaded!");
 
        return password;
 }
 
-std::string TreeSocket::RandString(unsigned int length)
+std::string TreeSocket::RandString(unsigned int ilength)
 {
-       char* randombuf = new char[length+1];
+       char* randombuf = new char[ilength+1];
        std::string out;
 #ifdef WINDOWS
-       int fd = -1;
+       int f = -1;
 #else
-       int fd = open("/dev/urandom", O_RDONLY, 0);
+       int f = open("/dev/urandom", O_RDONLY, 0);
 #endif
 
-       if (fd >= 0)
+       if (f >= 0)
        {
 #ifndef WINDOWS
-               read(fd, randombuf, length);
-               close(fd);
+               if (read(f, randombuf, ilength) < 1)
+                       Instance->Logs->Log("m_spanningtree", DEFAULT, "There are crack smoking monkeys in your kernel (in other words, nonblocking /dev/urandom blocked.)");
+               close(f);
 #endif
        }
        else
        {
-               for (unsigned int i = 0; i < length; i++)
+               for (unsigned int i = 0; i < ilength; i++)
                        randombuf[i] = rand();
        }
 
-       for (unsigned int i = 0; i < length; i++)
+       for (unsigned int i = 0; i < ilength; i++)
        {
                char randchar = static_cast<char>((randombuf[i] & 0x7F) | 0x21);
                out += (randchar == '=' ? '_' : randchar);
@@ -128,3 +129,20 @@ std::string TreeSocket::RandString(unsigned int length)
        return out;
 }
 
+bool TreeSocket::ComparePass(const std::string &ours, const std::string &theirs)
+{
+       if ((!strncmp(ours.c_str(), "HMAC-SHA256:", 12)) || (!strncmp(theirs.c_str(), "HMAC-SHA256:", 12)))
+       {
+               /* One or both of us specified hmac sha256, but we don't have sha256 module loaded!
+                * We can't allow this password as valid.
+                 */
+               if (!Instance->Modules->Find("m_sha256.so") || !Utils->ChallengeResponse)
+                       return false;
+               else
+                       /* Straight string compare of hashes */
+                       return ours == theirs;
+       }
+       else
+               /* Straight string compare of plaintext */
+               return ours == theirs;
+}