+ // doing forward lookup
+ userrec* usr = NULL;
+ if (resolver2.HasResult(fdcheck))
+ {
+ if (resolver2.GetFD() != -1)
+ {
+ dnslist[resolver2.GetFD()] = NULL;
+ std::string ip = resolver2.GetResultIP();
+ usr = Find(u);
+ if (usr)
+ {
+ if (usr->registered > 3)
+ {
+ usr->dns_done = true;
+ return true;
+ }
+ if ((hostname != "") && (usr->registered != 7))
+ {
+ if (std::string((char*)inet_ntoa(usr->ip4)) == ip)
+ {
+ strlcpy(usr->host,hostname.c_str(),MAXBUF);
+ strlcpy(usr->dhost,hostname.c_str(),MAXBUF);
+ /*address_cache::iterator address = addrcache.find(usr->ip4);
+ if (address == addrcache.end())
+ {
+ 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");
+ }
+ usr->dns_done = true;
+ return true;
+ }
+ }
+ }
+ else
+ {
+ usr = Find(u);
+ if (usr)
+ {
+ usr->dns_done = true;
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+ else
+ {
+ // doing reverse lookup
+ userrec* usr = NULL;
+ if (resolver1.HasResult(fdcheck))
+ {
+ usr = Find(u);
+ if ((usr) && (usr->dns_done))
+ {
+ if (resolver1.GetFD() != -1)
+ dnslist[resolver1.GetFD()] = NULL;
+ return true;
+ }
+ if (resolver1.GetFD() != -1)
+ {
+ dnslist[resolver1.GetFD()] = NULL;
+ hostname = resolver1.GetResult();
+ if (usr)
+ {
+ if ((usr->registered > 3) || (hostname == ""))
+ {
+ WriteServ(usr->fd,"NOTICE Auth :*** Could not resolve your hostname -- Using your IP address instead");
+ usr->dns_done = true;
+ return true;
+ }
+ }
+ if (hostname != "")
+ {
+ resolver2.ForwardLookup(hostname);
+ if (resolver2.GetFD() != -1)
+ dnslist[resolver2.GetFD()] = this;
+ }
+ }
+ }