(bug 16574) Allow administrators to temporarily disable the account creation limit...
authorRaimond Spekking <raymond@users.mediawiki.org>
Tue, 14 Sep 2010 08:58:07 +0000 (08:58 +0000)
committerRaimond Spekking <raymond@users.mediawiki.org>
Tue, 14 Sep 2010 08:58:07 +0000 (08:58 +0000)
RELEASE-NOTES
includes/DefaultSettings.php
includes/User.php
languages/messages/MessagesEn.php
maintenance/language/messages.inc

index 8ac2531..eaf258d 100644 (file)
@@ -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
index dcb6f95..299d73c 100644 (file)
@@ -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();
 
index ef52e70..c06abff 100644 (file)
@@ -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');
index 0610ad1..90ec440 100644 (file)
@@ -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'      => ' #<!-- leave this line exactly as it is --> <pre>
+# 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
+ #</pre> <!-- leave this line exactly as it is -->',
 
 # JavaScript password checks
 'password-strength'            => 'Estimated password strength: $1',
index 6727461..1e220fe 100644 (file)
@@ -456,6 +456,7 @@ $wgMessageStructure = array(
                'loginlanguagelabel',
                'loginlanguagelinks',
                'suspicious-userlogout',
+               'ratelimit-excluded-ips',
        ),
        'passwordstrength' => array(
                'password-strength',