X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fextra%2Fm_geoip.cpp;h=21a57a2830e7dfac18aded9ab58749b0b003646c;hb=0da6b3a13def40e8fd002b9fc60f955467f6372d;hp=57a08ed8497acdabb3563c9cb1034d3c60a5ed2c;hpb=56a5ace638d503099accf4e3461c53b154edaa1d;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/extra/m_geoip.cpp b/src/modules/extra/m_geoip.cpp index 57a08ed84..21a57a283 100644 --- a/src/modules/extra/m_geoip.cpp +++ b/src/modules/extra/m_geoip.cpp @@ -2,8 +2,8 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -23,10 +23,15 @@ class ModuleGeoIP : public Module { GeoIP * gi; + bool banunknown; + + std::map GeoBans; + + public: ModuleGeoIP(InspIRCd *Me) : Module(Me) { - ReadConf(); + OnRehash(NULL); Implementation eventlist[] = { I_OnRehash, I_OnUserRegister }; ServerInstance->Modules->Attach(eventlist, this, 2); @@ -39,18 +44,23 @@ class ModuleGeoIP : public Module virtual Version GetVersion() { - return Version(1, 2, 0, 0, VF_VENDOR, API_VERSION); + return Version("$Id$", VF_VENDOR, API_VERSION); } - virtual void ReadConf() + virtual void OnRehash(User* user) { - ConfigReader *MyConf = new ConfigReader(ServerInstance); - delete MyConf; - } + GeoBans.clear(); - virtual void OnRehash(User* user, const std::string ¶meter) - { - ReadConf(); + ConfigReader conf(ServerInstance); + + banunknown = conf.ReadFlag("geoip", "banunknown", 0); + + for (int i = 0; i < conf.Enumerate("geoban"); ++i) + { + std::string countrycode = conf.ReadValue("geoban", "country", i); + std::string reason = conf.ReadValue("geoban", "reason", i); + GeoBans[countrycode] = reason; + } } virtual int OnUserRegister(User* user) @@ -61,16 +71,16 @@ class ModuleGeoIP : public Module const char* c = GeoIP_country_code_by_addr(gi, user->GetIPString()); if (c) { - std::string country(c); - ServerInstance->Logs->Log("m_geoip", DEBUG, "*** Country: %s", country.c_str()); + std::map::iterator x = GeoBans.find(c); + if (x != GeoBans.end()) + ServerInstance->Users->QuitUser(user, x->second); } else { - ServerInstance->Logs->Log("m_geoip", DEBUG, "*** No country for %s!", user->GetIPString()); + if (banunknown) + ServerInstance->Users->QuitUser(user, "Could not identify your country of origin. Access denied."); } } - - /* don't do anything with this hot potato */ return 0; } };