]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_ident.cpp
m_spanningtree Remove unneeded #includes
[user/henk/code/inspircd.git] / src / modules / m_ident.cpp
index 93a3d6549b805ed0ea8cab5cc85ae724c233643e..f38ad2241a774527f55c113206f17a915351b9e7 100644 (file)
@@ -144,7 +144,7 @@ class IdentRequestSocket : public EventHandler
 
        virtual void OnConnected()
        {
-               ServerInstance->Logs->Log("m_ident",DEBUG,"OnConnected()");
+               ServerInstance->Logs->Log("m_ident",LOG_DEBUG,"OnConnected()");
                ServerInstance->SE->ChangeEventMask(this, FD_WANT_POLL_READ | FD_WANT_NO_WRITE);
 
                char req[32];
@@ -179,7 +179,7 @@ class IdentRequestSocket : public EventHandler
                        break;
                        case EVENT_ERROR:
                                /* fd error event, ohshi- */
-                               ServerInstance->Logs->Log("m_ident",DEBUG,"EVENT_ERROR");
+                               ServerInstance->Logs->Log("m_ident",LOG_DEBUG,"EVENT_ERROR");
                                /* We *must* Close() here immediately or we get a
                                 * huge storm of EVENT_ERROR events!
                                 */
@@ -196,7 +196,7 @@ class IdentRequestSocket : public EventHandler
                 */
                if (GetFd() > -1)
                {
-                       ServerInstance->Logs->Log("m_ident",DEBUG,"Close ident socket %d", GetFd());
+                       ServerInstance->Logs->Log("m_ident",LOG_DEBUG,"Close ident socket %d", GetFd());
                        ServerInstance->SE->DelFd(this);
                        ServerInstance->SE->Close(GetFd());
                        this->SetFd(-1);
@@ -228,21 +228,27 @@ class IdentRequestSocket : public EventHandler
                if (recvresult < 3)
                        return;
 
-               ServerInstance->Logs->Log("m_ident",DEBUG,"ReadResponse()");
+               ServerInstance->Logs->Log("m_ident",LOG_DEBUG,"ReadResponse()");
 
                /* Truncate at the first null character, but first make sure
                 * there is at least one null char (at the end of the buffer).
                 */
                ibuf[recvresult] = '\0';
                std::string buf(ibuf);
-               std::string::size_type lastcolon = buf.rfind(':');
-               if (lastcolon == std::string::npos)
+
+               /* <2 colons: invalid
+                *  2 colons: reply is an error
+                * >3 colons: there is a colon in the ident
+                */
+               if (std::count(buf.begin(), buf.end(), ':') != 3)
                        return;
 
+               std::string::size_type lastcolon = buf.rfind(':');
+
                /* Truncate the ident at any characters we don't like, skip leading spaces */
                for (std::string::const_iterator i = buf.begin()+lastcolon+1; i != buf.end(); ++i)
                {
-                       if (result.size()+1 == ServerInstance->Config->Limits.IdentMax)
+                       if (result.size() == ServerInstance->Config->Limits.IdentMax)
                                /* Ident is getting too long */
                                break;
 
@@ -283,10 +289,6 @@ class ModuleIdent : public Module
                ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
        }
 
-       ~ModuleIdent()
-       {
-       }
-
        virtual Version GetVersion()
        {
                return Version("Provides support for RFC1413 ident lookups", VF_VENDOR);
@@ -314,7 +316,7 @@ class ModuleIdent : public Module
                }
                catch (ModuleException &e)
                {
-                       ServerInstance->Logs->Log("m_ident",DEBUG,"Ident exception: %s", e.GetReason());
+                       ServerInstance->Logs->Log("m_ident",LOG_DEBUG,"Ident exception: %s", e.GetReason());
                }
        }
 
@@ -328,11 +330,11 @@ class ModuleIdent : public Module
                IdentRequestSocket *isock = ext.get(user);
                if (!isock)
                {
-                       ServerInstance->Logs->Log("m_ident",DEBUG, "No ident socket :(");
+                       ServerInstance->Logs->Log("m_ident",LOG_DEBUG, "No ident socket :(");
                        return MOD_RES_PASSTHRU;
                }
 
-               ServerInstance->Logs->Log("m_ident",DEBUG, "Has ident_socket");
+               ServerInstance->Logs->Log("m_ident",LOG_DEBUG, "Has ident_socket");
 
                time_t compare = isock->age;
                compare += RequestTimeout;
@@ -342,16 +344,16 @@ class ModuleIdent : public Module
                {
                        /* Ident timeout */
                        user->WriteServ("NOTICE Auth :*** Ident request timed out.");
-                       ServerInstance->Logs->Log("m_ident",DEBUG, "Timeout");
+                       ServerInstance->Logs->Log("m_ident",LOG_DEBUG, "Timeout");
                }
                else if (!isock->HasResult())
                {
                        // time still good, no result yet... hold the registration
-                       ServerInstance->Logs->Log("m_ident",DEBUG, "No result yet");
+                       ServerInstance->Logs->Log("m_ident",LOG_DEBUG, "No result yet");
                        return MOD_RES_DENY;
                }
 
-               ServerInstance->Logs->Log("m_ident",DEBUG, "Yay, result!");
+               ServerInstance->Logs->Log("m_ident",LOG_DEBUG, "Yay, result!");
 
                /* wooo, got a result (it will be good, or bad) */
                if (isock->result.empty())
@@ -401,4 +403,3 @@ class ModuleIdent : public Module
 };
 
 MODULE_INIT(ModuleIdent)
-