Lookup* dnslist[MAX_DESCRIPTORS];
Lookup* user_fd_to_dns[MAX_DESCRIPTORS];
+extern userrec* fd_ref_table[MAX_DESCRIPTORS];
//enum LookupState { reverse, forward };
}
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;
usr->dns_done = true;
return true;
}
- }
- if (hostname != "")
- {
- resolver2.ForwardLookup(hostname, true);
- if (resolver2.GetFD() != -1)
+ if (hostname != "")
{
- dnslist[resolver2.GetFD()] = this;
- 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;
+ }
}
}
}
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;
if (x)
{
- if (x->resolver1.GetFD() != -1)
+ if (x->resolver1.GetFD() > 0)
{
log(DEBUG,"Whacked resolver1");
dns_close(x->resolver1.GetFD());
}
- if (x->resolver2.GetFD() != -1)
+ if (x->resolver2.GetFD() > 0)
{
log(DEBUG,"Whacked resolver2");
dns_close(x->resolver2.GetFD());
}
}
+#endif
}
void dns_poll(int fdcheck)