From 3a4f0a34f5eb9cf1936d7499c9969ae76a06037d Mon Sep 17 00:00:00 2001 From: tjhunt Date: Tue, 23 Sep 2008 05:18:42 +0000 Subject: [PATCH] MDL-13894 Impoved fix with less duplicated code, no notices displayed before you get to the 'New settings' screen, and named constants instead of magic numbers. --- admin/settings/server.php | 6 ++++- lib/moodlelib.php | 52 ++++++++++++++------------------------- 2 files changed, 24 insertions(+), 34 deletions(-) diff --git a/admin/settings/server.php b/admin/settings/server.php index 57e682d469..296eb87558 100644 --- a/admin/settings/server.php +++ b/admin/settings/server.php @@ -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)); diff --git a/lib/moodlelib.php b/lib/moodlelib.php index c9c5ee8321..3e4fe3e84b 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -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']); } /** -- 2.39.5