!C99Shell v. 2.6 Mod (06.03.2026)!

Software: Apache. PHP/7.2.34 

uname -a: Linux li456-155.members.linode.com 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01
UTC 2023 x86_64
 

uid=48(apache) gid=48(apache) groups=48(apache) 

Safe-mode: OFF (not secure)

/usr/share/phpMyAdmin/test/classes/plugin/auth/   drwxr-xr-x
Free 1.69 GB of 47.23 GB (3.57%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Bind    Proc.    FTP brute    Sec.    SQL    PHP-code    Self remove    Logout    


Viewing file:     PMA_AuthenticationCookie_test.php (29.91 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
 * tests for AuthenticationCookie class
 *
 * @package PhpMyAdmin-test
 */

$GLOBALS['PMA_Config'] = new PMA_Config();

require_once 
'libraries/plugins/auth/AuthenticationCookie.class.php';
require_once 
'libraries/Util.class.php';
require_once 
'libraries/Message.class.php';
require_once 
'libraries/Theme.class.php';
require_once 
'libraries/Config.class.php';
require_once 
'libraries/php-gettext/gettext.inc';
require_once 
'libraries/config.default.php';
require_once 
'libraries/Error_Handler.class.php';
require_once 
'libraries/Response.class.php';
require_once 
'libraries/js_escape.lib.php';
require_once 
'libraries/sanitizing.lib.php';
require_once 
'libraries/database_interface.inc.php';
require_once 
'libraries/select_lang.lib.php';

/**
 * tests for AuthenticationCookie class
 *
 * @package PhpMyAdmin-test
 */
class PMA_AuthenticationCookie_Test extends PHPUnit_Framework_TestCase
{
    
/**
     * @var AuthenticationCookie
     */
    
protected $object;

    
/**
     * Configures global environment.
     *
     * @return void
     */
    
function setup()
    {
        
$GLOBALS['PMA_Config']->enableBc();
        
$GLOBALS['server'] = 0;
        
$GLOBALS['available_languages'] = array(
            
"en" => array("English""US-ENGLISH"),
            
"ch" => array("Chinese""TW-Chinese")
        );
        
$GLOBALS['text_dir'] = 'ltr';
        
$GLOBALS['db'] = 'db';
        
$GLOBALS['table'] = 'table';
        
$this->object = new AuthenticationCookie();

        
$_SESSION['PMA_Theme'] = PMA_Theme::load('./themes/pmahomme');
        
$_SESSION['PMA_Theme'] = new PMA_Theme();
    }

    
/**
     * tearDown for test cases
     *
     * @return void
     */
    
public function tearDown()
    {
        unset(
$this->object);
    }

    
/**
     * Test for AuthenticationConfig::auth
     *
     * @return void
     * @group medium
     */
    
public function testAuth()
    {
        
$restoreInstance PMA_Response::getInstance();
        
// Case 1

        
$mockResponse $this->getMockBuilder('PMA_Response')
            ->
disableOriginalConstructor()
            ->
setMethods(array('isAjax''isSuccess''addJSON'))
            ->
getMock();

        
$mockResponse->expects($this->once())
            ->
method('isAjax')
            ->
with()
            ->
will($this->returnValue(true));

        
$mockResponse->expects($this->once())
            ->
method('isSuccess')
            ->
with(false);

        
$mockResponse->expects($this->once())
            ->
method('addJSON')
            ->
with(
                
'redirect_flag',
                
'1'
            
);

        
$attrInstance = new ReflectionProperty('PMA_Response''_instance');
        
$attrInstance->setAccessible(true);
        
$attrInstance->setValue($mockResponse);
        
$GLOBALS['conn_error'] = true;
        
$GLOBALS['cfg']['PmaAbsoluteUri'] = 'https://phpmyadmin.net/';
        
$this->assertTrue(
            
$this->object->auth()
        );

        
// Case 2

        
$mockResponse $this->getMockBuilder('PMA_Response')
            ->
disableOriginalConstructor()
            ->
setMethods(array('isAjax''getFooter''getHeader'))
            ->
getMock();

        
$mockResponse->expects($this->once())
            ->
method('isAjax')
            ->
with()
            ->
will($this->returnValue(false));

        
$_REQUEST['old_usr'] = '';
        
$GLOBALS['cfg']['LoginCookieRecall'] = true;
        
$GLOBALS['cfg']['blowfish_secret'] = 'secret';
        
$GLOBALS['PHP_AUTH_USER'] = 'pmauser';
        
$GLOBALS['pma_auth_server'] = 'localhost';

        
// mock footer
        
$mockFooter $this->getMockBuilder('PMA_Footer')
            ->
disableOriginalConstructor()
            ->
setMethods(array('setMinimal'))
            ->
getMock();

        
$mockFooter->expects($this->once())
            ->
method('setMinimal')
            ->
with();

        
// mock header

        
$mockHeader $this->getMockBuilder('PMA_Header')
            ->
disableOriginalConstructor()
            ->
setMethods(
                array(
                    
'setBodyId',
                    
'setTitle',
                    
'disableMenuAndConsole',
                    
'disableWarnings'
                
)
            )
            ->
getMock();

        
$mockHeader->expects($this->once())
            ->
method('setBodyId')
            ->
with('loginform');

        
$mockHeader->expects($this->once())
            ->
method('setTitle')
            ->
with('phpMyAdmin');

        
$mockHeader->expects($this->once())
            ->
method('disableMenuAndConsole')
            ->
with();

        
$mockHeader->expects($this->once())
            ->
method('disableWarnings')
            ->
with();

        
// set mocked headers and footers

        
$mockResponse->expects($this->once())
            ->
method('getFooter')
            ->
with()
            ->
will($this->returnValue($mockFooter));

        
$mockResponse->expects($this->once())
            ->
method('getHeader')
            ->
with()
            ->
will($this->returnValue($mockHeader));

        
$attrInstance = new ReflectionProperty('PMA_Response''_instance');
        
$attrInstance->setAccessible(true);
        
$attrInstance->setValue($mockResponse);

        
$GLOBALS['pmaThemeImage'] = 'test';
        
$GLOBALS['conn_error'] = true;
        
$GLOBALS['cfg']['Lang'] = 'en';
        
$GLOBALS['cfg']['AllowArbitraryServer'] = true;
        
$GLOBALS['cfg']['Servers'] = array(12);
        
$GLOBALS['cfg']['CaptchaLoginPrivateKey'] = '';
        
$GLOBALS['cfg']['CaptchaLoginPublicKey'] = '';
        
$GLOBALS['target'] = 'testTarget';
        
$GLOBALS['db'] = 'testDb';
        
$GLOBALS['table'] = 'testTable';

        
file_put_contents('testlogo_right.png''');

        
// mock error handler

        
$mockErrorHandler $this->getMockBuilder('PMA_Error_Handler')
            ->
disableOriginalConstructor()
            ->
setMethods(array('hasDisplayErrors''dispErrors'))
            ->
getMock();

        
$mockErrorHandler->expects($this->once())
            ->
method('hasDisplayErrors')
            ->
with()
            ->
will($this->returnValue(true));

        
$mockErrorHandler->expects($this->once())
            ->
method('dispErrors')
            ->
with();

        
$GLOBALS['error_handler'] = $mockErrorHandler;

        
ob_start();
        
$this->object->auth();
        
$result ob_get_clean();

        
// assertions

        
$this->assertContains(
            
'<img src="testlogo_right.png" id="imLogo"',
            
$result
        
);

        
$this->assertContains(
            
'<div class="error">',
            
$result
        
);

        
$this->assertContains(
            
'<form method="post" action="index.php" name="login_form" ' .
            
'class="disableAjax login hide js-show">',
            
$result
        
);

        
$this->assertContains(
            
'<input type="text" name="pma_servername" id="input_servername" ' .
            
'value="localhost"',
            
$result
        
);

        
$this->assertContains(
            
'<input type="text" name="pma_username" id="input_username" ' .
            
'value="pmauser" size="24" class="textfield"/>',
            
$result
        
);

        
$this->assertContains(
            
'<input type="password" name="pma_password" id="input_password" ' .
            
'value="" size="24" class="textfield" />',
            
$result
        
);

        
$this->assertContains(
            
'<select name="server" id="select_server" ' .
            
'onchange="document.forms[\'login_form\'].' .
            
'elements[\'pma_servername\'].value = \'\'" >',
            
$result
        
);

        
$this->assertContains(
            
'<input type="hidden" name="target" value="testTarget" />',
            
$result
        
);

        
$this->assertContains(
            
'<input type="hidden" name="db" value="testDb" />',
            
$result
        
);

        
$this->assertContains(
            
'<input type="hidden" name="table" value="testTable" />',
            
$result
        
);

        @
unlink('testlogo_right.png');

        
// case 3

        
$mockResponse $this->getMockBuilder('PMA_Response')
            ->
disableOriginalConstructor()
            ->
setMethods(array('isAjax''getFooter''getHeader'))
            ->
getMock();

        
$mockResponse->expects($this->once())
            ->
method('isAjax')
            ->
with()
            ->
will($this->returnValue(false));

        
$mockResponse->expects($this->once())
            ->
method('getFooter')
            ->
with()
            ->
will($this->returnValue(new PMA_Footer()));

        
$mockResponse->expects($this->once())
            ->
method('getHeader')
            ->
with()
            ->
will($this->returnValue(new PMA_Header()));

        
$_REQUEST['old_usr'] = '';
        
$GLOBALS['cfg']['LoginCookieRecall'] = false;

        
$attrInstance = new ReflectionProperty('PMA_Response''_instance');
        
$attrInstance->setAccessible(true);
        
$attrInstance->setValue($mockResponse);

        
$GLOBALS['pmaThemeImage'] = 'test';
        
$GLOBALS['cfg']['Lang'] = '';
        
$GLOBALS['cfg']['AllowArbitraryServer'] = false;
        
$GLOBALS['cfg']['Servers'] = array(1);
        
$GLOBALS['cfg']['CaptchaLoginPrivateKey'] = 'testprivkey';
        
$GLOBALS['cfg']['CaptchaLoginPublicKey'] = 'testpubkey';
        
$GLOBALS['server'] = 0;

        
$GLOBALS['error_handler'] = new PMA_Error_Handler;

        
ob_start();
        
$this->object->auth();
        
$result ob_get_clean();

        
// assertions

        
$this->assertContains(
            
'<img name="imLogo" id="imLogo" src="testpma_logo.png"',
            
$result
        
);

        
$this->assertContains(
            
'<select name="lang" class="autosubmit" lang="en" dir="ltr" ' .
            
'id="sel-lang">',
            
$result
        
);

        
$this->assertContains(
            
'<form method="post" action="index.php" name="login_form" ' .
            
'autocomplete="off" class="disableAjax login hide js-show">',
            
$result
        
);

        
$this->assertContains(
            
'<input type="hidden" name="server" value="0" />',
            
$result
        
);

        
$this->assertContains(
            
'<script src="https://www.google.com/recaptcha/api.js?hl=en"'
            
' async defer></script>',
            
$result
        
);

        
$this->assertContains(
            
'<div class="g-recaptcha" data-sitekey="testpubkey">',
            
$result
        
);

        
$attrInstance->setValue($restoreInstance);
    }

    
/**
     * Test for AuthenticationConfig::auth with headers
     *
     * @return void
     */
    
public function testAuthHeader()
    {
        if (!
defined('PMA_TEST_HEADERS')) {
            
$this->markTestSkipped(
                
'Cannot redefine constant/function - missing runkit extension'
            
);
        }

        
$restoreInstance PMA_Response::getInstance();

        
$mockResponse $this->getMockBuilder('PMA_Response')
            ->
disableOriginalConstructor()
            ->
setMethods(array('isAjax'))
            ->
getMock();

        
$mockResponse->expects($this->once())
            ->
method('isAjax')
            ->
with()
            ->
will($this->returnValue(false));

        
$attrInstance = new ReflectionProperty('PMA_Response''_instance');
        
$attrInstance->setAccessible(true);
        
$attrInstance->setValue($mockResponse);

        
$_REQUEST['old_usr'] = 'user1';
        
$GLOBALS['cfg']['Server']['LogoutURL'] = 'https://www.phpmyadmin.net/logout';

        
$this->assertTrue(
            
$this->object->auth()
        );

        
$this->assertContains(
            
'Location: https://www.phpmyadmin.net/logout?PHPSESSID=',
            
$GLOBALS['header'][0]
        );

        
$attrInstance->setValue($restoreInstance);
    }

    
/**
     * Test for AuthenticationConfig::authCheck
     *
     * @return void
     */
    
public function testAuthCheck()
    {
        
$defineAgain 'PMA_TEST_NO_DEFINE';

        if (
defined('PMA_CLEAR_COOKIES')) {
            if (! 
PMA_HAS_RUNKIT) {
                
$this->markTestSkipped(
                    
'Cannot redefine constant/function - missing runkit extension'
                
);
            } else {
                
$defineAgain PMA_CLEAR_COOKIES;
                
runkit_constant_remove('PMA_CLEAR_COOKIES');
            }
        }


        
// case 2

        
$GLOBALS['cfg']['CaptchaLoginPrivateKey'] = 'testprivkey';
        
$GLOBALS['cfg']['CaptchaLoginPublicKey'] = 'testpubkey';
        
$_POST["g-recaptcha-response"] = '';
        
$_REQUEST['pma_username'] = 'testPMAUser';

        
$this->assertFalse(
            
$this->object->authCheck()
        );

        
$this->assertEquals(
            
'Please enter correct captcha!',
            
$GLOBALS['conn_error']
        );

        
// case 4

        
$GLOBALS['cfg']['CaptchaLoginPrivateKey'] = '';
        
$GLOBALS['cfg']['CaptchaLoginPublicKey'] = '';
        
$_REQUEST['old_usr'] = 'pmaolduser';
        
$GLOBALS['cfg']['LoginCookieDeleteAll'] = true;
        
$GLOBALS['cfg']['Servers'] = array(1);

        
$_COOKIE['pmaAuth-0'] = 'test';

        
$this->object->authCheck();

        
$this->assertFalse(
            isset(
$_COOKIE['pmaAuth-0'])
        );

        
// case 5

        
$GLOBALS['cfg']['CaptchaLoginPrivateKey'] = '';
        
$GLOBALS['cfg']['CaptchaLoginPublicKey'] = '';
        
$_REQUEST['old_usr'] = 'pmaolduser';
        
$GLOBALS['cfg']['LoginCookieDeleteAll'] = false;
        
$GLOBALS['cfg']['Servers'] = array(1);
        
$GLOBALS['server'] = 1;

        
$_COOKIE['pmaAuth-1'] = 'test';

        
$this->object->authCheck();

        
$this->assertFalse(
            isset(
$_COOKIE['pmaAuth-1'])
        );

        
// case 6

        
$GLOBALS['cfg']['CaptchaLoginPrivateKey'] = '';
        
$GLOBALS['cfg']['CaptchaLoginPublicKey'] = '';
        
$_REQUEST['old_usr'] = '';
        
$_REQUEST['pma_username'] = 'testPMAUser';
        
$_REQUEST['pma_servername'] = 'testPMAServer';
        
$_REQUEST['pma_password'] = 'testPMAPSWD';
        
$GLOBALS['cfg']['AllowArbitraryServer'] = true;

        
$this->assertTrue(
            
$this->object->authCheck()
        );

        
$this->assertEquals(
            
'testPMAUser',
            
$GLOBALS['PHP_AUTH_USER']
        );

        
$this->assertEquals(
            
'testPMAPSWD',
            
$GLOBALS['PHP_AUTH_PW']
        );

        
$this->assertEquals(
            
'testPMAServer',
            
$GLOBALS['pma_auth_server']
        );

        
$this->assertFalse(
            isset(
$_COOKIE['pmaAuth-1'])
        );

        
// case 7

        
$_REQUEST['pma_username'] = '';
        
$GLOBALS['server'] = 1;
        
$_COOKIE['pmaUser-1'] = '';
        
$_COOKIE['pma_iv-1'] = base64_encode('testiv09testiv09');

        
$this->assertFalse(
            
$this->object->authCheck()
        );

        
// case 8

        
$GLOBALS['server'] = 1;
        
$_COOKIE['pmaUser-1'] = 'pmaUser1';
        
$_COOKIE['pma_iv-1'] = base64_encode('testiv09testiv09');
        
$_COOKIE['pmaAuth-1'] = '';
        
$GLOBALS['cfg']['blowfish_secret'] = 'secret';
        
$_SESSION['last_access_time'] = time() - 1000;
        
$GLOBALS['cfg']['LoginCookieValidity'] = 1440;

        
$this->assertFalse(
            
$this->object->authCheck()
        );

        if (
$defineAgain !== 'PMA_TEST_NO_DEFINE') {
            
define('PMA_CLEAR_COOKIES'$defineAgain);
        }
    }

    
/**
     * Test for AuthenticationConfig::authCheck with constant modifications
     *
     * @return void
     */
    
public function testAuthCheckWithConstants()
    {
        if (!
defined('PMA_CLEAR_COOKIES') && !PMA_HAS_RUNKIT) {
            
$this->markTestSkipped(
                
'Cannot redefine constant/function - missing runkit extension'
            
);
        }

        
$remove false;

        if (! 
defined('PMA_CLEAR_COOKIES')) {
            
define('PMA_CLEAR_COOKIES'true);
            
$remove true;
        }

        
$GLOBALS['cfg']['Servers'] = array(1);
        
$_COOKIE['pmaAuth-0'] = 1;
        
$_COOKIE['pmaUser-0'] = 1;

        
$this->assertFalse(
            
$this->object->authCheck()
        );

        
$this->assertFalse(
            isset(
$_COOKIE['pmaAuth-0'])
        );

        
$this->assertFalse(
            isset(
$_COOKIE['pmaUser-0'])
        );

        if (
$remove) {
            
runkit_constant_remove('PMA_CLEAR_COOKIES');
        }
    }

    
/**
     * Test for AuthenticationConfig::authCheck (mock blowfish functions reqd)
     *
     * @return void
     */
    
public function testAuthCheckDecryptUser()
    {
        
$GLOBALS['server'] = 1;
        
$_REQUEST['old_usr'] = '';
        
$_REQUEST['pma_username'] = '';
        
$_COOKIE['pmaUser-1'] = 'pmaUser1';
        
$_COOKIE['pma_iv-1'] = base64_encode('testiv09testiv09');
        
$GLOBALS['cfg']['blowfish_secret'] = 'secret';
        
$_SESSION['last_access_time'] = '';
        
$GLOBALS['cfg']['CaptchaLoginPrivateKey'] = '';
        
$GLOBALS['cfg']['CaptchaLoginPublicKey'] = '';

        
// mock for blowfish function
        
$this->object $this->getMockBuilder('AuthenticationCookie')
            ->
disableOriginalConstructor()
            ->
setMethods(array('cookieDecrypt'))
            ->
getMock();

        
$this->object->expects($this->once())
            ->
method('cookieDecrypt')
            ->
will($this->returnValue('testBF'));

        
$this->assertFalse(
            
$this->object->authCheck()
        );

        
$this->assertEquals(
            
'testBF',
            
$GLOBALS['PHP_AUTH_USER']
        );
    }

    
/**
     * Test for AuthenticationConfig::authCheck (mocking blowfish functions)
     *
     * @return void
     */
    
public function testAuthCheckDecryptPassword()
    {
        
$GLOBALS['server'] = 1;
        
$_REQUEST['old_usr'] = '';
        
$_REQUEST['pma_username'] = '';
        
$_COOKIE['pmaUser-1'] = 'pmaUser1';
        
$_COOKIE['pmaAuth-1'] = 'pmaAuth1';
        
$_COOKIE['pma_iv-1'] = base64_encode('testiv09testiv09');
        
$GLOBALS['cfg']['blowfish_secret'] = 'secret';
        
$GLOBALS['cfg']['CaptchaLoginPrivateKey'] = '';
        
$GLOBALS['cfg']['CaptchaLoginPublicKey'] = '';
        
$_SESSION['last_access_time'] = time() - 1000;
        
$GLOBALS['cfg']['LoginCookieValidity'] = 1440;

        
// mock for blowfish function
        
$this->object $this->getMockBuilder('AuthenticationCookie')
            ->
disableOriginalConstructor()
            ->
setMethods(array('cookieDecrypt'))
            ->
getMock();

        
$this->object->expects($this->at(1))
            ->
method('cookieDecrypt')
            ->
will($this->returnValue('{"password":""}'));

        
$this->assertTrue(
            
$this->object->authCheck()
        );

        
$this->assertTrue(
            
$GLOBALS['from_cookie']
        );

        
$this->assertEquals(
            
'',
            
$GLOBALS['PHP_AUTH_PW']
        );

    }

    
/**
     * Test for AuthenticationConfig::authCheck (mocking the object itself)
     *
     * @return void
     */
    
public function testAuthCheckAuthFails()
    {
        
$GLOBALS['server'] = 1;
        
$_REQUEST['old_usr'] = '';
        
$_REQUEST['pma_username'] = '';
        
$_COOKIE['pmaUser-1'] = 'pmaUser1';
        
$_COOKIE['pma_iv-1'] = base64_encode('testiv09testiv09');
        
$GLOBALS['cfg']['blowfish_secret'] = 'secret';
        
$_SESSION['last_access_time'] = 1;
        
$GLOBALS['cfg']['CaptchaLoginPrivateKey'] = '';
        
$GLOBALS['cfg']['CaptchaLoginPublicKey'] = '';
        
$GLOBALS['cfg']['LoginCookieValidity'] = 0;
        
$_SESSION['last_access_time'] = -1;
        
// mock for blowfish function
        
$this->object $this->getMockBuilder('AuthenticationCookie')
            ->
disableOriginalConstructor()
            ->
setMethods(array('authFails'))
            ->
getMock();

        
$this->object->expects($this->once())
            ->
method('authFails');

        
$this->assertFalse(
            
$this->object->authCheck()
        );

        
$this->assertTrue(
            
$GLOBALS['no_activity']
        );
    }

    
/**
     * Test for AuthenticationConfig::authSetUser
     *
     * @return void
     */
    
public function testAuthSetUser()
    {
        
$GLOBALS['PHP_AUTH_USER'] = 'pmaUser2';
        
$arr = array(
            
'host' => 'a',
            
'port' => 1,
            
'socket' => true,
            
'ssl' => true,
            
'connect_type' => 'port',
            
'user' => 'pmaUser2'
        
);

        
$GLOBALS['cfg']['Server'] = $arr;
        
$GLOBALS['cfg']['Server']['user'] = 'pmaUser';
        
$GLOBALS['cfg']['Servers'][1] = $arr;
        
$GLOBALS['cfg']['AllowArbitraryServer'] = true;
        
$GLOBALS['pma_auth_server'] = 'b 2';
        
$GLOBALS['PHP_AUTH_PW'] = $_SERVER['PHP_AUTH_PW'] = 'testPW';
        
$GLOBALS['server'] = 2;
        
$GLOBALS['cfg']['LoginCookieStore'] = true;
        
$GLOBALS['from_cookie'] = true;

        
$this->object->authSetUser();

        
$this->assertFalse(
            isset(
$GLOBALS['PHP_AUTH_PW'])
        );

        
$this->assertFalse(
            isset(
$_SERVER['PHP_AUTH_PW'])
        );

        
$this->object->storeUserCredentials();

        
$this->assertTrue(
            isset(
$_COOKIE['pmaUser-1'])
        );

        
$this->assertTrue(
            isset(
$_COOKIE['pmaAuth-1'])
        );

        
$arr['password'] = 'testPW';
        
$arr['host'] = 'b';
        
$arr['port'] = '2';
        
$this->assertEquals(
            
$arr,
            
$GLOBALS['cfg']['Server']
        );

    }

    
/**
     * Test for AuthenticationConfig::authSetUser (check for headers redirect)
     *
     * @return void
     */
    
public function testAuthSetUserWithHeaders()
    {
        if (!
defined('PMA_TEST_HEADERS')) {
            
$this->markTestSkipped(
                
'Cannot redefine constant/function - missing runkit extension'
            
);
        }

        
$GLOBALS['PHP_AUTH_USER'] = 'pmaUser2';
        
$arr = array(
            
'host' => 'a',
            
'port' => 1,
            
'socket' => true,
            
'ssl' => true,
            
'connect_type' => 'port',
            
'user' => 'pmaUser2'
        
);

        
$GLOBALS['cfg']['Server'] = $arr;
        
$GLOBALS['cfg']['Server']['host'] = 'b';
        
$GLOBALS['cfg']['Server']['user'] = 'pmaUser';
        
$GLOBALS['cfg']['Servers'][1] = $arr;
        
$GLOBALS['cfg']['AllowArbitraryServer'] = true;
        
$GLOBALS['pma_auth_server'] = 'b 2';
        
$GLOBALS['PHP_AUTH_PW'] = $_SERVER['PHP_AUTH_PW'] = 'testPW';
        
$GLOBALS['server'] = 2;
        
$GLOBALS['cfg']['LoginCookieStore'] = true;
        
$GLOBALS['from_cookie'] = false;
        
$GLOBALS['cfg']['PmaAbsoluteUri'] = 'http://phpmyadmin.net/';
        
$GLOBALS['collation_connection'] = 'utf-8';

        
$restoreInstance PMA_Response::getInstance();

        
$mockResponse $this->getMockBuilder('PMA_Response')
            ->
disableOriginalConstructor()
            ->
setMethods(array('disable'))
            ->
getMock();

        
$mockResponse->expects($this->at(0))
            ->
method('disable');

        
$attrInstance = new ReflectionProperty('PMA_Response''_instance');
        
$attrInstance->setAccessible(true);
        
$attrInstance->setValue($mockResponse);

        
$this->object->authSetUser();
        
$this->object->storeUserCredentials();

        
$this->assertTrue(
            isset(
$_COOKIE['pmaAuth-2'])
        );

        
// target can be "phpunit" or "ide-phpunit.php",
        // depending on testing environment
        
$this->assertStringStartsWith(
            
'Location: http://phpmyadmin.net/index.php?',
            
$GLOBALS['header'][0]
        );
        
$this->assertContains(
            
'&target=',
            
$GLOBALS['header'][0]
        );
        
$this->assertContains(
            
'&server=2&lang=en&collation_connection=utf-8&token=token&PHPSESSID=',
            
$GLOBALS['header'][0]
        );

        
$attrInstance->setValue($restoreInstance);
    }

    
/**
     * Test for AuthenticationConfig::authFails
     *
     * @return void
     */
    
public function testAuthFails()
    {
        if (!
defined('PMA_TEST_HEADERS')) {
            
$this->markTestSkipped(
                
'Cannot redefine constant/function - missing runkit extension'
            
);
        }

        
$this->object $this->getMockBuilder('AuthenticationCookie')
            ->
disableOriginalConstructor()
            ->
setMethods(array('auth'))
            ->
getMock();

        
$this->object->expects($this->exactly(5))
            ->
method('auth');

        
$GLOBALS['server'] = 2;
        
$_COOKIE['pmaAuth-2'] = 'pass';

        
// case 1

        
$GLOBALS['login_without_password_is_forbidden'] = '1';

        
$this->object->authFails();

        
$this->assertEquals(
            
$GLOBALS['conn_error'],
            
'Login without a password is forbidden by configuration'
            
' (see AllowNoPassword)'
        
);

        
$this->assertEquals(
            
$GLOBALS['header'],
            array(
                
'Cache-Control: no-store, no-cache, must-revalidate',
                
'Pragma: no-cache'
            
)
        );

        
// case 2

        
$GLOBALS['login_without_password_is_forbidden'] = '';
        
$GLOBALS['allowDeny_forbidden'] = '1';

        
$this->object->authFails();

        
$this->assertEquals(
            
$GLOBALS['conn_error'],
            
'Access denied!'
        
);

        
// case 3

        
$GLOBALS['allowDeny_forbidden'] = '';
        
$GLOBALS['no_activity'] = '1';
        
$GLOBALS['cfg']['LoginCookieValidity'] = 10;

        
$this->object->authFails();

        
$this->assertEquals(
            
$GLOBALS['conn_error'],
            
'No activity within 10 seconds; please log in again.'
        
);

        
// case 4

        
$dbi $this->getMockBuilder('PMA_DatabaseInterface')
            ->
disableOriginalConstructor()
            ->
getMock();

        
$dbi->expects($this->at(0))
            ->
method('getError')
            ->
will($this->returnValue(false));

        
$dbi->expects($this->at(1))
            ->
method('getError')
            ->
will($this->returnValue(false));

        
$GLOBALS['dbi'] = $dbi;
        
$GLOBALS['no_activity'] = '';
        
$GLOBALS['errno'] = 42;

        
$this->object->authFails();

        
$this->assertEquals(
            
$GLOBALS['conn_error'],
            
'#42 Cannot log in to the MySQL server'
        
);
        
// case 5
        
unset($GLOBALS['errno']);

        
$this->object->authFails();

        
$this->assertEquals(
            
$GLOBALS['conn_error'],
            
'Cannot log in to the MySQL server'
        
);
    }

    
/**
     * Test for AuthenticationConfig::_getEncryptionSecret
     *
     * @return void
     */
    
public function testGetEncryptionSecret()
    {
        
$method = new \ReflectionMethod(
            
'AuthenticationCookie',
            
'_getEncryptionSecret'
        
);
        
$method->setAccessible(true);

        
// case 1

        
$GLOBALS['cfg']['blowfish_secret'] = '';
        
$_SESSION['encryption_key'] = '';

        
$result $method->invoke($this->objectnull);

        
$this->assertEquals(
            
$result,
            
$_SESSION['encryption_key']
        );

        
$this->assertEquals(
            
32,
            
strlen($result)
        );

        
// case 2

        
$GLOBALS['cfg']['blowfish_secret'] = 'notEmpty';

        
$result $method->invoke($this->objectnull);

        
$this->assertEquals(
            
'notEmpty',
            
$result
        
);
    }

    
/**
     * Test for AuthenticationConfig::cookieEncrypt
     *
     * @return void
     */
    
public function testCookieEncrypt()
    {
        
$this->object->setIV('testiv09testiv09');
        
// works with the openssl extension active or inactive
        
$this->assertEquals(
            
'{"iv":"dGVzdGl2MDl0ZXN0aXYwOQ==","mac":"34367a80e4276906637b5eaecf8c3931547aae68","payload":"+coP\/up\/ZBTBwbiEpCUVXQ=="}',
            
$this->object->cookieEncrypt('data123''sec321')
        );
    }

    
/**
     * Test for AuthenticationConfig::cookieDecrypt
     *
     * @return void
     */
    
public function testCookieDecrypt()
    {
        
// works with the openssl extension active or inactive
        
$this->assertEquals(
            
'data123',
            
$this->object->cookieDecrypt(
                
'{"iv":"dGVzdGl2MDl0ZXN0aXYwOQ==","mac":"34367a80e4276906637b5eaecf8c3931547aae68","payload":"+coP\/up\/ZBTBwbiEpCUVXQ=="}',
                
'sec321'
            
)
        );
    }

    
/**
     * Test for PMA\libraries\plugins\auth\AuthenticationConfig::cookieDecrypt
     *
     * @return void
     */
    
public function testCookieDecryptInvalid()
    {
        
// works with the openssl extension active or inactive
        
$this->assertEquals(
            
false,
            
$this->object->cookieDecrypt(
                
'{"iv":0,"mac":0,"payload":0}',
                
'sec321'
            
)
        );
    }

    
/**
     * Test for secret splitting using getAESSecret
     *
     * @return void
     *
     * @dataProvider secretsProvider
     */
    
public function testMACSecretSplit($secret$mac$aes)
    {
        
$this->assertEquals(
            
$mac,
            
$this->object->getMACSecret($secret)
        );
    }

    
/**
     * Test for secret splitting using getMACSecret and getAESSecret
     *
     * @return void
     *
     * @dataProvider secretsProvider
     */
    
public function testAESSecretSplit($secret$mac$aes)
    {
        
$this->assertEquals(
            
$aes,
            
$this->object->getAESSecret($secret)
        );
    }

    
/**
     * Data provider for secrets splitting.
     *
     * @return array
     */
    
public function secretsProvider()
    {
        return array(
            
// Optimal case
            
array(
                
'1234567890123456abcdefghijklmnop',
                
'1234567890123456',
                
'abcdefghijklmnop',
            ),
            
// Overlapping secret
            
array(
                
'12345678901234567',
                
'1234567890123456',
                
'2345678901234567',
            ),
            
// Short secret
            
array(
                
'1234567890123456',
                
'1234567890123451',
                
'2345678901234562',
            ),
            
// Really short secret
            
array(
                
'12',
                
'1111111111111111',
                
'2222222222222222',
            ),
            
// Too short secret
            
array(
                
'1',
                
'1111111111111111',
                
'1111111111111111',
            ),
        );
    }
}
?>

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

c99shell Mod — c99shell.com © 2026
Generation time: 0.032