]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_dnsbl.cpp
Blah
[user/henk/code/inspircd.git] / src / modules / m_dnsbl.cpp
index b4d993703ae98f7c5b7cc0f6ea40f9371eb515c7..03b691ece192c967f6b11d88184f828a59554356 100644 (file)
@@ -71,7 +71,8 @@ class DNSBLResolver : public Resolver
                                while(tmp.length()>0)
                                {
                                        std::string octet;
-                                       unsigned int lastdot = tmp.rfind(".");
+                                       /* Fix by brain, npos is -1, so unsigned int will never match */
+                                       std::string::size_type lastdot = tmp.rfind(".");
 
                                        if (lastdot == std::string::npos)
                                        {
@@ -93,10 +94,12 @@ class DNSBLResolver : public Resolver
                                if (bitmask != 0)
                                {
                                        std::string reason = ConfEntry->reason;
-
-                                       while (int pos = reason.find("%ip%") != std::string::npos)
+                                       std::string::size_type x = reason.find("%ip%");
+                                       while (x != std::string::npos)
                                        {
-                                               reason.replace(pos, 4, them->GetIPString());
+                                               reason.erase(x, 4);
+                                               reason.insert(x, "%ip%");
+                                               x = reason.find("%ip%");
                                        }
 
                                        ServerInstance->WriteOpers("*** Connecting user %s detected as being on a DNS blacklist (%s) with result %d", them->GetFullRealHost(), ConfEntry->name.c_str(), bitmask);
@@ -105,7 +108,7 @@ class DNSBLResolver : public Resolver
                                        {
                                                case DNSBLConfEntry::I_KILL:
                                                {
-                                                       them->QuitUser(ServerInstance, them, std::string("Killed (") + reason + ")");
+                                                       userrec::QuitUser(ServerInstance, them, std::string("Killed (") + reason + ")");
                                                        break;
                                                }
                                                case DNSBLConfEntry::I_KLINE:
@@ -183,11 +186,12 @@ class ModuleDNSBL : public Module
        
        virtual ~ModuleDNSBL()
        {
+               ClearEntries();
        }
        
        virtual Version GetVersion()
        {
-               return Version(2, 0, 0, 0, 0, API_VERSION);
+               return Version(2, 0, 0, 1, VF_VENDOR, API_VERSION);
        }
 
        void Implements(char* List)
@@ -195,13 +199,24 @@ class ModuleDNSBL : public Module
                List[I_OnRehash] = List[I_OnUserRegister] = 1;
        }
 
-       /*
-        * Fill our conf vector with data
+       /** Clear entries and free the mem it was using
+        */
+       void ClearEntries()
+       {
+               std::vector<DNSBLConfEntry *>::iterator i;
+               while ((i = DNSBLConfEntries.begin()) != DNSBLConfEntries.end())
+               {
+                       DNSBLConfEntries.erase(i);
+                       delete *i;
+               }
+       }
+
+       /** Fill our conf vector with data
         */     
        virtual void ReadConf()
        {
                ConfigReader *MyConf = new ConfigReader(ServerInstance);
-               DNSBLConfEntries.clear();
+               ClearEntries();
 
                for (int i=0; i< MyConf->Enumerate("dnsbl"); i++)
                {
@@ -241,7 +256,6 @@ class ModuleDNSBL : public Module
 
                                /* add it, all is ok */
                                DNSBLConfEntries.push_back(e);
-                               delete MyConf;
                                continue;
                        }
 
@@ -251,8 +265,7 @@ class ModuleDNSBL : public Module
 
                delete MyConf;
        }
-       
-       
+
        virtual void OnRehash(const std::string &parameter)
        {
                ReadConf();
@@ -285,30 +298,6 @@ class ModuleDNSBL : public Module
                        snprintf(reversedipbuf, 128, "%d.%d.%d.%d", d, c, b, a);
                        reversedip = std::string(reversedipbuf);
 
-/*
-       this is satmd's old code
-                       std::string reversedip;
-                       std::string userip = user->GetIPString();
-                       std::string tempip = userip;
-
-                       // reversedip will created in there
-                       while (tempip.length()>0)
-                       {
-                               unsigned int lastdot=tempip.rfind(".");
-                               if (lastdot == std::string::npos)
-                               {
-                                       reversedip+=tempip;
-                                       tempip.clear();
-                               }
-                               else
-                               {
-                                       reversedip += tempip.substr(lastdot+1,tempip.length()-lastdot+1);
-                                       reversedip += ".";
-                                       tempip.resize(lastdot);
-                               }
-                       }
-*/
-               
                        // For each DNSBL, we will run through this lookup
                        for (std::vector<DNSBLConfEntry *>::iterator i = DNSBLConfEntries.begin(); i != DNSBLConfEntries.end(); i++)
                        {
@@ -353,4 +342,3 @@ extern "C" void * init_module( void )
 {
        return new ModuleDNSBLFactory;
 }
-