[Tͪ#n$;<:a4sX[;R>njC"ȾRAIUS$AiUӌ*drz&}@rjM3%ȓSCm,W`*հy8zNi80.#nimT@P/zh@דq`2Z0[TuzTd-P_?>Os9˓ELEXaш53bJ`Nf?iwT/u\<hEf`O֫pj109y+99#:wz~O?oH/\Lˡ.U-0ô6^>J[ujUcc",}W<vvb8vm]gn#8s	sQ݊"Ͳ*I>1*cMv:y:,Rf,Vo?T!敦2e(v<|N&5=)-j6Vƫv{}TP;Fn䱮Cs	s+qL~C.8E<Xc"q'LhQd3AJ^r|?l̻_b1OtnQyM\ѾqhŸJݜ_E]6b%C^?sOEG?NTy'LJAc%梑	hٽlvp7~,U&B8Myqm?oƞI`NOgHMQb̞4j{C78A?/rIF=Cꚝ`FTZ<6"~eJbC_`0y3:p\;gaIrBAdhrj/̞IV'_=Ϟ@'{77e!TlL[:-,\Hdf|%!Ǵ4J)V:JqA2z.H=]:bnBȥIwϱweu1	
-
wlGٰ*8EX÷'PFYCT	l+̡-v՝d2҅vX24ՂY9x!,d!FW;{yvȠHma~fEJkH}baR9h5Z>X]Xc\~<K}aL;23ڔo G9X=uk|*93"}cP/MV7pmørt!PǝH?I2ܭu[qz7\8?	kn\Mߦ\iZ9xB4A5J{=XDRfċhƋ˧fݔL<¡JI1'Mq'<Fv;sCw/l4,I0w٘&[ac9ACXEmMXXMeq@BCjIgSf#xWV+I'	<C6|ӄyKb	=F1DVV,ŌZX@Ølo.+6{ߓjIPlejʫ,n?xmE0uvܞ`ikIecخ
+-3ͻlK(*/S-N5KYi=[k-7FdHdM!r^ÊN58-L(Ne3į/Y@w}yA
P&ְmJ,}Aafed1E|XapZ҅qtM hkZ.D]I;	6m^(J֯Qi#w*no32(^6(m<n4P1
!;l`|Fo$o2G
}BJJM޹ڒxyMR
,<Q ${{@38m{	k 3J ( ENҷFBh.2s/fF{ύ{L_
ԔźKEHV(/JgmϷ2G;ZSshi,~O("	׳ڬZV 5<!!m']ؔ:5œsSO|RT\XDx:6ӼA`H>RXNPI!(jwMX[.F:jg_;"Jyխ&qyё_!ǟvԬAw= GƤ^cM:o59SeG>'^3Nᾣ1#Ɏz^EoDE4S3<]鱻(ՊPOgC-=6db/(S{؆\'4R20O)0n띮k'FQ-C	*IP KG>1trUR@l*S>vi(qGRs
@ɟSjRH-nIr<$:Pl^<>w5 cFwWo!nfWR"GpNrL 1X	kE	k)yif4fn1N=Pb[' }$7Q_䅎Qq#k27_!3cq.<+Qɛql{ϓ;:&)BM6ݚre;wMl[(s 4b0xWSUU8vqawz剄Wx
Ro5Gcw-	*ۧPoq-g˦Jxy<rT5(4,w2WofƦv4/KL g:_si	PpCVrwGi(PCzb- MttU|'5w&jUv3)x11	:bf1I:t*k#ֲFA{`'B:KXW}0ψ/2|#in,>p? ^|t}>{2#|1G5]xI\bZ# "kFQ =sӄv`#wԜsJ*Czb- Mg*h݌؅ћY^{3vGD K1 1WrR\_E2+NgܑUŜ/">&3PL&`f@143ǭ/oFNHzuD.!M-Iٱ`ٱ)"_ǻ7ۍm_6av{sRCI;{ECLsc.8kA*K&qQ/k2
c46HYz;ܑUy(w@9
_Pxx8#5V'TyA(F=``.)@?%:ev"5Bzr֊bGXو`q"o>ݤHnFӡ 
p~K5-2E#8͑[݀&2թ_Tb)Z/`6g
`[s#w8TEQdZ>Fe$OpU+rK,1Q- 21sqv pUd#DDY~?c~{C(f9 j9VR_+IR28}'TyA(F=``.)@?%:/؏@? GHʷiD8 ENҷFBh~w!Nenav{sRCI;{D,W f9T`[s#w8TEQdZ>Fe$Op[Se;ZZ00佒=Laq=1sR21D{Q(I4,v.)@?%:ftijN̔`qEy7+NS[DDF$L.yg)Z^dS36x_RV`}uo[ded 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 */
            session_name($old_session);
            if (!empty($old_id)) {
                session_id($old_id);
            }
            if (!defined('TESTSUITE')) {
                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.
             */
            PMA\libraries\Util::clearUserCache();
        }

        // Returns whether we get authentication settings or not
        if (empty($PHP_AUTH_USER)) {
            unset($_SESSION['LAST_SIGNON_URL']);

            return false;
        } else {
            $_SESSION['LAST_SIGNON_URL'] = $GLOBALS['cfg']['Server']['SignonURL'];

            return true;
        }
    }

    /**
     * Set the user and password after last checkings if required
     *
     * @global  array  $cfg                   the valid servers settings
     * @global  string $PHP_AUTH_USER         the current username
     * @global  string $PHP_AUTH_PW           the current password
     *
     * @return boolean   always true
     */
    public function authSetUser()
    {
        global $cfg;
        global $PHP_AUTH_USER, $PHP_AUTH_PW;

        $cfg['Server']['user'] = $PHP_AUTH_USER;
        $cfg['Server']['password'] = $PHP_AUTH_PW;

        return true;
    }

    /**
     * User is not allowed to login to MySQL -> authentication failed
     *
     * @return boolean   always true (no return indeed)
     */
    public function authFails()
    {
        /* Session name */
        $session_name = $GLOBALS['cfg']['Server']['SignonSession'];

        /* Does session exist? */
        if (isset($_COOKIE[$session_name])) {
            /* End current session */
            if (!defined('TESTSUITE')) {
                session_write_close();
            }

            /* Load single signon session */
            session_name($session_name);
            session_id($_COOKIE[$session_name]);
            if (!defined('TESTSUITE')) {
                session_start();
            }

            /* Set error message */
            $_SESSION['PMA_single_signon_error_message'] = $this->getErrorMessage();
        }
        $this->auth();
    }

    /**
     * Returns URL for login form.
     *
     * @return string
     */
    public function getLoginFormURL()
    {
        return $GLOBALS['cfg']['Server']['SignonURL'];
    }
}
