X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcoremods%2Fcore_hostname_lookup.cpp;h=ec93732b124c732b7569f36454f6fdde55b3b762;hb=be91435ccb8e05c84ecd126b5c41b74c45f4535b;hp=4ec88698eedf2e85c606c98451dcef3cf2da836e;hpb=906260c24f7818fb7cf15a0371d760acb1254113;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/coremods/core_hostname_lookup.cpp b/src/coremods/core_hostname_lookup.cpp index 4ec88698e..ec93732b1 100644 --- a/src/coremods/core_hostname_lookup.cpp +++ b/src/coremods/core_hostname_lookup.cpp @@ -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);