]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/helperfuncs.cpp
Fix some more oversights in m_geoip.
[user/henk/code/inspircd.git] / src / helperfuncs.cpp
index d636e2d8958e20285291960e765ef8f55b836277..e331ba9dc6c9b2bf980df1ba1607dd94602c5b01 100644 (file)
@@ -37,14 +37,7 @@ User* InspIRCd::FindNick(const std::string &nick)
 {
        if (!nick.empty() && isdigit(*nick.begin()))
                return FindUUID(nick);
-
-       user_hash::iterator iter = this->Users->clientlist.find(nick);
-
-       if (iter == this->Users->clientlist.end())
-               /* Couldn't find it */
-               return NULL;
-
-       return iter->second;
+       return FindNickOnly(nick);
 }
 
 User* InspIRCd::FindNickOnly(const std::string &nick)
@@ -108,7 +101,7 @@ bool InspIRCd::IsValidMask(const std::string &mask)
        if (exclamation != 1 || atsign != 1)
                return false;
 
-       if (mask.length() > 250)
+       if (mask.length() > ServerInstance->Config->Limits.GetMaxMask())
                return false;
 
        return true;
@@ -134,7 +127,8 @@ void InspIRCd::StripColor(std::string &sentence)
                else
                        seq = 0;
 
-               if (seq || ((*i == 2) || (*i == 15) || (*i == 22) || (*i == 21) || (*i == 31)))
+               // Strip all control codes too except \001 for CTCP
+               if (seq || ((*i >= 0) && (*i < 32) && (*i != 1)))
                        i = sentence.erase(i);
                else
                        ++i;
@@ -199,7 +193,7 @@ void InspIRCd::ProcessColors(file_cache& input)
 }
 
 /* true for valid channel name, false else */
-bool IsChannelHandler::Call(const std::string& chname)
+bool InspIRCd::DefaultIsChannel(const std::string& chname)
 {
        if (chname.empty() || chname.length() > ServerInstance->Config->Limits.ChanMax)
                return false;
@@ -222,7 +216,7 @@ bool IsChannelHandler::Call(const std::string& chname)
 }
 
 /* true for valid nickname, false else */
-bool IsNickHandler::Call(const std::string& n)
+bool InspIRCd::DefaultIsNick(const std::string& n)
 {
        if (n.empty() || n.length() > ServerInstance->Config->Limits.NickMax)
                return false;
@@ -249,7 +243,7 @@ bool IsNickHandler::Call(const std::string& n)
 }
 
 /* return true for good ident, false else */
-bool IsIdentHandler::Call(const std::string& n)
+bool InspIRCd::DefaultIsIdent(const std::string& n)
 {
        if (n.empty())
                return false;
@@ -337,7 +331,7 @@ unsigned long InspIRCd::Duration(const std::string &str)
        return total + subtotal;
 }
 
-const char* InspIRCd::Format(va_list &vaList, const char* formatString)
+std::string InspIRCd::Format(va_list& vaList, const char* formatString)
 {
        static std::vector<char> formatBuffer(1024);
 
@@ -357,12 +351,12 @@ const char* InspIRCd::Format(va_list &vaList, const char* formatString)
                formatBuffer.resize(formatBuffer.size() * 2);
        }
 
-       return &formatBuffer[0];
+       return std::string(&formatBuffer[0]);
 }
 
-const char* InspIRCd::Format(const char* formatString, ...)
+std::string InspIRCd::Format(const char* formatString, ...)
 {
-       const char* ret;
+       std::string ret;
        VAFORMAT(ret, formatString, formatString);
        return ret;
 }
@@ -390,7 +384,7 @@ std::string InspIRCd::TimeString(time_t curtime, const char* format, bool utc)
 
        // This is the default format used by asctime without the terminating new line.
        if (!format)
-               format = "%a %b %d %H:%M:%S %Y";
+               format = "%a %b %d %Y %H:%M:%S";
 
        char buffer[512];
        if (!strftime(buffer, sizeof(buffer), format, timeinfo))
@@ -399,13 +393,13 @@ std::string InspIRCd::TimeString(time_t curtime, const char* format, bool utc)
        return buffer;
 }
 
-std::string InspIRCd::GenRandomStr(int length, bool printable)
+std::string InspIRCd::GenRandomStr(unsigned int length, bool printable)
 {
        char* buf = new char[length];
        GenRandom(buf, length);
        std::string rv;
        rv.resize(length);
-       for(int i=0; i < length; i++)
+       for(size_t i = 0; i < length; i++)
                rv[i] = printable ? 0x3F + (buf[i] & 0x3F) : buf[i];
        delete[] buf;
        return rv;
@@ -421,7 +415,7 @@ unsigned long InspIRCd::GenRandomInt(unsigned long max)
 }
 
 // This is overridden by a higher-quality algorithm when SSL support is loaded
-void GenRandomHandler::Call(char *output, size_t max)
+void InspIRCd::DefaultGenRandom(char* output, size_t max)
 {
        for(unsigned int i=0; i < max; i++)
 #ifdef _WIN32
@@ -436,28 +430,3 @@ void GenRandomHandler::Call(char *output, size_t max)
                output[i] = random();
 #endif
 }
-
-ModResult OnCheckExemptionHandler::Call(User* user, Channel* chan, const std::string& restriction)
-{
-       unsigned int mypfx = chan->GetPrefixValue(user);
-       char minmode = 0;
-       std::string current;
-
-       irc::spacesepstream defaultstream(ServerInstance->Config->ConfValue("options")->getString("exemptchanops"));
-
-       while (defaultstream.GetToken(current))
-       {
-               std::string::size_type pos = current.find(':');
-               if (pos == std::string::npos)
-                       continue;
-               if (!current.compare(0, pos, restriction))
-                       minmode = current[pos+1];
-       }
-
-       PrefixMode* mh = ServerInstance->Modes->FindPrefixMode(minmode);
-       if (mh && mypfx >= mh->GetPrefixRank())
-               return MOD_RES_ALLOW;
-       if (mh || minmode == '*')
-               return MOD_RES_DENY;
-       return MOD_RES_PASSTHRU;
-}