Support connecting to MySQL via SSL
This commit is contained in:
parent
cac523402a
commit
42eec7d728
|
@ -14,15 +14,21 @@ if (!defined("DRIVER")) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function connect($server = "", $username = "", $password = "", $database = null, $port = null, $socket = null) {
|
function connect($server = "", $username = "", $password = "", $database = null, $port = null, $socket = null) {
|
||||||
|
global $adminer;
|
||||||
mysqli_report(MYSQLI_REPORT_OFF); // stays between requests, not required since PHP 5.3.4
|
mysqli_report(MYSQLI_REPORT_OFF); // stays between requests, not required since PHP 5.3.4
|
||||||
list($host, $port) = explode(":", $server, 2); // part after : is used for port or socket
|
list($host, $port) = explode(":", $server, 2); // part after : is used for port or socket
|
||||||
|
$ssl = $adminer->connectSsl();
|
||||||
|
if ($ssl) {
|
||||||
|
$this->ssl_set($ssl['key'], $ssl['cert'], $ssl['ca'], '', '');
|
||||||
|
}
|
||||||
$return = @$this->real_connect(
|
$return = @$this->real_connect(
|
||||||
($server != "" ? $host : ini_get("mysqli.default_host")),
|
($server != "" ? $host : ini_get("mysqli.default_host")),
|
||||||
($server . $username != "" ? $username : ini_get("mysqli.default_user")),
|
($server . $username != "" ? $username : ini_get("mysqli.default_user")),
|
||||||
($server . $username . $password != "" ? $password : ini_get("mysqli.default_pw")),
|
($server . $username . $password != "" ? $password : ini_get("mysqli.default_pw")),
|
||||||
$database,
|
$database,
|
||||||
(is_numeric($port) ? $port : ini_get("mysqli.default_port")),
|
(is_numeric($port) ? $port : ini_get("mysqli.default_port")),
|
||||||
(!is_numeric($port) ? $port : $socket)
|
(!is_numeric($port) ? $port : $socket),
|
||||||
|
($ssl ? 64 : 0) // 64 - MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT (not available before PHP 5.6.16)
|
||||||
);
|
);
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
@ -223,7 +229,22 @@ if (!defined("DRIVER")) {
|
||||||
var $extension = "PDO_MySQL";
|
var $extension = "PDO_MySQL";
|
||||||
|
|
||||||
function connect($server, $username, $password) {
|
function connect($server, $username, $password) {
|
||||||
$this->dsn("mysql:charset=utf8;host=" . str_replace(":", ";unix_socket=", preg_replace('~:(\\d)~', ';port=\\1', $server)), $username, $password);
|
global $adminer;
|
||||||
|
$options = array();
|
||||||
|
$ssl = $adminer->connectSsl();
|
||||||
|
if ($ssl) {
|
||||||
|
$options = array(
|
||||||
|
PDO::MYSQL_ATTR_SSL_KEY => $ssl['key'],
|
||||||
|
PDO::MYSQL_ATTR_SSL_CERT => $ssl['cert'],
|
||||||
|
PDO::MYSQL_ATTR_SSL_CA => $ssl['ca'],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$this->dsn(
|
||||||
|
"mysql:charset=utf8;host=" . str_replace(":", ";unix_socket=", preg_replace('~:(\\d)~', ';port=\\1', $server)),
|
||||||
|
$username,
|
||||||
|
$password,
|
||||||
|
$options
|
||||||
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,12 @@ class Adminer {
|
||||||
return array(SERVER, $_GET["username"], get_password());
|
return array(SERVER, $_GET["username"], get_password());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get SSL connection options
|
||||||
|
* @return array array("key" => filename, "cert" => filename, "ca" => filename) or null
|
||||||
|
*/
|
||||||
|
function connectSsl() {
|
||||||
|
}
|
||||||
|
|
||||||
/** Get key used for permanent login
|
/** Get key used for permanent login
|
||||||
* @param bool
|
* @param bool
|
||||||
* @return string cryptic string which gets combined with password or false in case of an error
|
* @return string cryptic string which gets combined with password or false in case of an error
|
||||||
|
|
|
@ -12,9 +12,9 @@ if (extension_loaded('pdo')) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function dsn($dsn, $username, $password) {
|
function dsn($dsn, $username, $password, $options = array()) {
|
||||||
try {
|
try {
|
||||||
parent::__construct($dsn, $username, $password);
|
parent::__construct($dsn, $username, $password, $options);
|
||||||
} catch (Exception $ex) {
|
} catch (Exception $ex) {
|
||||||
auth_error(h($ex->getMessage()));
|
auth_error(h($ex->getMessage()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ PostgreSQL: Cast to string when searching using LIKE (bug #325)
|
||||||
PostgreSQL: Don't treat interval type as number (bug #474)
|
PostgreSQL: Don't treat interval type as number (bug #474)
|
||||||
PostgreSQL: Fix condition for selecting no rows
|
PostgreSQL: Fix condition for selecting no rows
|
||||||
PostgreSQL: Support TRUNCATE+INSERT export
|
PostgreSQL: Support TRUNCATE+INSERT export
|
||||||
|
Customization: Support connecting to MySQL via SSL
|
||||||
|
|
||||||
Adminer 4.6.0 (released 2018-02-05):
|
Adminer 4.6.0 (released 2018-02-05):
|
||||||
Fix counting selected rows after going back to select page
|
Fix counting selected rows after going back to select page
|
||||||
|
|
|
@ -13,6 +13,9 @@ class Adminer {
|
||||||
return array(SERVER, $_GET["username"], get_password());
|
return array(SERVER, $_GET["username"], get_password());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function connectSsl() {
|
||||||
|
}
|
||||||
|
|
||||||
function permanentLogin($create = false) {
|
function permanentLogin($create = false) {
|
||||||
return password_file($create);
|
return password_file($create);
|
||||||
}
|
}
|
||||||
|
|
24
plugins/login-ssl.php
Normal file
24
plugins/login-ssl.php
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/** Connect to MySQL using SSL
|
||||||
|
* @link https://www.adminer.org/plugins/#use
|
||||||
|
* @author Jakub Vrana, https://www.vrana.cz/
|
||||||
|
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||||
|
* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||||
|
*/
|
||||||
|
class AdminerLoginSsl {
|
||||||
|
/** @access protected */
|
||||||
|
var $ssl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array array("key" => filename, "cert" => filename, "ca" => filename)
|
||||||
|
*/
|
||||||
|
function __construct($ssl) {
|
||||||
|
$this->ssl = $ssl;
|
||||||
|
}
|
||||||
|
|
||||||
|
function connectSsl() {
|
||||||
|
return $this->ssl;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -97,6 +97,11 @@ class AdminerPlugin extends Adminer {
|
||||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function connectSsl() {
|
||||||
|
$args = func_get_args();
|
||||||
|
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||||
|
}
|
||||||
|
|
||||||
function permanentLogin($create = false) {
|
function permanentLogin($create = false) {
|
||||||
$args = func_get_args();
|
$args = func_get_args();
|
||||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||||
|
|
Loading…
Reference in a new issue