X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcoremods%2Fcore_hostname_lookup.cpp;h=ec93732b124c732b7569f36454f6fdde55b3b762;hb=be91435ccb8e05c84ecd126b5c41b74c45f4535b;hp=b9adc9c2e7433df71b9629a18880ba5fa3feb6fa;hpb=c0aba5b728b0a921d95ec120aa638dab1520b42f;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/coremods/core_hostname_lookup.cpp b/src/coremods/core_hostname_lookup.cpp index b9adc9c2e..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)) @@ -145,11 +145,7 @@ class UserResolver : public DNS::Request hostname->insert(0, "0"); bound_user->WriteNotice("*** Found your hostname (" + *hostname + (r->cached ? ") -- cached" : ")")); - bound_user->host.assign(*hostname, 0, ServerInstance->Config->Limits.MaxHost); - bound_user->dhost = bound_user->host; - - /* Invalidate cache */ - bound_user->InvalidateCache(); + bound_user->ChangeRealHost(hostname->substr(0, ServerInstance->Config->Limits.MaxHost), true); } else { @@ -168,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) @@ -195,7 +191,7 @@ class ModuleHostnameLookup : public Module ph = &ptrHosts; } - void OnUserInit(LocalUser *user) + void OnSetUserIP(LocalUser* user) CXX11_OVERRIDE { if (!DNS || !user->MyClass->resolvehostnames) { @@ -203,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); @@ -222,12 +225,12 @@ class ModuleHostnameLookup : public Module } } - ModResult OnCheckReady(LocalUser* user) + ModResult OnCheckReady(LocalUser* user) CXX11_OVERRIDE { return this->dnsLookup.get(user) ? MOD_RES_DENY : MOD_RES_PASSTHRU; } - Version GetVersion() + Version GetVersion() CXX11_OVERRIDE { return Version("Provides support for DNS lookups on connecting clients", VF_CORE|VF_VENDOR); }