X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fdns.cpp;h=efb690dc248cd90f6eb0860c298d25b8ee6e7e4c;hb=1f1258997c2d63eb54c5addece622af37f637a7b;hp=9d67d5c12e2b990a14db595484460bd05991bb01;hpb=d3f0dfdf9624b14685cad521d7bffc2da315450f;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/dns.cpp b/src/dns.cpp index 9d67d5c12..efb690dc2 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -36,12 +36,12 @@ using namespace std; #include #include #include "dns.h" +#include "inspircd.h" #include "helperfuncs.h" #include "socketengine.h" -extern SocketEngine* SE; - -extern int statsAccept,statsRefused,statsUnknown,statsCollisions,statsDns,statsDnsGood,statsDnsBad,statsConnects,statsSent,statsRecv; +extern InspIRCd* ServerInstance; +extern ServerConfig* Config; #define max(a,b) (a > b ? a : b) #define DNS_MAX 8 /* max number of nameservers used */ @@ -655,7 +655,7 @@ DNS::~DNS() bool DNS::ReverseLookup(std::string ip) { - statsDns++; + ServerInstance->stats->statsDns++; binip = dns_aton4(ip.c_str()); if (binip == NULL) { return false; @@ -668,14 +668,14 @@ bool DNS::ReverseLookup(std::string ip) } log(DEBUG,"DNS: ReverseLookup, fd=%d",this->myfd); #ifndef THREADED_DNS - SE->AddFd(this->myfd,true,X_ESTAB_DNS); + ServerInstance->SE->AddFd(this->myfd,true,X_ESTAB_DNS); #endif return true; } bool DNS::ForwardLookup(std::string host) { - statsDns++; + ServerInstance->stats->statsDns++; this->myfd = dns_getip4(host.c_str()); if (this->myfd == -1) { @@ -683,7 +683,7 @@ bool DNS::ForwardLookup(std::string host) } log(DEBUG,"DNS: ForwardLookup, fd=%d",this->myfd); #ifndef THREADED_DNS - SE->AddFd(this->myfd,true,X_ESTAB_DNS); + ServerInstance->SE->AddFd(this->myfd,true,X_ESTAB_DNS); #endif return true; } @@ -718,14 +718,14 @@ std::string DNS::GetResult() log(DEBUG,"DNS: GetResult()"); result = dns_getresult(this->myfd); #ifndef THREADED_DNS - SE->DelFd(this->myfd); + ServerInstance->SE->DelFd(this->myfd); #endif if (result) { - statsDnsGood++; + ServerInstance->stats->statsDnsGood++; dns_close(this->myfd); return result; } else { - statsDnsBad++; + ServerInstance->stats->statsDnsBad++; if (this->myfd != -1) { dns_close(this->myfd); @@ -742,13 +742,13 @@ std::string DNS::GetResultIP() if (this->myfd != -1) { #ifndef THREADED_DNS - SE->DelFd(this->myfd); + ServerInstance->SE->DelFd(this->myfd); #endif dns_close(this->myfd); } if (result) { - statsDnsGood++; + ServerInstance->stats->statsDnsGood++; unsigned char a = (unsigned)result[0]; unsigned char b = (unsigned)result[1]; unsigned char c = (unsigned)result[2]; @@ -758,9 +758,51 @@ std::string DNS::GetResultIP() } else { - statsDnsBad++; + ServerInstance->stats->statsDnsBad++; log(DEBUG,"DANGER WILL ROBINSON! NXDOMAIN for forward lookup, but we got a reverse lookup!"); return ""; } } + + +#ifdef THREADED_DNS +void* dns_task(void* arg) +{ + userrec* u = (userrec*)arg; + log(DEBUG,"DNS thread for user %s",u->nick); + DNS dns1; + DNS dns2; + std::string host; + std::string ip; + if (dns1.ReverseLookup(u->ip)) + { + while (!dns1.HasResult()) + { + usleep(100); + } + host = dns1.GetResult(); + if (host != "") + { + if (dns2.ForwardLookup(host)) + { + while (!dns2.HasResult()) + { + usleep(100); + } + ip = dns2.GetResultIP(); + if (ip == std::string(u->ip)) + { + if (host.length() < 160) + { + strcpy(u->host,host.c_str()); + strcpy(u->dhost,host.c_str()); + } + } + } + } + } + u->dns_done = true; + return NULL; +} +#endif