X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fextra%2Fm_geo_maxmind.cpp;h=86bb7bfca1ed5e96f67e11c912a85a94e0c58491;hb=772f7ceb94242a8ebfadd0d4e31209c0b51c2923;hp=f249ecf9154c642daf68cba679e1faa4eec26da2;hpb=661249a8509fb53717edd7bbbfb85060f8eaf22f;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/extra/m_geo_maxmind.cpp b/src/modules/extra/m_geo_maxmind.cpp index f249ecf91..86bb7bfca 100644 --- a/src/modules/extra/m_geo_maxmind.cpp +++ b/src/modules/extra/m_geo_maxmind.cpp @@ -1,7 +1,8 @@ /* * InspIRCd -- Internet Relay Chat Daemon * - * Copyright (C) 2019 Peter Powell + * Copyright (C) 2019-2021 Sadie Powell + * Copyright (C) 2019 Matt Schatz * * This file is part of InspIRCd. InspIRCd is free software: you can * redistribute it and/or modify it under the terms of the GNU General Public @@ -16,9 +17,12 @@ * along with this program. If not, see . */ +/// $CompilerFlags: require_version("libmaxminddb" "0" "1.2.1") warning("The version of libmaxminddb you are using may cause a segmentation fault if given a corrupt database file!") /// $CompilerFlags: find_compiler_flags("libmaxminddb" "") + /// $LinkerFlags: find_linker_flags("libmaxminddb" "-lmaxminddb") +/// $PackageInfo: require_system("arch") libmaxminddb pkgconf /// $PackageInfo: require_system("darwin") libmaxminddb pkg-config /// $PackageInfo: require_system("debian" "9.0") libmaxminddb-dev pkg-config /// $PackageInfo: require_system("ubuntu" "16.04") libmaxminddb-dev pkg-config @@ -27,16 +31,22 @@ # pragma comment(lib, "libmaxminddb.lib") #endif -#include #include "inspircd.h" #include "modules/geolocation.h" +#include -class GeolocationExtItem : public LocalExtItem +class GeolocationExtItem : public ExtensionItem { public: GeolocationExtItem(Module* parent) - : LocalExtItem("geolocation", ExtensionItem::EXT_USER, parent) + : ExtensionItem("geolocation", ExtensionItem::EXT_USER, parent) + { + } + + std::string ToHuman(const Extensible* container, void* item) const CXX11_OVERRIDE { + Geolocation::Location* location = static_cast(item); + return location->GetName() + " [" + location->GetCode() + "]"; } void free(Extensible* container, void* item) CXX11_OVERRIDE @@ -97,6 +107,10 @@ class GeolocationAPIImpl : public Geolocation::APIBase Geolocation::Location* GetLocation(irc::sockets::sockaddrs& sa) CXX11_OVERRIDE { + // Skip trying to look up a UNIX socket. + if (sa.family() != AF_INET && sa.family() != AF_INET6) + return NULL; + // Attempt to look up the socket address. int result; MMDB_lookup_result_s lookup = MMDB_lookup_sockaddr(&mmdb, &sa.sa, &result); @@ -148,13 +162,13 @@ class ModuleGeoMaxMind : public Module Version GetVersion() CXX11_OVERRIDE { - return Version("Provides Geolocation lookups using the libMaxMindDB library", VF_VENDOR); + return Version("Allows the server to perform geolocation lookups on both IP addresses and users.", VF_VENDOR); } void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE { ConfigTag* tag = ServerInstance->Config->ConfValue("maxmind"); - const std::string file = ServerInstance->Config->Paths.PrependConfig(tag->getString("file", "GeoLite2-Country.mmdb")); + const std::string file = ServerInstance->Config->Paths.PrependConfig(tag->getString("file", "GeoLite2-Country.mmdb", 1)); // Try to read the new database. MMDB_s mmdb; @@ -173,7 +187,7 @@ class ModuleGeoMaxMind : public Module void OnGarbageCollect() CXX11_OVERRIDE { for (LocationMap::iterator iter = geoapi.locations.begin(); iter != geoapi.locations.end(); ) - { + { Geolocation::Location* location = iter->second; if (location->GetUseCount()) {