/** * Set a volatile flag * * @param string $type the "type" namespace for the key * @param string $name the key to set * @param string $value the value to set (without magic quotes) - null will remove the flag * @param int $expiry (optional) epoch indicating expiry - defaults to now()+ 24hs * @return bool Always returns true */ function set_cache_flag($type, $name, $value, $expiry = null) { global $DB; $timemodified = time(); if ($expiry === null || $expiry < $timemodified) { $expiry = $timemodified + 24 * 60 * 60; } else { $expiry = (int) $expiry; } if ($value === null) { unset_cache_flag($type, $name); return true; } if ($f = $DB->get_record('cache_flags', array('name' => $name, 'flagtype' => $type), '*', IGNORE_MULTIPLE)) { // This is a potential problem in DEBUG_DEVELOPER. if ($f->value == $value and $f->expiry == $expiry and $f->timemodified == $timemodified) { return true; // No need to update. } $f->value = $value; $f->expiry = $expiry; $f->timemodified = $timemodified; $DB->update_record('cache_flags', $f); } else { $f = new stdClass(); $f->flagtype = $type; $f->name = $name; $f->value = $value; $f->expiry = $expiry; $f->timemodified = $timemodified; $DB->insert_record('cache_flags', $f); } return true; }
/** * Find the session set by ntlmsso_magic(), validate it and * call authenticate_user_login() to authenticate the user through * the auth machinery. * * It is complemented by a similar check in user_login(). * * If it succeeds, it never returns. * */ function ntlmsso_finish() { global $CFG, $USER, $SESSION; $key = sesskey(); $cf = get_cache_flags($this->pluginconfig . '/ntlmsess'); if (!isset($cf[$key]) || $cf[$key] === '') { return false; } $username = $cf[$key]; // Here we want to trigger the whole authentication machinery // to make sure no step is bypassed... $user = authenticate_user_login($username, $key); if ($user) { complete_user_login($user); // Cleanup the key to prevent reuse... // and to allow re-logins with normal credentials unset_cache_flag($this->pluginconfig . '/ntlmsess', $key); // Redirection if (user_not_fully_set_up($USER)) { $urltogo = $CFG->wwwroot . '/user/edit.php'; // We don't delete $SESSION->wantsurl yet, so we get there later } else { if (isset($SESSION->wantsurl) and strpos($SESSION->wantsurl, $CFG->wwwroot) === 0) { $urltogo = $SESSION->wantsurl; // Because it's an address in this site unset($SESSION->wantsurl); } else { // No wantsurl stored or external - go to homepage $urltogo = $CFG->wwwroot . '/'; unset($SESSION->wantsurl); } } // We do not want to redirect if we are in a PHPUnit test. if (!PHPUNIT_TEST) { redirect($urltogo); } } // Should never reach here. return false; }
/** * Set a volatile flag * * @param string $type the "type" namespace for the key * @param string $name the key to set * @param string $value the value to set (without magic quotes) - NULL will remove the flag * @param int $expiry (optional) epoch indicating expiry - defaults to now()+ 24hs * @return bool */ function set_cache_flag($type, $name, $value, $expiry = NULL) { $timemodified = time(); if ($expiry === NULL || $expiry < $timemodified) { $expiry = $timemodified + 24 * 60 * 60; } else { $expiry = (int) $expiry; } if ($value === NULL) { return unset_cache_flag($type, $name); } $type = addslashes($type); $name = addslashes($name); if ($f = get_record('cache_flags', 'name', $name, 'flagtype', $type)) { // this is a potentail problem in DEBUG_DEVELOPER if ($f->value == $value and $f->expiry == $expiry and $f->timemodified == $timemodified) { return true; //no need to update; helps rcache too } $f->value = addslashes($value); $f->expiry = $expiry; $f->timemodified = $timemodified; return update_record('cache_flags', $f); } else { $f = new object(); $f->flagtype = $type; $f->name = $name; $f->value = addslashes($value); $f->expiry = $expiry; $f->timemodified = $timemodified; return (bool) insert_record('cache_flags', $f); } }
/** * Set a volatile flag * * @param string $type the "type" namespace for the key * @param string $name the key to set * @param string $value the value to set (without magic quotes) - NULL will remove the flag * @param int $expiry (optional) epoch indicating expiry - defaults to now()+ 24hs * @return bool */ function set_cache_flag($type, $name, $value, $expiry = NULL) { $timemodified = time(); if ($expiry === NULL || $expiry < $timemodified) { $expiry = $timemodified + 24 * 60 * 60; } else { $expiry = (int) $expiry; } if ($value === NULL) { return unset_cache_flag($type, $name); } $type = addslashes($type); $name = addslashes($name); $value = addslashes($value); if ($f = get_record('cache_flags', 'name', $name, 'flagtype', $type)) { $f->value = $value; $f->expiry = $expiry; $f->timemodified = $timemodified; return update_record('cache_flags', $f); } else { $f = new StdClass(); $f->flagtype = $type; $f->name = $name; $f->value = $value; $f->expiry = $expiry; $f->timemodified = $timemodified; return insert_record('cache_flags', $f); } }
/** * Find the session set by ntlmsso_magic(), validate it and * call authenticate_user_login() to authenticate the user through * the auth machinery. * * It is complemented by a similar check in user_login(). * * If it succeeds, it never returns. * */ function ntlmsso_finish() { global $CFG, $USER, $SESSION; $key = sesskey(); $cf = get_cache_flags('auth/ldap/ntlmsess'); if (!isset($cf[$key]) || $cf[$key] === '') { return false; } $username = $cf[$key]; // Here we want to trigger the whole authentication machinery // to make sure no step is bypassed... $user = authenticate_user_login($username, $key); if ($user) { add_to_log(SITEID, 'user', 'login', "view.php?id={$USER->id}&course=" . SITEID, $user->id, 0, $user->id); $USER = complete_user_login($user); // Cleanup the key to prevent reuse... // and to allow re-logins with normal credentials unset_cache_flag('auth/ldap/ntlmsess', $key); /// Redirection if (user_not_fully_set_up($USER)) { $urltogo = $CFG->wwwroot . '/user/edit.php'; // We don't delete $SESSION->wantsurl yet, so we get there later } else { if (isset($SESSION->wantsurl) and strpos($SESSION->wantsurl, $CFG->wwwroot) === 0) { $urltogo = $SESSION->wantsurl; /// Because it's an address in this site unset($SESSION->wantsurl); } else { // no wantsurl stored or external - go to homepage $urltogo = $CFG->wwwroot . '/'; unset($SESSION->wantsurl); } } redirect($urltogo); } // Should never reach here. return false; }
/** * Set a volatile flag * * @param string $type the "type" namespace for the key * @param string $name the key to set * @param string $value the value to set (without magic quotes) - NULL will remove the flag * @param int $expiry (optional) epoch indicating expiry - defaults to now()+ 24hs * @return bool */ function set_cache_flag($type, $name, $value, $expiry = NULL) { global $DB; $timemodified = time(); if ($expiry === NULL || $expiry < $timemodified) { $expiry = $timemodified + 24 * 60 * 60; } else { $expiry = (int) $expiry; } if ($value === NULL) { unset_cache_flag($type, $name); return true; } if ($f = $DB->get_record('cache_flags', array('name' => $name, 'flagtype' => $type))) { // this is a potentail problem in DEBUG_DEVELOPER if ($f->value == $value and $f->expiry == $expiry and $f->timemodified == $timemodified) { return true; //no need to update; helps rcache too } $f->value = $value; $f->expiry = $expiry; $f->timemodified = $timemodified; $DB->update_record('cache_flags', $f); } else { $f = new object(); $f->flagtype = $type; $f->name = $name; $f->value = $value; $f->expiry = $expiry; $f->timemodified = $timemodified; $DB->insert_record('cache_flags', $f); } return true; }