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) {
|
||||
global $adminer;
|
||||
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
|
||||
$ssl = $adminer->connectSsl();
|
||||
if ($ssl) {
|
||||
$this->ssl_set($ssl['key'], $ssl['cert'], $ssl['ca'], '', '');
|
||||
}
|
||||
$return = @$this->real_connect(
|
||||
($server != "" ? $host : ini_get("mysqli.default_host")),
|
||||
($server . $username != "" ? $username : ini_get("mysqli.default_user")),
|
||||
($server . $username . $password != "" ? $password : ini_get("mysqli.default_pw")),
|
||||
$database,
|
||||
(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;
|
||||
}
|
||||
|
@ -223,7 +229,22 @@ if (!defined("DRIVER")) {
|
|||
var $extension = "PDO_MySQL";
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,12 @@ class Adminer {
|
|||
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
|
||||
* @param bool
|
||||
* @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 {
|
||||
parent::__construct($dsn, $username, $password);
|
||||
parent::__construct($dsn, $username, $password, $options);
|
||||
} catch (Exception $ex) {
|
||||
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: Fix condition for selecting no rows
|
||||
PostgreSQL: Support TRUNCATE+INSERT export
|
||||
Customization: Support connecting to MySQL via SSL
|
||||
|
||||
Adminer 4.6.0 (released 2018-02-05):
|
||||
Fix counting selected rows after going back to select page
|
||||
|
|
|
@ -13,6 +13,9 @@ class Adminer {
|
|||
return array(SERVER, $_GET["username"], get_password());
|
||||
}
|
||||
|
||||
function connectSsl() {
|
||||
}
|
||||
|
||||
function permanentLogin($create = false) {
|
||||
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);
|
||||
}
|
||||
|
||||
function connectSsl() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function permanentLogin($create = false) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
|
|
Loading…
Reference in a new issue