* | 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.
{
GeoIP * gi;
+ bool banunknown;
+
+ std::map<std::string, std::string> GeoBans;
+
+
public:
ModuleGeoIP(InspIRCd *Me) : Module(Me)
{
- ReadConf();
+ OnRehash(NULL);
Implementation eventlist[] = { I_OnRehash, I_OnUserRegister };
ServerInstance->Modules->Attach(eventlist, this, 2);
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)
+ virtual ModResult OnUserRegister(User* user)
{
/* only do lookups on local users */
if (IS_LOCAL(user))
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<std::string, std::string>::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;
+ return MOD_RES_PASSTHRU;
}
};