]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-13894 Impoved fix with less duplicated code, no notices displayed before you...
authortjhunt <tjhunt>
Tue, 23 Sep 2008 05:18:42 +0000 (05:18 +0000)
committertjhunt <tjhunt>
Tue, 23 Sep 2008 05:18:42 +0000 (05:18 +0000)
admin/settings/server.php
lib/moodlelib.php

index 57e682d4699ba819710e407f7889caf4c041407e..296eb87558497650c6de559ce7f35632852bc89f 100644 (file)
@@ -140,7 +140,11 @@ $temp = new admin_settingpage('http', get_string('http', 'admin'));
 $temp->add(new admin_setting_configtext('framename', get_string('framename', 'admin'), get_string('configframename', 'admin'), '_top', PARAM_ALPHAEXT));
 $temp->add(new admin_setting_configcheckbox('slasharguments', get_string('slasharguments', 'admin'), get_string('configslasharguments', 'admin'), 1));
 $temp->add(new admin_setting_heading('reverseproxy', get_string('reverseproxy', 'admin'), '', ''));
-$options = array(0=>'HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR, REMOTE_ADDR', 1=>'HTTP_X_FORWARDED_FOR, REMOTE_ADDR', 2=>'HTTP_CLIENT, REMOTE_ADDR', 3=>'REMOTE_ADDR');
+$options = array(
+    0 => 'HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR, REMOTE_ADDR',
+    GETREMOTEADDR_SKIP_HTTP_CLIENT_IP => 'HTTP_X_FORWARDED_FOR, REMOTE_ADDR',
+    GETREMOTEADDR_SKIP_HTTP_X_FORWARDED_FOR => 'HTTP_CLIENT, REMOTE_ADDR',
+    GETREMOTEADDR_SKIP_HTTP_X_FORWARDED_FOR|GETREMOTEADDR_SKIP_HTTP_CLIENT_IP => 'REMOTE_ADDR');
 $temp->add(new admin_setting_configselect('getremoteaddrconf', get_string('getremoteaddrconf', 'admin'), get_string('configgetremoteaddrconf', 'admin'), 0, $options));
 $temp->add(new admin_setting_heading('webproxy', get_string('webproxy', 'admin'), get_string('webproxyinfo', 'admin')));
 $temp->add(new admin_setting_configtext('proxyhost', get_string('proxyhost', 'admin'), get_string('configproxyhost', 'admin'), '', PARAM_HOST));
index c9c5ee83214c5bb8e134302495678baee4d0dd00..3e4fe3e84bc3d3fc75cfcae2d41d9e4219d6e782 100644 (file)
@@ -7377,43 +7377,29 @@ function remoteip_in_list($list){
  *
  * @return string The remote IP address
  */
+define('GETREMOTEADDR_SKIP_HTTP_CLIENT_IP', '1');
+define('GETREMOTEADDR_SKIP_HTTP_X_FORWARDED_FOR', '2');
 function getremoteaddr() {
     global $CFG;
 
-    switch ($CFG->getremoteaddrconf) {
-        case 3:
-            if (!empty($_SERVER['REMOTE_ADDR'])) {
-                return cleanremoteaddr($_SERVER['REMOTE_ADDR']);
-            }
-            break;
-        case 2:
-            if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
-                return cleanremoteaddr($_SERVER['HTTP_CLIENT_IP']);
-            }
-            if (!empty($_SERVER['REMOTE_ADDR'])) {
-                return cleanremoteaddr($_SERVER['REMOTE_ADDR']);
-            }
-            break;
-        case 1:
-            if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
-                return cleanremoteaddr($_SERVER['HTTP_X_FORWARDED_FOR']);
-            }
-            if (!empty($_SERVER['REMOTE_ADDR'])) {
-                return cleanremoteaddr($_SERVER['REMOTE_ADDR']);
-            }
-            break;
-        case 0:
-        default:
-            if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
-                return cleanremoteaddr($_SERVER['HTTP_CLIENT_IP']);
-            }
-            if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
-                return cleanremoteaddr($_SERVER['HTTP_X_FORWARDED_FOR']);
-            }
-            if (!empty($_SERVER['REMOTE_ADDR'])) {
-                return cleanremoteaddr($_SERVER['REMOTE_ADDR']);
-            }
+    if (empty($CFG->getremoteaddrconf)) {
+        // This will happen, for example, before just after the upgrade, as the
+        // user is redirected to the admin screen.
+        $variablestoskip = 0;
+    } else {
+        $variablestoskip = $CFG->getremoteaddrconf;
+    }
+    if (!($variablestoskip & GETREMOTEADDR_SKIP_HTTP_CLIENT_IP)) {
+        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
+            return cleanremoteaddr($_SERVER['HTTP_CLIENT_IP']);
+        }
+    }
+    if (!($variablestoskip & GETREMOTEADDR_SKIP_HTTP_X_FORWARDED_FOR)) {
+        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
+            return cleanremoteaddr($_SERVER['HTTP_X_FORWARDED_FOR']);
+        }
     }
+    return cleanremoteaddr($_SERVER['REMOTE_ADDR']);
 }
 
 /**