diff --git a/admin/index.php b/admin/index.php
index 4fb539a..63bd0e2 100644
--- a/admin/index.php
+++ b/admin/index.php
@@ -30,6 +30,7 @@
$confirmrelease = optional_param('confirmrelease', 0, PARAM_BOOL);
$agreelicence = optional_param('agreelicence',0, PARAM_BOOL);
$ignoreupgradewarning = optional_param('ignoreupgradewarning', 0, PARAM_BOOL);
+ $datarootconfirmsecure = optional_param('datarootconfirmsecure', 0, PARAM_BOOL);
/// check upgrade status first
if ($ignoreupgradewarning and !empty($_SESSION['upgraderunning'])) {
@@ -468,6 +469,11 @@
/// Everything should now be set up, and the user is an admin
+/// Move this check befor the call to admin_get_root().
+ if (empty($CFG->datarootconfirmsecure) && !empty($datarootconfirmsecure)) {
+ set_config('datarootconfirmsecure',true);
+ }
+
/// Print default admin page with notifications.
$adminroot = admin_get_root();
@@ -492,8 +498,15 @@
print_simple_box(get_string('globalswarning', 'admin'), 'center', '60%');
}
- if (is_dataroot_insecure()) {
- print_simple_box(get_string('datarootsecuritywarning', 'admin', $CFG->dataroot), 'center', '60%');
+ if (empty($CFG->datarootconfirmsecure) && ($datarooturl = is_dataroot_insecure())) {
+ print_box_start('generalbox adminwarning');
+ print_string('datarootsecuritywarning', 'admin', $datarooturl);
+ $options = array();
+ $options['sesskey'] = $USER->sesskey;
+ $options['datarootconfirmsecure'] = 1;
+ print_single_button('index.php', $options, get_string('datarootconfirmsecure', 'admin'),
+ 'post', '', '', '', '', get_string('confirmverifieddataroot', 'admin'));
+ print_box_end();
}
if (substr($CFG->wwwroot, -1) == '/') {
diff --git a/admin/settings/top.php b/admin/settings/top.php
index 963db21..189c0a6 100644
--- a/admin/settings/top.php
+++ b/admin/settings/top.php
@@ -5,7 +5,11 @@
// since they need to exist *before* settingpages and externalpages
// are added to them.
-$ADMIN->add('root', new admin_externalpage('adminnotifications', get_string('notifications'), "$CFG->wwwroot/$CFG->admin/index.php"));
+$adminnotifications = get_string('notifications');
+if (empty($CFG->datarootconfirmsecure) && is_dataroot_insecure()) {
+ $adminnotifications .= get_string('securitywarningspending', 'admin');
+}
+$ADMIN->add('root', new admin_externalpage('adminnotifications', $adminnotifications, "$CFG->wwwroot/$CFG->admin/index.php"));
// hidden upgrade script
$ADMIN->add('root', new admin_externalpage('upgradesettings', get_string('upgradesettings', 'admin'), "$CFG->wwwroot/$CFG->admin/upgradesettings.php", 'moodle/site:config', true));
diff --git a/install.php b/install.php
index e8ae2a9..b07c55f 100644
--- a/install.php
+++ b/install.php
@@ -216,6 +216,13 @@ if (isset($_GET['download'])) {
/// Check the directory settings
+if (($nextstage == DIRECTORY)) {
+ // Each time we are going to visit the directory settings page, clear the
+ // insecure dataroot confirmation flag (so the user needs to confirm it
+ // again) just in case.
+ unset($INSTALL['datarootconfirmsecure']);
+}
+
if ($INSTALL['stage'] == DIRECTORY) {
error_reporting(0);
@@ -241,7 +248,14 @@ if ($INSTALL['stage'] == DIRECTORY) {
if (make_upload_directory('sessions', false) === false ) {
$errormsg .= get_string('datarooterror', 'install').'
';
}
- if ($fh) fclose($fh);
+ $CFG->wwwroot = $INSTALL['wwwroot']; // We need wwwroot inside is_dataroot_insecure.
+ if (($datarooturl = is_dataroot_insecure()) && (empty($INSTALL['datarootconfirmsecure']))) {
+ if (empty($errormsg)) {
+ // We don't touch $errormsg here, as the error message is printed inside the form_table
+ // function, but we need to make sure we stay in the stage.
+ $nextstage = DIRECTORY;
+ }
+ }
if (!empty($errormsg)) $nextstage = DIRECTORY;
@@ -770,7 +784,7 @@ function print_object($object) {
//==========================================================================//
function form_table($nextstage = WELCOME, $formaction = "install.php") {
- global $INSTALL, $db;
+ global $INSTALL, $db, $CFG;
/// Print the standard form if we aren't in the DOWNLOADLANG page
/// because it has its own form.
@@ -824,6 +838,15 @@ function form_table($nextstage = WELCOME, $formaction = "install.php") {
break;
case DIRECTORY: /// Directory settings
+ if (!empty($INSTALL['wwwrootform'])) {
+ $CFG->wwwroot = $INSTALL['wwwrootform'];
+ if (($datarooturl = is_dataroot_insecure()) && (empty($INSTALL['datarootconfirmsecure']))) {
+ $errormsg = get_string('datarootinsecureerror', 'install', $datarooturl);
+ echo "
$errormsg
\n"; + echo '