Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpmyadmin/phpmyadmin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaurício Meneghini Fauth <mauricio@fauth.dev>2022-08-30 00:19:38 +0300
committerMaurício Meneghini Fauth <mauricio@fauth.dev>2022-08-30 00:19:38 +0300
commitd3a267fdfc6aa4b113d0052c3340867776a75aab (patch)
tree45e01d9e7d8db47c8240feabc97d3a74a267e589 /libraries/classes
parent183f1930841d8daf6b47b6f799e54e21a9b3f755 (diff)
Refactor DbiMysqli::connect to use Server value object
Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
Diffstat (limited to 'libraries/classes')
-rw-r--r--libraries/classes/Config/Settings/Server.php11
-rw-r--r--libraries/classes/DatabaseInterface.php7
-rw-r--r--libraries/classes/Dbal/DbiExtension.php16
-rw-r--r--libraries/classes/Dbal/DbiMysqli.php68
4 files changed, 51 insertions, 51 deletions
diff --git a/libraries/classes/Config/Settings/Server.php b/libraries/classes/Config/Settings/Server.php
index a38ed58f56..e1c1cd3057 100644
--- a/libraries/classes/Config/Settings/Server.php
+++ b/libraries/classes/Config/Settings/Server.php
@@ -576,6 +576,17 @@ final class Server
}
/**
+ * @return static
+ */
+ public function withSSL(bool $ssl): Server
+ {
+ $clone = clone $this;
+ $clone->ssl = $ssl;
+
+ return $clone;
+ }
+
+ /**
* @param array<int|string, mixed> $server
*/
private function setHost(array $server): string
diff --git a/libraries/classes/DatabaseInterface.php b/libraries/classes/DatabaseInterface.php
index df74bdbe13..dffa2d285a 100644
--- a/libraries/classes/DatabaseInterface.php
+++ b/libraries/classes/DatabaseInterface.php
@@ -7,6 +7,7 @@ declare(strict_types=1);
namespace PhpMyAdmin;
+use PhpMyAdmin\Config\Settings\Server;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Database\DatabaseList;
use PhpMyAdmin\Dbal\DatabaseName;
@@ -1860,7 +1861,7 @@ class DatabaseInterface implements DbalInterface
$target = $mode;
}
- if ($user === null || $password === null) {
+ if ($user === null || $password === null || ! is_array($server)) {
trigger_error(
__('Missing connection parameters!'),
E_USER_WARNING
@@ -1869,9 +1870,11 @@ class DatabaseInterface implements DbalInterface
return false;
}
+ $server['host'] = ! is_string($server['host']) || $server['host'] === '' ? 'localhost' : $server['host'];
+
// Do not show location and backtrace for connection errors
$GLOBALS['errorHandler']->setHideLocation(true);
- $result = $this->extension->connect($user, $password, $server);
+ $result = $this->extension->connect($user, $password, new Server($server));
$GLOBALS['errorHandler']->setHideLocation(false);
if ($result) {
diff --git a/libraries/classes/Dbal/DbiExtension.php b/libraries/classes/Dbal/DbiExtension.php
index 1061d026ce..ebe8dd95fc 100644
--- a/libraries/classes/Dbal/DbiExtension.php
+++ b/libraries/classes/Dbal/DbiExtension.php
@@ -7,25 +7,19 @@ declare(strict_types=1);
namespace PhpMyAdmin\Dbal;
+use PhpMyAdmin\Config\Settings\Server;
+
/**
* Contract for every database extension supported by phpMyAdmin
*/
interface DbiExtension
{
/**
- * connects to the database server
- *
- * @param string $user user name
- * @param string $password user password
- * @param array $server host/port/socket/persistent
+ * Connects to the database server.
*
- * @return mixed false on error or a connection object on success
+ * @return object|bool A connection object on success or false on failure.
*/
- public function connect(
- $user,
- $password,
- array $server
- );
+ public function connect(string $user, string $password, Server $server);
/**
* selects given database
diff --git a/libraries/classes/Dbal/DbiMysqli.php b/libraries/classes/Dbal/DbiMysqli.php
index 4cd02ba4dc..9a2769dc6c 100644
--- a/libraries/classes/Dbal/DbiMysqli.php
+++ b/libraries/classes/Dbal/DbiMysqli.php
@@ -10,6 +10,7 @@ namespace PhpMyAdmin\Dbal;
use mysqli;
use mysqli_sql_exception;
use mysqli_stmt;
+use PhpMyAdmin\Config\Settings\Server;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Query\Utilities;
@@ -43,22 +44,12 @@ use const MYSQLI_USE_RESULT;
class DbiMysqli implements DbiExtension
{
/**
- * connects to the database server
+ * Connects to the database server.
*
- * @param string $user mysql user name
- * @param string $password mysql user password
- * @param array $server host/port/socket/persistent
- *
- * @return mysqli|bool false on error or a mysqli object on success
+ * @return object|bool A connection object on success or false on failure.
*/
- public function connect($user, $password, array $server)
+ public function connect(string $user, string $password, Server $server)
{
- if ($server) {
- $server['host'] = empty($server['host'])
- ? 'localhost'
- : $server['host'];
- }
-
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = mysqli_init();
@@ -70,44 +61,46 @@ class DbiMysqli implements DbiExtension
$client_flags = 0;
/* Optionally compress connection */
- if ($server['compress'] && defined('MYSQLI_CLIENT_COMPRESS')) {
+ if ($server->compress && defined('MYSQLI_CLIENT_COMPRESS')) {
$client_flags |= MYSQLI_CLIENT_COMPRESS;
}
+ // phpcs:disable Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
/* Optionally enable SSL */
- if ($server['ssl']) {
+ if ($server->ssl) {
$client_flags |= MYSQLI_CLIENT_SSL;
if (
- ! empty($server['ssl_key']) ||
- ! empty($server['ssl_cert']) ||
- ! empty($server['ssl_ca']) ||
- ! empty($server['ssl_ca_path']) ||
- ! empty($server['ssl_ciphers'])
+ $server->ssl_key !== null && $server->ssl_key !== '' ||
+ $server->ssl_cert !== null && $server->ssl_cert !== '' ||
+ $server->ssl_ca !== null && $server->ssl_ca !== '' ||
+ $server->ssl_ca_path !== null && $server->ssl_ca_path !== '' ||
+ $server->ssl_ciphers !== null && $server->ssl_ciphers !== ''
) {
$mysqli->ssl_set(
- $server['ssl_key'] ?? '',
- $server['ssl_cert'] ?? '',
- $server['ssl_ca'] ?? '',
- $server['ssl_ca_path'] ?? '',
- $server['ssl_ciphers'] ?? ''
+ $server->ssl_key ?? '',
+ $server->ssl_cert ?? '',
+ $server->ssl_ca ?? '',
+ $server->ssl_ca_path ?? '',
+ $server->ssl_ciphers ?? ''
);
}
- /*
+ /**
* disables SSL certificate validation on mysqlnd for MySQL 5.6 or later
+ *
* @link https://bugs.php.net/bug.php?id=68344
* @link https://github.com/phpmyadmin/phpmyadmin/pull/11838
*/
- if (! $server['ssl_verify']) {
- $mysqli->options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, (int) $server['ssl_verify']);
+ if (! $server->ssl_verify) {
+ $mysqli->options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, (int) $server->ssl_verify);
$client_flags |= MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT;
}
}
if ($GLOBALS['cfg']['PersistentConnections']) {
- $host = 'p:' . $server['host'];
+ $host = 'p:' . $server->host;
} else {
- $host = $server['host'];
+ $host = $server->host;
}
try {
@@ -116,8 +109,8 @@ class DbiMysqli implements DbiExtension
$user,
$password,
'',
- $server['port'],
- (string) $server['socket'],
+ (int) $server->port,
+ $server->socket,
$client_flags
);
} catch (mysqli_sql_exception $exception) {
@@ -129,12 +122,10 @@ class DbiMysqli implements DbiExtension
* - #2001 - SSL Connection is required. Please specify SSL options and retry.
* - #9002 - SSL connection is required. Please specify SSL options and retry.
*/
- // phpcs:disable Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
$error_number = $mysqli->connect_errno;
$error_message = $mysqli->connect_error;
- // phpcs:enable
if (
- ! $server['ssl']
+ ! $server->ssl
&& ($error_number == 3159
|| (($error_number == 2001 || $error_number == 9002)
&& stripos($error_message, 'SSL Connection is required') !== false))
@@ -143,12 +134,11 @@ class DbiMysqli implements DbiExtension
__('SSL connection enforced by server, automatically enabling it.'),
E_USER_WARNING
);
- $server['ssl'] = true;
- return self::connect($user, $password, $server);
+ return self::connect($user, $password, $server->withSSL(true));
}
- if ($error_number === 1045 && $server['hide_connection_errors']) {
+ if ($error_number === 1045 && $server->hide_connection_errors) {
trigger_error(
sprintf(
__(
@@ -169,6 +159,8 @@ class DbiMysqli implements DbiExtension
return false;
}
+ // phpcs:enable
+
$mysqli->options(MYSQLI_OPT_LOCAL_INFILE, (int) defined('PMA_ENABLE_LDI'));
mysqli_report(MYSQLI_REPORT_OFF);