From 5b66949b49367aca07b1d348c3ff0537da0da7eb Mon Sep 17 00:00:00 2001 From: Raimond Spekking Date: Tue, 14 Sep 2010 08:58:07 +0000 Subject: [PATCH] (bug 16574) Allow administrators to temporarily disable the account creation limit for IP addresses: [[MediaWiki:Ratelimit-excluded-ips]] --- RELEASE-NOTES | 2 ++ includes/DefaultSettings.php | 2 ++ includes/User.php | 26 +++++++++++++++++++++++++- languages/messages/MessagesEn.php | 5 +++++ maintenance/language/messages.inc | 1 + 5 files changed, 35 insertions(+), 1 deletion(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 8ac253187a..eaf258dd69 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -158,6 +158,8 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN * (bug 24007) Diff pages now mention the number of users having edited intermediate revisions * Added new hook GetIP +* (bug 16574) Allow administrators to temporarily disable the account creation + limit for IP addresses: [[MediaWiki:Ratelimit-excluded-ips]] === Bug fixes in 1.17 === * (bug 17560) Half-broken deletion moved image files to deletion archive diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index dcb6f95285..299d73cf26 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -3407,6 +3407,8 @@ $wgRateLimitsExcludedGroups = array(); /** * Array of IPs which should be excluded from rate limits. * This may be useful for whitelisting NAT gateways for conferences, etc. + * Wiki administrators can add additional IP addresses via + * [[MediaWiki:Ratelimit-excluded-ips]] */ $wgRateLimitsExcludedIPs = array(); diff --git a/includes/User.php b/includes/User.php index ef52e70f2f..c06abffe41 100644 --- a/includes/User.php +++ b/includes/User.php @@ -1212,10 +1212,34 @@ class User { // Deprecated, but kept for backwards-compatibility config return false; } - if( in_array( wfGetIP(), $wgRateLimitsExcludedIPs ) ) { + + wfDebug( "Checking the list of IP addresses excluded from rate limit..\n" ); + + // Read list of IP addresses from MediaWiki namespace + $message = wfMsgForContentNoTrans( 'ratelimit-excluded-ips' ); + $lines = explode( "\n", $message ); + foreach( $lines as $line ) { + // Remove comment lines + $comment = substr( trim( $line ), 0, 1 ); + if ( $comment == '#' || $comment == '' ) { + continue; + } + // Remove additional comments after an IP address + $comment = strpos( $line, '#' ); + if ( $comment > 0 ) { + $line = trim( substr( $line, 0, $comment-1 ) ); + if ( IP::isValid( $line ) ) { + $wgRateLimitsExcludedIPs[] = IP::sanitizeIP( $line ); + } + } + } + + $ip = IP::sanitizeIP( wfGetIP() ); + if( in_array( $ip, $wgRateLimitsExcludedIPs ) ) { // No other good way currently to disable rate limits // for specific IPs. :P // But this is a crappy hack and should die. + wfDebug( "IP $ip matches the list of rate limit excluded IPs\n" ); return false; } return !$this->isAllowed('noratelimit'); diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index 0610ad17b5..90ec440880 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -1134,6 +1134,11 @@ Please wait before trying again.', * Italiano|it * Nederlands|nl', # do not translate or duplicate this message to other languages 'suspicious-userlogout' => 'Your request to log out was denied because it looks like it was sent by a broken browser or caching proxy.', +'ratelimit-excluded-ips' => ' #
+# Syntax is as follows:
+#   * Everything from a "#" character to the end of the line is a comment
+#   * Every non-blank line is an IP address excluded from the rate limit
+ #
', # JavaScript password checks 'password-strength' => 'Estimated password strength: $1', diff --git a/maintenance/language/messages.inc b/maintenance/language/messages.inc index 6727461255..1e220fedde 100644 --- a/maintenance/language/messages.inc +++ b/maintenance/language/messages.inc @@ -456,6 +456,7 @@ $wgMessageStructure = array( 'loginlanguagelabel', 'loginlanguagelinks', 'suspicious-userlogout', + 'ratelimit-excluded-ips', ), 'passwordstrength' => array( 'password-strength', -- 2.20.1