]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/coremods/core_hostname_lookup.cpp
Fix the OnSendWhoLine event being completely broken with WHOX.
[user/henk/code/inspircd.git] / src / coremods / core_hostname_lookup.cpp
index 4ec88698eedf2e85c606c98451dcef3cf2da836e..ec93732b124c732b7569f36454f6fdde55b3b762 100644 (file)
@@ -56,7 +56,7 @@ class UserResolver : public DNS::Request
         * if a previous result has already come back.
         * @param r The finished query
         */
-       void OnLookupComplete(const DNS::Query* r)
+       void OnLookupComplete(const DNS::Query* r) CXX11_OVERRIDE
        {
                LocalUser* bound_user = (LocalUser*)ServerInstance->FindUUID(uuid);
                if (!bound_user)
@@ -80,7 +80,7 @@ class UserResolver : public DNS::Request
                        ph->set(bound_user, ans_record->rdata);
 
                        UserResolver* res_forward;
-                       if (bound_user->client_sa.sa.sa_family == AF_INET6)
+                       if (bound_user->client_sa.family() == AF_INET6)
                        {
                                /* IPV6 forward lookup */
                                res_forward = new UserResolver(this->manager, this->creator, bound_user, ans_record->rdata, DNS::QUERY_AAAA);
@@ -109,7 +109,7 @@ class UserResolver : public DNS::Request
 
                        irc::sockets::sockaddrs* user_ip = &bound_user->client_sa;
                        bool rev_match = false;
-                       if (user_ip->sa.sa_family == AF_INET6)
+                       if (user_ip->family() == AF_INET6)
                        {
                                struct in6_addr res_bin;
                                if (inet_pton(AF_INET6, ans_record->rdata.c_str(), &res_bin))
@@ -164,7 +164,7 @@ class UserResolver : public DNS::Request
        /** Called on failed lookup
         * @param query The errored query
         */
-       void OnError(const DNS::Query* query)
+       void OnError(const DNS::Query* query) CXX11_OVERRIDE
        {
                LocalUser* bound_user = (LocalUser*)ServerInstance->FindUUID(uuid);
                if (bound_user)
@@ -199,6 +199,13 @@ class ModuleHostnameLookup : public Module
                        return;
                }
 
+               // Clients can't have a DNS hostname if they aren't connected via IPv4 or IPv6.
+               if (user->client_sa.family() != AF_INET && user->client_sa.family() != AF_INET6)
+               {
+                       user->WriteNotice("*** Skipping host resolution (connected via a non-IP socket)");
+                       return;
+               }
+
                user->WriteNotice("*** Looking up your hostname...");
 
                UserResolver* res_reverse = new UserResolver(*this->DNS, this, user, user->GetIPString(), DNS::QUERY_PTR);