X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fdnsqueue.cpp;h=71f227567540f33b8c0389ce318f7334d5217665;hb=5a17e1b8bd690a573c91e5c69f2c150fe0516f7a;hp=1495316c5ba23dfd00ae4e94498c4b51ca57a0a4;hpb=f278bdbbad200b5424c5721ac85ee3dd8d982d60;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/dnsqueue.cpp b/src/dnsqueue.cpp index 1495316c5..71f227567 100644 --- a/src/dnsqueue.cpp +++ b/src/dnsqueue.cpp @@ -2,7 +2,7 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * Inspire is copyright (C) 2002-2004 ChatSpike-Dev. + * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev. * E-mail: * * @@ -53,6 +53,8 @@ using namespace std; extern ServerConfig* Config; extern InspIRCd* ServerInstance; +address_cache addrcache; + class Lookup; Lookup* dnslist[MAX_DESCRIPTORS]; @@ -125,10 +127,16 @@ public: } if ((hostname != "") && (usr->registered != 7)) { - if (std::string(usr->ip) == ip) + 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); + } } usr->dns_done = true; return true; @@ -201,6 +209,18 @@ bool lookup_dns(std::string nick) userrec* u = Find(nick); if (u) { + /* Check the cache */ + address_cache::iterator address = addrcache.find(u->ip4); + if (address != addrcache.end()) + { + /* Theyre in the cache, dont waste a lookup */ + WriteServ(u->fd,"NOTICE Auth :*** Found your hostname (cached)"); + log(DEBUG,"Found cached host"); + strlcpy(u->host,address->second->c_str(),MAXBUF); + strlcpy(u->dhost,address->second->c_str(),MAXBUF); + u->dns_done = true; + return true; + } /* If the user exists, create a new * lookup object, and associate it * with the user. The lookup object