diff --git a/admin/index.php b/admin/index.php
index 7529d33..65caab6 100644
--- a/admin/index.php
+++ b/admin/index.php
@@ -32,6 +32,7 @@
$autopilot = optional_param('autopilot', 0, PARAM_BOOL);
$ignoreupgradewarning = optional_param('ignoreupgradewarning', 0, PARAM_BOOL);
$confirmplugincheck = optional_param('confirmplugincheck', 0, PARAM_BOOL);
+ $datarootconfirmsecure = optional_param('datarootconfirmsecure', 0, PARAM_BOOL);
/// check upgrade status first
if ($ignoreupgradewarning) {
@@ -536,6 +537,11 @@
}
}
+/// Move this check befor the call to admin_get_root().
+ if (empty($CFG->datarootconfirmsecure) && !empty($datarootconfirmsecure)) {
+ set_config('datarootconfirmsecure',true);
+ }
+
$adminroot =& admin_get_root();
/// Check if there are any new admin settings which have still yet to be set
@@ -564,10 +570,17 @@
print_box(get_string('globalswarning', 'admin'), 'generalbox adminwarning');
}
- if (is_dataroot_insecure()) {
- print_box(get_string('datarootsecuritywarning', 'admin', $CFG->dataroot), 'generalbox adminwarning');
- }
+ 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 (defined('WARN_DISPLAY_ERRORS_ENABLED')) {
print_box(get_string('displayerrorswarning', 'admin'), 'generalbox adminwarning');
}
diff --git a/admin/settings/top.php b/admin/settings/top.php
index 4651338..ed69b57 100644
--- a/admin/settings/top.php
+++ b/admin/settings/top.php
@@ -13,7 +13,11 @@ if (get_site()) {
$hassiteconfig = true;
}
-$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 7f30999..0cd7dae 100644
--- a/install.php
+++ b/install.php
@@ -249,6 +249,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);
@@ -274,6 +281,14 @@ if ($INSTALL['stage'] == DIRECTORY) {
if (make_upload_directory('sessions', false) === false) {
$errormsg .= get_string('datarooterror', 'install').'
';
}
+ $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;
@@ -634,7 +649,7 @@ if ($nextstage == SAVE) {
//==========================================================================//
function form_table($nextstage, $formaction, $databases) {
- 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.
@@ -688,6 +703,15 @@ function form_table($nextstage, $formaction, $databases) {
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 '