user, $this->password) = get_login_credentials($GLOBALS['cfg']['Server']['user']); } elseif (isset($_COOKIE[$session_name])) { /* Does session exist? */ /* End current session */ $old_session = session_name(); $old_id = session_id(); $old_cookie_params = session_get_cookie_params(); if (!defined('TESTSUITE')) { session_write_close(); } /* Sanitize cookie params */ $defaultCookieParams = function($key){ switch ($key) { case 'lifetime': return 0; case 'path': return '/'; case 'domain': return ''; case 'secure': return false; case 'httponly': return false; } return null; }; foreach (array('lifetime', 'path', 'domain', 'secure', 'httponly') as $key) { if (!isset($session_cookie_params[$key])) $session_cookie_params[$key] = $defaultCookieParams($key); } /* Load single signon session */ if (!defined('TESTSUITE')) { session_set_cookie_params($session_cookie_params['lifetime'], $session_cookie_params['path'], $session_cookie_params['domain'], $session_cookie_params['secure'], $session_cookie_params['httponly']); session_name($session_name); session_id($_COOKIE[$session_name]); session_start(); } /* Clear error message */ unset($_SESSION['PMA_single_signon_error_message']); /* Grab credentials if they exist */ if (isset($_SESSION['PMA_single_signon_user'])) { $this->user = $_SESSION['PMA_single_signon_user']; } if (isset($_SESSION['PMA_single_signon_password'])) { $this->password = $_SESSION['PMA_single_signon_password']; } if (isset($_SESSION['PMA_single_signon_host'])) { $single_signon_host = $_SESSION['PMA_single_signon_host']; } if (isset($_SESSION['PMA_single_signon_port'])) { $single_signon_port = $_SESSION['PMA_single_signon_port']; } if (isset($_SESSION['PMA_single_signon_cfgupdate'])) { $single_signon_cfgupdate = $_SESSION['PMA_single_signon_cfgupdate']; } /* Also get token as it is needed to access subpages */ if (isset($_SESSION['PMA_single_signon_token'])) { /* No need to care about token on logout */ $pma_token = $_SESSION['PMA_single_signon_token']; } /* End single signon session */ if (!defined('TESTSUITE')) { session_write_close(); } /* Restart phpMyAdmin session */ if (!defined('TESTSUITE')) { session_set_cookie_params($old_cookie_params['lifetime'], $old_cookie_params['path'], $old_cookie_params['domain'], $old_cookie_params['secure'], $old_cookie_params['httponly']); session_name($old_session); if (!empty($old_id)) { session_id($old_id); } session_start(); } /* Set the single signon host */ $GLOBALS['cfg']['Server']['host'] = $single_signon_host; /* Set the single signon port */ $GLOBALS['cfg']['Server']['port'] = $single_signon_port; /* Configuration update */ $GLOBALS['cfg']['Server'] = array_merge( $GLOBALS['cfg']['Server'], $single_signon_cfgupdate ); /* Restore our token */ if (!empty($pma_token)) { $_SESSION[' PMA_token '] = $pma_token; } /** * Clear user cache. */ Util::clearUserCache(); } // Returns whether we get authentication settings or not if (empty($this->user)) { unset($_SESSION['LAST_SIGNON_URL']); return false; } $_SESSION['LAST_SIGNON_URL'] = $GLOBALS['cfg']['Server']['SignonURL']; return true; } /** * User is not allowed to login to MySQL -> authentication failed * * @param string $failure String describing why authentication has failed * * @return void */ public function showFailure($failure) { parent::showFailure($failure); /* Session name */ $session_name = $GLOBALS['cfg']['Server']['SignonSession']; /* Does session exist? */ if (isset($_COOKIE[$session_name])) { if (!defined('TESTSUITE')) { /* End current session */ session_write_close(); /* Load single signon session */ session_name($session_name); session_id($_COOKIE[$session_name]); session_start(); } /* Set error message */ $_SESSION['PMA_single_signon_error_message'] = $this->getErrorMessage($failure); } $this->showLoginForm(); } /** * Returns URL for login form. * * @return string */ public function getLoginFormURL() { return $GLOBALS['cfg']['Server']['SignonURL']; } }