summaryrefslogtreecommitdiff
path: root/src/dnsqueue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dnsqueue.cpp')
-rw-r--r--src/dnsqueue.cpp273
1 files changed, 0 insertions, 273 deletions
diff --git a/src/dnsqueue.cpp b/src/dnsqueue.cpp
index e9265fc37..b887ffca5 100644
--- a/src/dnsqueue.cpp
+++ b/src/dnsqueue.cpp
@@ -35,288 +35,15 @@
extern ServerConfig* Config;
extern InspIRCd* ServerInstance;
-class Lookup;
-
-Lookup* dnslist[MAX_DESCRIPTORS];
-Lookup* user_fd_to_dns[MAX_DESCRIPTORS];
-extern userrec* fd_ref_table[MAX_DESCRIPTORS];
-
-//enum LookupState { reverse, forward };
-
-class Lookup {
-private:
- char u[NICKMAX];
- std::string hostname;
-public:
- DNS resolver1;
- DNS resolver2;
-
- Lookup()
- {
- *u = 0;
- hostname = "";
- }
-
- void Reset()
- {
- *u = 0;
- hostname = "";
- }
-
- ~Lookup()
- {
- }
-
- bool DoLookup(std::string nick)
- {
- hostname = "";
- userrec* usr = Find(nick);
- if (usr)
- {
- resolver1.SetNS(std::string(Config->DNSServer));
- if (!resolver1.ReverseLookup(std::string(usr->host), true))
- {
- return false;
- }
- strlcpy(u,nick.c_str(),NICKMAX-1);
-
- /* ASSOCIATE WITH DNS LOOKUP LIST */
- if (resolver1.GetFD() != -1)
- {
- dnslist[resolver1.GetFD()] = this;
- user_fd_to_dns[usr->fd] = this;
- return true;
- }
- }
- return false;
- }
-
- bool Done(int fdcheck)
- {
- if (hostname != "")
- {
- // 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 > REG_NICKUSER)
- {
- usr->dns_done = true;
- return true;
- }
- if ((hostname != "") && (usr->registered != REG_ALL))
- {
- if ((std::string(insp_ntoa(usr->ip4)) == ip) && (hostname.length() < 65))
- {
- if ((hostname.find_last_of(".in-addr.arpa") == hostname.length() - 1) && (hostname.find_last_of(".in-addr.arpa") != std::string::npos))
- {
- 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;
- }
- }
- }
- 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;
- user_fd_to_dns[usr->fd] = NULL;
- }
- return true;
- }
- if (resolver1.GetFD() != -1)
- {
- dnslist[resolver1.GetFD()] = NULL;
- hostname = resolver1.GetResult();
- if (usr)
- {
- user_fd_to_dns[usr->fd] = NULL;
- if ((usr->registered > REG_NICKUSER) || (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, true);
- if (resolver2.GetFD() != -1)
- {
- dnslist[resolver2.GetFD()] = this;
- if (usr)
- user_fd_to_dns[usr->fd] = this;
- }
- }
- }
- }
- }
- }
- return false;
- }
-
- int GetFD()
- {
- userrec* usr = Find(u);
- if (!usr)
- return 0;
- if (usr->dns_done)
- return 0;
- return usr->fd;
- }
-};
-
bool lookup_dns(const std::string &nick)
{
- /* First attempt to find the nickname */
- userrec* u = Find(nick);
- if (u)
- {
- /* Check the cache */
- /*address_cache::iterator address = addrcache.find(u->ip4);
- if (address != addrcache.end())
- {
- 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
- * will maintain the reference table
- * which we use for quickly finding
- * dns results. Please note that we
- * do not associate a lookup with a
- * userrec* pointer and we use the
- * nickname instead because, by the
- * time the DNS lookup has completed,
- * the nickname could have quit and
- * if we then try and access the
- * pointer we get a nice segfault.
- */
- Lookup* L = new Lookup();
- L->DoLookup(nick);
- return true;
- }
return false;
}
void ZapThisDns(int fd)
{
-#ifdef THREADED_DNS
-/* if (fd_ref_table[fd])
- {
- if (fd_ref_table[fd]->registered >= REG_NICKUSER)
- {
- 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;
-
- Lookup *x = user_fd_to_dns[fd];
-
- if (x)
- {
- if (x->resolver1.GetFD() > 0)
- {
- log(DEBUG,"Whacked resolver1");
- dns_close(x->resolver1.GetFD());
- }
-
- if (x->resolver2.GetFD() > 0)
- {
- log(DEBUG,"Whacked resolver2");
- dns_close(x->resolver2.GetFD());
- }
- }
-#endif
}
void dns_poll(int fdcheck)
{
- /* Check the given file descriptor is in valid range */
- if ((fdcheck < 0) || (fdcheck > MAX_DESCRIPTORS))
- return;
-
- /* Try and find the file descriptor in our list of
- * active DNS lookups
- */
- Lookup *x = dnslist[fdcheck];
- if (x)
- {
- /* If it exists check if its a valid fd still */
- if (x->GetFD() != -1)
- {
- /* Check if its done, if it is delete it */
- if (x->Done(fdcheck))
- {
- /* We don't need to delete the file descriptor
- * from the socket engine, as dns.cpp tracks it
- * for us if we are in single-threaded country.
- */
- DELETE(x);
- }
- }
- else
- {
- /* its fd is dodgy, the dns code probably
- * bashed it due to error. Free the class.
- */
- DELETE(x);
- }
- /* If we got down here, the dns lookup was valid, BUT,
- * its still in progress. Be patient, and wait for
- * more socketengine events to complete the lookups.
- */
- return;
- }
- /* This FD doesnt belong here, lets be rid of it,
- * just to be safe so we dont get any more events
- * about it.
- */
- if (ServerInstance && ServerInstance->SE)
- ServerInstance->SE->DelFd(fdcheck);
}