X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fdns.cpp;h=3d3bc947fee2cfbee4f045e04b56b5eeb0730687;hb=a5d110282a864fd2e91b51ce360a977cd0643657;hp=75e5731fe93edac1951162665719424370b9b79f;hpb=0035820e13a915a3bf1a440fcedf8ce25fe37a22;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/dns.cpp b/src/dns.cpp index 75e5731fe..3d3bc947f 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -121,7 +121,7 @@ class CacheTimer : public Timer DNS* dns; public: CacheTimer(DNS* thisdns) - : Timer(3600, ServerInstance->Time(), true), dns(thisdns) { } + : Timer(5*60, ServerInstance->Time(), true), dns(thisdns) { } virtual void Tick(time_t) { @@ -162,6 +162,8 @@ class RequestTimeout : public Timer CachedQuery::CachedQuery(const std::string &res, QueryType qt, unsigned int ttl) : data(res), type(qt) { + if (ttl > 5*60) + ttl = 5*60; expires = ServerInstance->Time() + ttl; } @@ -700,8 +702,16 @@ DNSResult DNS::GetResult() /* Identical handling to PTR */ case DNS_QUERY_PTR: + { /* Reverse lookups just come back as char* */ resultstr = std::string((const char*)data.first); + if (resultstr.find_first_not_of("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-") != std::string::npos) + { + std::string ro = req->orig; + delete req; + return DNSResult(this_id | ERROR_MASK, "Invalid char(s) in reply", 0, ro); + } + } break; default: @@ -1050,7 +1060,11 @@ void DNS::HandleEvent(EventType, int) ServerInstance->stats->statsDnsGood++; if (!this->GetCache(res.original.c_str())) + { + if (cache->size() >= MAX_CACHE_SIZE) + cache->clear(); this->cache->insert(std::make_pair(res.original.c_str(), CachedQuery(res.result, res.type, res.ttl))); + } Classes[res.id]->OnLookupComplete(res.result, res.ttl, false); delete Classes[res.id];