summaryrefslogtreecommitdiff
path: root/src/dnsqueue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dnsqueue.cpp')
-rw-r--r--src/dnsqueue.cpp37
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 */