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)
{
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);
{
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:
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)
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++)
{
/* add it, all is ok */
DNSBLConfEntries.push_back(e);
- delete MyConf;
continue;
}
delete MyConf;
}
-
-
+
virtual void OnRehash(const std::string ¶meter)
{
ReadConf();
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++)
{
{
return new ModuleDNSBLFactory;
}
-