X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcoremods%2Fcore_hostname_lookup.cpp;h=8e97d0c234083e0f816d74308ca0961dde74ebe9;hb=693b8a5a39e15b09d7352667e8a7339e58d9114c;hp=13214115bd6630d7c406092df6280e17c87a3fad;hpb=dd24f8ac713793d5d5a7e959228937f48788ba66;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/coremods/core_hostname_lookup.cpp b/src/coremods/core_hostname_lookup.cpp index 13214115b..8e97d0c23 100644 --- a/src/coremods/core_hostname_lookup.cpp +++ b/src/coremods/core_hostname_lookup.cpp @@ -23,20 +23,16 @@ namespace { LocalIntExt* dl; - LocalStringExt* ph; } /** Derived from Resolver, and performs user forward/reverse lookups. */ class UserResolver : public DNS::Request { + private: /** UUID we are looking up */ const std::string uuid; - /** True if the lookup is forward, false if is a reverse lookup - */ - const bool fwd; - public: /** Create a resolver. * @param mgr DNS Manager @@ -48,7 +44,6 @@ class UserResolver : public DNS::Request UserResolver(DNS::Manager* mgr, Module* me, LocalUser* user, const std::string& to_resolve, DNS::QueryType qt) : DNS::Request(mgr, me, to_resolve, qt) , uuid(user->uuid) - , fwd(qt == DNS::QUERY_A || qt == DNS::QUERY_AAAA) { } @@ -72,13 +67,13 @@ class UserResolver : public DNS::Request return; } - ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "DNS result for %s: '%s' -> '%s'", uuid.c_str(), ans_record->name.c_str(), ans_record->rdata.c_str()); + ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "DNS %s result for %s: '%s' -> '%s'%s", + this->manager->GetTypeStr(question.type).c_str(), uuid.c_str(), + ans_record->name.c_str(), ans_record->rdata.c_str(), + r->cached ? " (cached)" : ""); - if (!fwd) + if (this->question.type == DNS::QUERY_PTR) { - // first half of resolution is done. We now need to verify that the host matches. - ph->set(bound_user, ans_record->rdata); - UserResolver* res_forward; if (bound_user->client_sa.family() == AF_INET6) { @@ -103,7 +98,7 @@ class UserResolver : public DNS::Request dl->set(bound_user, 0); } } - else + else if (this->question.type == DNS::QUERY_A || this->question.type == DNS::QUERY_AAAA) { /* Both lookups completed */ @@ -130,33 +125,14 @@ class UserResolver : public DNS::Request if (rev_match) { - std::string* hostname = ph->get(bound_user); - - if (hostname == NULL) - { - ServerInstance->Logs->Log(MODNAME, LOG_DEFAULT, "ERROR: User has no hostname attached when doing a forward lookup"); - bound_user->WriteNotice("*** There was an internal error resolving your host, using your IP address (" + bound_user->GetIPString() + ") instead."); - return; - } - else if (hostname->length() <= ServerInstance->Config->Limits.MaxHost) - { - /* Hostnames starting with : are not a good thing (tm) */ - if ((*hostname)[0] == ':') - hostname->insert(0, "0"); - - bound_user->WriteNotice("*** Found your hostname (" + *hostname + (r->cached ? ") -- cached" : ")")); - bound_user->ChangeRealHost(hostname->substr(0, ServerInstance->Config->Limits.MaxHost), true); - } - else - { - bound_user->WriteNotice("*** Your hostname is longer than the maximum of " + ConvToStr(ServerInstance->Config->Limits.MaxHost) + " characters, using your IP address (" + bound_user->GetIPString() + ") instead."); - } - - ph->unset(bound_user); + bound_user->WriteNotice("*** Found your hostname (" + this->question.name + (r->cached ? ") -- cached" : ")")); + bound_user->ChangeRealHost(this->question.name, true); } else { + bool display_is_real = irc::equals(bound_user->GetDisplayedHost(), bound_user->GetRealHost()); bound_user->WriteNotice("*** Your hostname does not match up with your IP address. Sorry, using your IP address (" + bound_user->GetIPString() + ") instead."); + bound_user->ChangeRealHost(bound_user->GetIPString(), display_is_real); } } } @@ -177,18 +153,16 @@ class UserResolver : public DNS::Request class ModuleHostnameLookup : public Module { + private: LocalIntExt dnsLookup; - LocalStringExt ptrHosts; dynamic_reference DNS; public: ModuleHostnameLookup() : dnsLookup("dnsLookup", ExtensionItem::EXT_USER, this) - , ptrHosts("ptrHosts", ExtensionItem::EXT_USER, this) , DNS(this, "DNS") { dl = &dnsLookup; - ph = &ptrHosts; } void OnSetUserIP(LocalUser* user) CXX11_OVERRIDE