X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_dnsbl.cpp;h=d07b268f7bf4a4db4f9bdc48318fba97e7353c82;hb=d556a4f8740b65e635ff7d2b976faaedbdac51d4;hp=c7631ae789631820ec261bc96b6c26e414788b71;hpb=9ffed8ccffe87625cd8fd65e4c07bbdc0873d351;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_dnsbl.cpp b/src/modules/m_dnsbl.cpp index c7631ae78..d07b268f7 100644 --- a/src/modules/m_dnsbl.cpp +++ b/src/modules/m_dnsbl.cpp @@ -11,17 +11,20 @@ * --------------------------------------------------- */ -#include -#include -#include -#include -#include #include "inspircd.h" +#include "xline.h" #include "dns.h" #include "users.h" #include "channels.h" #include "modules.h" +#ifndef WINDOWS +#include +#include +#include +#include +#endif + /* $ModDesc: Provides handling of DNS blacklists */ /* Class holding data for a single entry */ @@ -47,7 +50,8 @@ class DNSBLResolver : public Resolver userrec* them; DNSBLConfEntry *ConfEntry; - public: + public: + DNSBLResolver(Module *me, InspIRCd *ServerInstance, const std::string &hostname, userrec* u, int userfd, DNSBLConfEntry *conf, bool &cached) : Resolver(ServerInstance, hostname, DNS_QUERY_A, cached, me) { @@ -64,7 +68,8 @@ class DNSBLResolver : public Resolver // Now we calculate the bitmask: 256*(256*(256*a+b)+c)+d if(result.length()) { - unsigned int bitmask=0; + unsigned int bitmask = 0; + bool show = false; in_addr resultip; /* Convert the result to an in_addr (we can gaurantee we got ipv4) @@ -87,7 +92,6 @@ class DNSBLResolver : public Resolver 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); ConfEntry->stats_hits++; switch (ConfEntry->banaction) @@ -99,19 +103,27 @@ class DNSBLResolver : public Resolver } case DNSBLConfEntry::I_KLINE: { - ServerInstance->AddKLine(ConfEntry->duration, ServerInstance->Config->ServerName, reason, std::string("*@") + them->GetIPString()); - FOREACH_MOD(I_OnAddKLine,OnAddKLine(ConfEntry->duration, NULL, reason, std::string("*@") + them->GetIPString())); + std::string ban = std::string("*@") + them->GetIPString(); + if (show) + ServerInstance->XLines->apply_lines(APPLY_KLINES); + show = ServerInstance->XLines->add_kline(ConfEntry->duration, ServerInstance->Config->ServerName, reason.c_str(), ban.c_str()); + FOREACH_MOD(I_OnAddKLine,OnAddKLine(ConfEntry->duration, NULL, reason, ban)); break; } case DNSBLConfEntry::I_GLINE: { - ServerInstance->AddGLine(ConfEntry->duration, ServerInstance->Config->ServerName, reason, std::string("*@") + them->GetIPString()); - FOREACH_MOD(I_OnAddGLine,OnAddGLine(ConfEntry->duration, NULL, reason, std::string("*@") + them->GetIPString())); + std::string ban = std::string("*@") + them->GetIPString(); + show = ServerInstance->XLines->add_gline(ConfEntry->duration, ServerInstance->Config->ServerName, reason.c_str(), ban.c_str()); + if (show) + ServerInstance->XLines->apply_lines(APPLY_GLINES); + FOREACH_MOD(I_OnAddGLine,OnAddGLine(ConfEntry->duration, NULL, reason, ban)); break; } case DNSBLConfEntry::I_ZLINE: { - ServerInstance->AddZLine(ConfEntry->duration, ServerInstance->Config->ServerName, reason, them->GetIPString()); + show = ServerInstance->XLines->add_zline(ConfEntry->duration, ServerInstance->Config->ServerName, reason.c_str(), them->GetIPString()); + if (show) + ServerInstance->XLines->apply_lines(APPLY_ZLINES); FOREACH_MOD(I_OnAddZLine,OnAddZLine(ConfEntry->duration, NULL, reason, them->GetIPString())); break; } @@ -121,6 +133,11 @@ class DNSBLResolver : public Resolver } break; } + + if (show) + { + ServerInstance->WriteOpers("*** Connecting user %s detected as being on a DNS blacklist (%s) with result %d", them->GetFullRealHost(), ConfEntry->name.c_str(), bitmask); + } } else ConfEntry->stats_misses++; @@ -161,7 +178,7 @@ class ModuleDNSBL : public Module return DNSBLConfEntry::I_UNKNOWN; } public: - ModuleDNSBL(InspIRCd *Me) : Module::Module(Me) + ModuleDNSBL(InspIRCd *Me) : Module(Me) { ReadConf(); } @@ -206,7 +223,7 @@ class ModuleDNSBL : public Module e->reason = MyConf->ReadValue("dnsbl", "reason", i); e->domain = MyConf->ReadValue("dnsbl", "domain", i); e->banaction = str2banaction(MyConf->ReadValue("dnsbl", "action", i)); - e->duration = ServerInstance->Duration(MyConf->ReadValue("dnsbl", "duration", i).c_str()); + e->duration = ServerInstance->Duration(MyConf->ReadValue("dnsbl", "duration", i)); e->bitmask = MyConf->ReadInteger("dnsbl", "bitmask", i, false); /* yeah, logic here is a little messy */ @@ -214,11 +231,11 @@ class ModuleDNSBL : public Module { ServerInstance->WriteOpers("*** DNSBL(#%d): invalid bitmask",i); } - else if (e->name == "") + else if (e->name.empty()) { ServerInstance->WriteOpers("*** DNSBL(#%d): Invalid name",i); } - else if (e->domain == "") + else if (e->domain.empty()) { ServerInstance->WriteOpers("*** DNSBL(#%d): Invalid domain",i); } @@ -228,7 +245,7 @@ class ModuleDNSBL : public Module } else { - if (e->reason == "") + if (e->reason.empty()) { ServerInstance->WriteOpers("*** DNSBL(#%d): empty reason, using defaults",i); e->reason = "Your IP has been blacklisted."; @@ -251,11 +268,9 @@ class ModuleDNSBL : public Module ReadConf(); } - /* - * We will check each user that connects *locally* (userrec::fd>0) - */ virtual int OnUserRegister(userrec* user) { + /* only do lookups on local users */ if (IS_LOCAL(user)) { /* following code taken from bopm, reverses an IP address. */ @@ -335,28 +350,4 @@ class ModuleDNSBL : public Module } }; -// stuff down here is the module-factory stuff. - -class ModuleDNSBLFactory : public ModuleFactory -{ - public: - ModuleDNSBLFactory() - { - } - - ~ModuleDNSBLFactory() - { - } - - virtual Module *CreateModule(InspIRCd *Me) - { - return new ModuleDNSBL(Me); - } - -}; - - -extern "C" void * init_module( void ) -{ - return new ModuleDNSBLFactory; -} +MODULE_INIT(ModuleDNSBL)