Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
583e287b21
@ -838,6 +838,8 @@ class Config
|
||||
|
||||
$this->settings = array_replace_recursive($this->settings, $cfg);
|
||||
|
||||
$this->checkServers();
|
||||
|
||||
// Handling of the collation must be done after merging of $cfg
|
||||
// (from config.inc.php) so that $cfg['DefaultConnectionCollation']
|
||||
// can have an effect.
|
||||
@ -1800,6 +1802,103 @@ class Config
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Selects server based on request parameters.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function selectServer() {
|
||||
$server = 0;
|
||||
$request = empty($_REQUEST['server']) ? 0 : $_REQUEST['server'];
|
||||
|
||||
/**
|
||||
* Lookup server by name
|
||||
* (see FAQ 4.8)
|
||||
*/
|
||||
if (! is_numeric($request)) {
|
||||
foreach ($this->settings['Servers'] as $i => $server) {
|
||||
$verboseToLower = mb_strtolower($server['verbose']);
|
||||
$serverToLower = mb_strtolower($request);
|
||||
if ($server['host'] == $request
|
||||
|| $server['verbose'] == $request
|
||||
|| $verboseToLower == $serverToLower
|
||||
|| md5($verboseToLower) === $serverToLower
|
||||
) {
|
||||
$request = $i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (is_string($request)) {
|
||||
$request = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* If no server is selected, make sure that $this->settings['Server'] is empty (so
|
||||
* that nothing will work), and skip server authentication.
|
||||
* We do NOT exit here, but continue on without logging into any server.
|
||||
* This way, the welcome page will still come up (with no server info) and
|
||||
* present a choice of servers in the case that there are multiple servers
|
||||
* and '$this->settings['ServerDefault'] = 0' is set.
|
||||
*/
|
||||
|
||||
if (is_numeric($request) && ! empty($request) && ! empty($this->settings['Servers'][$request])) {
|
||||
$server = $request;
|
||||
$this->settings['Server'] = $this->settings['Servers'][$server];
|
||||
} else {
|
||||
if (!empty($this->settings['Servers'][$this->settings['ServerDefault']])) {
|
||||
$server = $this->settings['ServerDefault'];
|
||||
$this->settings['Server'] = $this->settings['Servers'][$server];
|
||||
} else {
|
||||
$server = 0;
|
||||
$this->settings['Server'] = array();
|
||||
}
|
||||
}
|
||||
|
||||
return $server;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether Servers configuration is valid and possibly apply fixups.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function checkServers() {
|
||||
// Do we have some server?
|
||||
if (! isset($this->settings['Servers']) || count($this->settings['Servers']) == 0) {
|
||||
// No server => create one with defaults
|
||||
$this->settings['Servers'] = array(1 => $this->default_server);
|
||||
} else {
|
||||
// We have server(s) => apply default configuration
|
||||
$new_servers = array();
|
||||
|
||||
foreach ($this->settings['Servers'] as $server_index => $each_server) {
|
||||
|
||||
// Detect wrong configuration
|
||||
if (!is_int($server_index) || $server_index < 1) {
|
||||
trigger_error(
|
||||
sprintf(__('Invalid server index: %s'), $server_index),
|
||||
E_USER_ERROR
|
||||
);
|
||||
}
|
||||
|
||||
$each_server = array_merge($this->default_server, $each_server);
|
||||
|
||||
// Final solution to bug #582890
|
||||
// If we are using a socket connection
|
||||
// and there is nothing in the verbose server name
|
||||
// or the host field, then generate a name for the server
|
||||
// in the form of "Server 2", localized of course!
|
||||
if (empty($each_server['host']) && empty($each_server['verbose'])) {
|
||||
$each_server['verbose'] = sprintf(__('Server %d'), $server_index);
|
||||
}
|
||||
|
||||
$new_servers[$server_index] = $each_server;
|
||||
}
|
||||
$this->settings['Servers'] = $new_servers;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!defined('TESTSUITE')) {
|
||||
|
||||
@ -210,12 +210,6 @@ if (isset($_POST['usesubform']) && ! defined('PMA_MINIMUM_COMMON')) {
|
||||
*/
|
||||
$GLOBALS['PMA_Config'] = new Config(CONFIG_FILE);
|
||||
|
||||
/**
|
||||
* BC - enable backward compatibility
|
||||
* exports all configuration settings into $GLOBALS ($GLOBALS['cfg'])
|
||||
*/
|
||||
$GLOBALS['PMA_Config']->enableBc();
|
||||
|
||||
/**
|
||||
* clean cookies on upgrade
|
||||
* when changing something related to PMA cookies, increment the cookie version
|
||||
@ -451,107 +445,15 @@ Core::checkConfiguration();
|
||||
* current server
|
||||
* @global integer $GLOBALS['server']
|
||||
*/
|
||||
$GLOBALS['server'] = 0;
|
||||
|
||||
/**
|
||||
* Servers array fixups.
|
||||
* $default_server comes from PhpMyAdmin\Config::enableBc()
|
||||
* @todo merge into PhpMyAdmin\Config
|
||||
*/
|
||||
// Do we have some server?
|
||||
if (! isset($cfg['Servers']) || count($cfg['Servers']) == 0) {
|
||||
// No server => create one with defaults
|
||||
$cfg['Servers'] = array(1 => $default_server);
|
||||
} else {
|
||||
// We have server(s) => apply default configuration
|
||||
$new_servers = array();
|
||||
|
||||
foreach ($cfg['Servers'] as $server_index => $each_server) {
|
||||
|
||||
// Detect wrong configuration
|
||||
if (!is_int($server_index) || $server_index < 1) {
|
||||
trigger_error(
|
||||
sprintf(__('Invalid server index: %s'), $server_index),
|
||||
E_USER_ERROR
|
||||
);
|
||||
}
|
||||
|
||||
$each_server = array_merge($default_server, $each_server);
|
||||
|
||||
// Final solution to bug #582890
|
||||
// If we are using a socket connection
|
||||
// and there is nothing in the verbose server name
|
||||
// or the host field, then generate a name for the server
|
||||
// in the form of "Server 2", localized of course!
|
||||
if (empty($each_server['host']) && empty($each_server['verbose'])) {
|
||||
$each_server['verbose'] = sprintf(__('Server %d'), $server_index);
|
||||
}
|
||||
|
||||
$new_servers[$server_index] = $each_server;
|
||||
}
|
||||
$cfg['Servers'] = $new_servers;
|
||||
unset($new_servers, $server_index, $each_server);
|
||||
}
|
||||
|
||||
// Cleanup
|
||||
unset($default_server);
|
||||
|
||||
|
||||
if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
/**
|
||||
* Lookup server by name
|
||||
* (see FAQ 4.8)
|
||||
*/
|
||||
if (! empty($_REQUEST['server'])
|
||||
&& is_string($_REQUEST['server'])
|
||||
&& ! is_numeric($_REQUEST['server'])
|
||||
) {
|
||||
foreach ($cfg['Servers'] as $i => $server) {
|
||||
$verboseToLower = mb_strtolower($server['verbose']);
|
||||
$serverToLower = mb_strtolower($_REQUEST['server']);
|
||||
if ($server['host'] == $_REQUEST['server']
|
||||
|| $server['verbose'] == $_REQUEST['server']
|
||||
|| $verboseToLower == $serverToLower
|
||||
|| md5($verboseToLower) === $serverToLower
|
||||
) {
|
||||
$_REQUEST['server'] = $i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (is_string($_REQUEST['server'])) {
|
||||
unset($_REQUEST['server']);
|
||||
}
|
||||
unset($i);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* If no server is selected, make sure that $cfg['Server'] is empty (so
|
||||
* that nothing will work), and skip server authentication.
|
||||
* We do NOT exit here, but continue on without logging into any server.
|
||||
* This way, the welcome page will still come up (with no server info) and
|
||||
* present a choice of servers in the case that there are multiple servers
|
||||
* and '$cfg['ServerDefault'] = 0' is set.
|
||||
*/
|
||||
|
||||
if (isset($_REQUEST['server'])
|
||||
&& (is_string($_REQUEST['server']) || is_numeric($_REQUEST['server']))
|
||||
&& ! empty($_REQUEST['server'])
|
||||
&& ! empty($cfg['Servers'][$_REQUEST['server']])
|
||||
) {
|
||||
$GLOBALS['server'] = $_REQUEST['server'];
|
||||
$cfg['Server'] = $cfg['Servers'][$GLOBALS['server']];
|
||||
} else {
|
||||
if (!empty($cfg['Servers'][$cfg['ServerDefault']])) {
|
||||
$GLOBALS['server'] = $cfg['ServerDefault'];
|
||||
$cfg['Server'] = $cfg['Servers'][$GLOBALS['server']];
|
||||
} else {
|
||||
$GLOBALS['server'] = 0;
|
||||
$cfg['Server'] = array();
|
||||
}
|
||||
}
|
||||
$GLOBALS['server'] = $GLOBALS['PMA_Config']->selectServer();
|
||||
$GLOBALS['url_params']['server'] = $GLOBALS['server'];
|
||||
|
||||
/**
|
||||
* BC - enable backward compatibility
|
||||
* exports all configuration settings into $GLOBALS ($GLOBALS['cfg'])
|
||||
*/
|
||||
$GLOBALS['PMA_Config']->enableBc();
|
||||
|
||||
/******************************************************************************/
|
||||
/* setup themes LABEL_theme_setup */
|
||||
|
||||
|
||||
@ -930,4 +930,117 @@ class ConfigTest extends PmaTestCase
|
||||
$this->object->isGitRevision()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for checkServers
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider serverSettingsProvider
|
||||
*/
|
||||
public function testCheckServers($settings, $expected, $error = false)
|
||||
{
|
||||
if ($error) {
|
||||
$this->setExpectedException('PHPUnit_Framework_Error');
|
||||
}
|
||||
|
||||
$this->object->settings['Servers'] = $settings;
|
||||
$this->object->checkServers();
|
||||
if (is_null($expected)) {
|
||||
$expected = $this->object->default_server;
|
||||
} else {
|
||||
$expected = array_merge($this->object->default_server, $expected);
|
||||
}
|
||||
$this->assertEquals($expected, $this->object->settings['Servers'][1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for checkServers test
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function serverSettingsProvider()
|
||||
{
|
||||
return [
|
||||
'empty' => [
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'only_host' => [
|
||||
[1 => ['host' => '127.0.0.1']],
|
||||
['host' => '127.0.0.1'],
|
||||
],
|
||||
'empty_host' => [
|
||||
[1 => ['host' => '']],
|
||||
['verbose' => 'Server 1', 'host' => ''],
|
||||
],
|
||||
'invalid' => [
|
||||
['invalid' => ['host' => '127.0.0.1']],
|
||||
['host' => '127.0.0.1'],
|
||||
true
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for selectServer
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider selectServerProvider
|
||||
* @depends testCheckServers
|
||||
*/
|
||||
public function testSelectServer($settings, $request, $expected)
|
||||
{
|
||||
$this->object->settings['Servers'] = $settings;
|
||||
$this->object->checkServers();
|
||||
$_REQUEST['server'] = $request;
|
||||
$this->assertEquals($expected, $this->object->selectServer());
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for selectServer test
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function selectServerProvider()
|
||||
{
|
||||
return [
|
||||
'zero' => [
|
||||
[],
|
||||
'0',
|
||||
1,
|
||||
],
|
||||
'number' => [
|
||||
[1 => []],
|
||||
'1',
|
||||
1,
|
||||
],
|
||||
'host' => [
|
||||
[2 => ['host' => '127.0.0.1']],
|
||||
'127.0.0.1',
|
||||
2,
|
||||
],
|
||||
'verbose' => [
|
||||
[1 => ['verbose' => 'Server 1', 'host' => '']],
|
||||
'Server 1',
|
||||
1
|
||||
],
|
||||
'md5' => [
|
||||
[66 => ['verbose' => 'Server 1', 'host' => '']],
|
||||
'753f173bd4ac8a45eae0fe9a4fbe0fc0',
|
||||
66
|
||||
],
|
||||
'nonexisting_string' => [
|
||||
[1 => []],
|
||||
'invalid',
|
||||
1,
|
||||
],
|
||||
'nonexisting' => [
|
||||
[1 => []],
|
||||
'100',
|
||||
1,
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user