MDL-59595 admin: Make sure $ADMIN is properly unset when changing users
authorJake Dallimore <jake@moodle.com>
Fri, 15 Dec 2017 03:47:46 +0000 (11:47 +0800)
committerJake Dallimore <jake@moodle.com>
Tue, 24 Jul 2018 00:25:30 +0000 (08:25 +0800)
lib/adminlib.php
lib/classes/session/manager.php

index c3e39cd..8ba8b33 100644 (file)
@@ -7971,9 +7971,7 @@ function admin_externalpage_setup($section, $extrabutton = '', array $extraurlpa
  * @return object admin_root object
  */
 function admin_get_root($reload=false, $requirefulltree=true) {
-    global $CFG, $DB, $OUTPUT;
-
-    static $ADMIN = NULL;
+    global $CFG, $DB, $OUTPUT, $ADMIN;
 
     if (is_null($ADMIN)) {
     // create the admin tree!
index f617cc2..6568e4b 100644 (file)
@@ -712,6 +712,7 @@ class manager {
      * @param \stdClass $user record
      */
     public static function set_user(\stdClass $user) {
+        global $ADMIN;
         $GLOBALS['USER'] = $user;
         unset($GLOBALS['USER']->description); // Conserve memory.
         unset($GLOBALS['USER']->password);    // Improve security.
@@ -723,6 +724,9 @@ class manager {
         // Relink session with global $USER just in case it got unlinked somehow.
         $_SESSION['USER'] =& $GLOBALS['USER'];
 
+        // Nullify the $ADMIN tree global. If we're changing users, then this is now stale and must be generated again if needed.
+        $ADMIN = null;
+
         // Init session key.
         sesskey();
     }