]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/dnsqueue.cpp
Fix test client error cheecking on result types
[user/henk/code/inspircd.git] / src / dnsqueue.cpp
index 6d1ba084079e6ba830ffe36fc40572047dfc8d01..fb0e0bd75999900c96170afed78f019b5253c63f 100644 (file)
@@ -39,6 +39,7 @@ class Lookup;
 
 Lookup* dnslist[MAX_DESCRIPTORS];
 Lookup* user_fd_to_dns[MAX_DESCRIPTORS];
+extern userrec* fd_ref_table[MAX_DESCRIPTORS];
 
 //enum LookupState { reverse, forward };
 
@@ -112,17 +113,18 @@ public:
                                                }
                                                if ((hostname != "") && (usr->registered != 7))
                                                {
-                                                       if ((std::string((char*)inet_ntoa(usr->ip4)) == ip) && (hostname.length() < 65))
+                                                       if ((std::string(inet_ntoa(usr->ip4)) == ip) && (hostname.length() < 65))
                                                        {
-                                                               strlcpy(usr->host,hostname.c_str(),64);
-                                                               strlcpy(usr->dhost,hostname.c_str(),64);
-                                                               /*address_cache::iterator address = addrcache.find(usr->ip4);
-                                                               if (address == addrcache.end())
+                                                               if ((hostname.find_last_of(".in-addr.arpa") == hostname.length() - 1) && (hostname.find_last_of(".in-addr.arpa") != std::string::npos))
                                                                {
-                                                                       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");
+                                                                       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;
@@ -170,14 +172,15 @@ public:
                                                        usr->dns_done = true;
                                                        return true;
                                                }
-                                       }
-                                       if (hostname != "")
-                                       {
-                                               resolver2.ForwardLookup(hostname, true);
-                                               if (resolver2.GetFD() != -1)
+                                               if (hostname != "")
                                                {
-                                                       dnslist[resolver2.GetFD()] = this;
-                                                       user_fd_to_dns[usr->fd] = this;
+                                                       resolver2.ForwardLookup(hostname, true);
+                                                       if (resolver2.GetFD() != -1)
+                                                       {
+                                                               dnslist[resolver2.GetFD()] = this;
+                                                               if (usr)
+                                                                       user_fd_to_dns[usr->fd] = this;
+                                                       }
                                                }
                                        }
                                }
@@ -237,6 +240,19 @@ bool lookup_dns(const std::string &nick)
 
 void ZapThisDns(int fd)
 {
+#ifdef THREADED_DNS
+/*     if (fd_ref_table[fd])
+       {
+                       if (fd_ref_table[fd]->registered >= 3)
+               {
+                       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;
 
@@ -244,18 +260,19 @@ void ZapThisDns(int fd)
 
        if (x)
        {
-               if (x->resolver1.GetFD() != -1)
+               if (x->resolver1.GetFD() > 0)
                {
                        log(DEBUG,"Whacked resolver1");
                        dns_close(x->resolver1.GetFD());
                }
 
-               if (x->resolver2.GetFD() != -1)
+               if (x->resolver2.GetFD() > 0)
                {
                        log(DEBUG,"Whacked resolver2");
                        dns_close(x->resolver2.GetFD());
                }
        }
+#endif
 }
 
 void dns_poll(int fdcheck)