X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fdns.cpp;h=ab244a0493610f6113f6dae098984c1db97f5ffb;hb=fc9e00f49299cb3b402406b5f185d5f4af1e9780;hp=ef3eb704ebd94f15935b6ac39cfb594239992a66;hpb=da2ad810d29d16446adf5b88f8371704c1c88786;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/dns.cpp b/src/dns.cpp index ef3eb704e..ab244a049 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -210,12 +210,12 @@ void DNS::dns_init() void DNS::dns_init_2(const char* dnsserver) { - in_addr addr4; - i4 = 0; - srand((unsigned int) TIME); - memset(servers4,'\0',sizeof(in_addr) * 8); - if (dns_aton4_s(dnsserver,&addr4) != NULL) - memcpy(&servers4[i4++],&addr4,sizeof(in_addr)); + in_addr addr4; + i4 = 0; + srand((unsigned int) TIME); + memset(servers4,'\0',sizeof(in_addr) * 8); + if (dns_aton4_s(dnsserver,&addr4) != NULL) + memcpy(&servers4[i4++],&addr4,sizeof(in_addr)); } @@ -285,7 +285,7 @@ s_connection *dns_add_query(s_header *h) } if (s->fd == -1) { - delete s; + DELETE(s); return NULL; } /* create new connection object, add to linked list */ @@ -352,7 +352,7 @@ in_addr* DNS::dns_aton4_r(const char *ipstring) { /* ascii to numeric (reentrant ip = new in_addr; if(dns_aton4_s(ipstring,ip) == NULL) { - delete ip; + DELETE(ip); return NULL; } return ip; @@ -479,38 +479,38 @@ char* DNS::dns_getresult_s(const int cfd, char *res) { /* retrieve result of DNS dns_close(c->fd); if (l < 12) { - delete c; + DELETE(c); return NULL; } dns_fill_header(&h,buffer,l - 12); if (c->id[0] != h.id[0] || c->id[1] != h.id[1]) { log(DEBUG,"DNS: id mismatch on query"); - delete c; + DELETE(c); return NULL; /* ID mismatch */ } if ((h.flags1 & FLAGS1_MASK_QR) == 0) { log(DEBUG,"DNS: didnt get a query result"); - delete c; + DELETE(c); return NULL; } if ((h.flags1 & FLAGS1_MASK_OPCODE) != 0) { log(DEBUG,"DNS: got an OPCODE and didnt want one"); - delete c; + DELETE(c); return NULL; } if ((h.flags2 & FLAGS2_MASK_RCODE) != 0) { log(DEBUG,"DNS lookup failed due to SERVFAIL"); - delete c; + DELETE(c); return NULL; } if (h.ancount < 1) { log(DEBUG,"DNS: no answers!"); - delete c; + DELETE(c); return NULL; } i = 0; @@ -556,7 +556,7 @@ char* DNS::dns_getresult_s(const int cfd, char *res) { /* retrieve result of DNS } if (l - i < 10) { - delete c; + DELETE(c); return NULL; } dns_fill_rr(&rr,&h.payload[i]); @@ -627,7 +627,7 @@ char* DNS::dns_getresult_s(const int cfd, char *res) { /* retrieve result of DNS break; if (rr.rdlength != 4) { - delete c; + DELETE(c); return NULL; } memcpy(&alist->ip,&h.payload[i],4); @@ -654,7 +654,7 @@ char* DNS::dns_getresult_s(const int cfd, char *res) { /* retrieve result of DNS } if (l - i < 10) { - delete c; + DELETE(c); return NULL; } dns_fill_rr(&rr,&h.payload[i]); @@ -674,7 +674,7 @@ char* DNS::dns_getresult_s(const int cfd, char *res) { /* retrieve result of DNS res[rr.rdlength] = '\0'; break; } - delete c; + DELETE(c); return res; } @@ -684,13 +684,13 @@ DNS::DNS() log(DEBUG,"Create blank DNS"); } -DNS::DNS(std::string dnsserver) +DNS::DNS(const std::string &dnsserver) { dns_init_2(dnsserver.c_str()); log(DEBUG,"Create DNS with server '%s'",dnsserver.c_str()); } -void DNS::SetNS(std::string dnsserver) +void DNS::SetNS(const std::string &dnsserver) { dns_init_2(dnsserver.c_str()); log(DEBUG,"Set NS"); @@ -700,17 +700,17 @@ DNS::~DNS() { } -bool DNS::ReverseLookup(std::string ip) +bool DNS::ReverseLookup(const std::string &ip) { if (ServerInstance && ServerInstance->stats) ServerInstance->stats->statsDns++; - binip = dns_aton4(ip.c_str()); - if (binip == NULL) + binip = dns_aton4(ip.c_str()); + if (binip == NULL) { - return false; - } + return false; + } - this->myfd = dns_getname4(binip); + this->myfd = dns_getname4(binip); if (this->myfd == -1) { return false; @@ -723,7 +723,7 @@ bool DNS::ReverseLookup(std::string ip) return true; } -bool DNS::ForwardLookup(std::string host) +bool DNS::ForwardLookup(const std::string &host) { if (ServerInstance && ServerInstance->stats) ServerInstance->stats->statsDns++; @@ -740,7 +740,7 @@ bool DNS::ForwardLookup(std::string host) return true; } -bool DNS::ForwardLookupWithFD(std::string host, int &fd) +bool DNS::ForwardLookupWithFD(const std::string &host, int &fd) { if (ServerInstance && ServerInstance->stats) ServerInstance->stats->statsDns++; @@ -748,7 +748,7 @@ bool DNS::ForwardLookupWithFD(std::string host, int &fd) fd = this->myfd; if (this->myfd == -1) { - + return false; } log(DEBUG,"DNS: ForwardLookupWithFD, fd=%d",this->myfd); if (ServerInstance && ServerInstance->SE) @@ -784,14 +784,14 @@ int DNS::GetFD() std::string DNS::GetResult() { log(DEBUG,"DNS: GetResult()"); - result = dns_getresult(this->myfd); - if (result) + result = dns_getresult(this->myfd); + if (result) { if (ServerInstance && ServerInstance->stats) ServerInstance->stats->statsDnsGood++; dns_close(this->myfd); return result; - } + } else { if (ServerInstance && ServerInstance->stats) @@ -838,40 +838,40 @@ std::string DNS::GetResultIP() #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((char*)inet_ntoa(u->ip4))) - { - 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((char*)inet_ntoa(u->ip4))) - { - if (host.length() < 160) - { - strcpy(u->host,host.c_str()); - strcpy(u->dhost,host.c_str()); - } - } - } - } - } - u->dns_done = true; - return NULL; + 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((char*)inet_ntoa(u->ip4))) + { + 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((char*)inet_ntoa(u->ip4))) + { + if (host.length() < 160) + { + strcpy(u->host,host.c_str()); + strcpy(u->dhost,host.c_str()); + } + } + } + } + } + u->dns_done = true; + return NULL; } #endif