فهرست منبع

* Fixed ipban sql connecting to the sql server when disabled

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@13292 54d463be-8e91-2dee-dedb-b68131a5f0ec
FlavioJS 16 سال پیش
والد
کامیت
c0e0d9924a
2فایلهای تغییر یافته به همراه27 افزوده شده و 2 حذف شده
  1. 3 1
      Changelog-Trunk.txt
  2. 24 1
      src/login/ipban_sql.c

+ 3 - 1
Changelog-Trunk.txt

@@ -3,8 +3,10 @@ Date	Added
 AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
+2008/10/15
+	* Fixed ipban sql connecting to the sql server when disabled. [FlavioJS]
 2008/10/11
-    * Using Kaizel in conjunction with Osiris Card should now work. (bugreport:2251) [SketchyPhoenix]
+	* Using Kaizel in conjunction with Osiris Card should now work. (bugreport:2251) [SketchyPhoenix]
 	* #monsterignore should turn off now. (bugreport:2306) [SketchyPhoenix]
 2008/10/09
 	* Rev. 13272 Updated NPC_REBIRTH. Has it's own values, and no longer leeches off SL_KAIZEL. [L0ne_W0lf]

+ 24 - 1
src/login/ipban_sql.c

@@ -33,6 +33,7 @@ static char   ipban_table[32] = "ipbanlist";
 // globals
 static Sql* sql_handle = NULL;
 static int cleanup_timer_id = INVALID_TIMER;
+static bool ipban_inited = false;
 
 int ipban_cleanup(int tid, unsigned int tick, int id, intptr data);
 
@@ -47,6 +48,11 @@ void ipban_init(void)
 	const char* database;
 	const char* codepage;
 
+	ipban_inited = true;
+
+	if( !login_config.ipban )
+		return;// ipban disabled
+
 	if( ipban_db_hostname[0] != '\0' )
 	{// local settings
 		username = ipban_db_username;
@@ -85,6 +91,9 @@ void ipban_init(void)
 // finalize
 void ipban_final(void)
 {
+	if( !login_config.ipban )
+		return;// ipban disabled
+
 	// release data
 	delete_timer(cleanup_timer_id, ipban_cleanup);
 
@@ -98,6 +107,9 @@ bool ipban_config_read(const char* key, const char* value)
 {
 	const char* signature;
 
+	if( ipban_inited )
+		return false;// settings can only be changed before init
+
 	signature = "sql.";
 	if( strncmpi(key, signature, strlen(signature)) == 0 )
 	{
@@ -186,6 +198,9 @@ bool ipban_check(uint32 ip)
 	char* data = NULL;
 	int matches;
 
+	if( !login_config.ipban )
+		return false;// ipban disabled
+
 	if( SQL_ERROR == Sql_Query(sql_handle, "SELECT count(*) FROM `%s` WHERE `list` = '%u.*.*.*' OR `list` = '%u.%u.*.*' OR `list` = '%u.%u.%u.*' OR `list` = '%u.%u.%u.%u'",
 		ipban_table, p[3], p[3], p[2], p[3], p[2], p[1], p[3], p[2], p[1], p[0]) )
 	{
@@ -207,7 +222,12 @@ bool ipban_check(uint32 ip)
 // log failed attempt
 void ipban_log(uint32 ip)
 {
-	unsigned long failures = loginlog_failedattempts(ip, login_config.dynamic_pass_failure_ban_interval);// how many times failed account? in one ip.
+	unsigned long failures;
+
+	if( !login_config.ipban )
+		return;// ipban disabled
+
+	failures = loginlog_failedattempts(ip, login_config.dynamic_pass_failure_ban_interval);// how many times failed account? in one ip.
 
 	// if over the limit, add a temporary ban entry
 	if( failures >= login_config.dynamic_pass_failure_ban_limit )
@@ -222,6 +242,9 @@ void ipban_log(uint32 ip)
 // remove expired bans
 int ipban_cleanup(int tid, unsigned int tick, int id, intptr data)
 {
+	if( !login_config.ipban )
+		return 0;// ipban disabled
+
 	if( SQL_ERROR == Sql_Query(sql_handle, "DELETE FROM `ipbanlist` WHERE `rtime` <= NOW()") )
 		Sql_ShowDebug(sql_handle);