X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fdnsqueue.cpp;h=fb0e0bd75999900c96170afed78f019b5253c63f;hb=c4458ecc70025aeac7ca87115ed0a698e7bbcdad;hp=5572c32477da1980f492a17e8044e83d4e917a33;hpb=dcad2fe327598a92e2ca51feeb462bda7a5fa7c9;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/dnsqueue.cpp b/src/dnsqueue.cpp index 5572c3247..fb0e0bd75 100644 --- a/src/dnsqueue.cpp +++ b/src/dnsqueue.cpp @@ -39,6 +39,7 @@ class Lookup; Lookup* dnslist[MAX_DESCRIPTORS]; Lookup* user_fd_to_dns[MAX_DESCRIPTORS]; +extern userrec* fd_ref_table[MAX_DESCRIPTORS]; //enum LookupState { reverse, forward }; @@ -112,17 +113,18 @@ public: } if ((hostname != "") && (usr->registered != 7)) { - if ((std::string((char*)inet_ntoa(usr->ip4)) == ip) && (hostname.length() < 65)) + if ((std::string(inet_ntoa(usr->ip4)) == ip) && (hostname.length() < 65)) { - strlcpy(usr->host,hostname.c_str(),64); - strlcpy(usr->dhost,hostname.c_str(),64); - /*address_cache::iterator address = addrcache.find(usr->ip4); - if (address == addrcache.end()) + if ((hostname.find_last_of(".in-addr.arpa") == hostname.length() - 1) && (hostname.find_last_of(".in-addr.arpa") != std::string::npos)) { - log(DEBUG,"Caching hostname %s -> %s",(char*)inet_ntoa(usr->ip4),hostname.c_str()); - addrcache[usr->ip4] = new std::string(hostname); - }*/ - WriteServ(usr->fd,"NOTICE Auth :*** Found your hostname"); + WriteServ(usr->fd,"NOTICE Auth :*** Your ISP are muppets -- reverse resolution resolves back to same reverse .arpa domain (!)"); + } + else + { + strlcpy(usr->host,hostname.c_str(),64); + strlcpy(usr->dhost,hostname.c_str(),64); + WriteServ(usr->fd,"NOTICE Auth :*** Found your hostname"); + } } usr->dns_done = true; return true; @@ -170,15 +172,15 @@ public: usr->dns_done = true; return true; } - } - if (hostname != "") - { - resolver2.ForwardLookup(hostname, true); - if (resolver2.GetFD() != -1) + if (hostname != "") { - dnslist[resolver2.GetFD()] = this; - if (usr) - user_fd_to_dns[usr->fd] = this; + resolver2.ForwardLookup(hostname, true); + if (resolver2.GetFD() != -1) + { + dnslist[resolver2.GetFD()] = this; + if (usr) + user_fd_to_dns[usr->fd] = this; + } } } } @@ -238,6 +240,19 @@ bool lookup_dns(const std::string &nick) void ZapThisDns(int fd) { +#ifdef THREADED_DNS +/* if (fd_ref_table[fd]) + { + if (fd_ref_table[fd]->registered >= 3) + { + log(DEBUG,"Joining thread for user %d",fd); + if (pthread_join(fd_ref_table[fd]->dnsthread, NULL)) + { + log(DEBUG,"Can't pthread_join(): %s", strerror(errno)); + } + } + }*/ +#else if ((fd < 0) || (fd > MAX_DESCRIPTORS)) return; @@ -257,6 +272,7 @@ void ZapThisDns(int fd) dns_close(x->resolver2.GetFD()); } } +#endif } void dns_poll(int fdcheck)