diff options
Diffstat (limited to 'src/dnsqueue.cpp')
-rw-r--r-- | src/dnsqueue.cpp | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/src/dnsqueue.cpp b/src/dnsqueue.cpp index ce0422fde..6d1ba0840 100644 --- a/src/dnsqueue.cpp +++ b/src/dnsqueue.cpp @@ -38,16 +38,18 @@ extern InspIRCd* ServerInstance; class Lookup; Lookup* dnslist[MAX_DESCRIPTORS]; +Lookup* user_fd_to_dns[MAX_DESCRIPTORS]; //enum LookupState { reverse, forward }; class Lookup { private: - DNS resolver1; - DNS resolver2; char u[NICKMAX]; std::string hostname; public: + DNS resolver1; + DNS resolver2; + Lookup() { *u = 0; @@ -81,6 +83,7 @@ public: if (resolver1.GetFD() != -1) { dnslist[resolver1.GetFD()] = this; + user_fd_to_dns[usr->fd] = this; return true; } } @@ -148,7 +151,10 @@ public: 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) @@ -157,6 +163,7 @@ public: hostname = resolver1.GetResult(); if (usr) { + user_fd_to_dns[usr->fd] = NULL; if ((usr->registered > 3) || (hostname == "")) { WriteServ(usr->fd,"NOTICE Auth :*** Could not resolve your hostname -- Using your IP address instead"); @@ -168,7 +175,10 @@ public: { resolver2.ForwardLookup(hostname, true); if (resolver2.GetFD() != -1) + { dnslist[resolver2.GetFD()] = this; + user_fd_to_dns[usr->fd] = this; + } } } } @@ -225,6 +235,29 @@ bool lookup_dns(const std::string &nick) return false; } +void ZapThisDns(int fd) +{ + if ((fd < 0) || (fd > MAX_DESCRIPTORS)) + return; + + Lookup *x = user_fd_to_dns[fd]; + + if (x) + { + if (x->resolver1.GetFD() != -1) + { + log(DEBUG,"Whacked resolver1"); + dns_close(x->resolver1.GetFD()); + } + + if (x->resolver2.GetFD() != -1) + { + log(DEBUG,"Whacked resolver2"); + dns_close(x->resolver2.GetFD()); + } + } +} + void dns_poll(int fdcheck) { /* Check the given file descriptor is in valid range */ |