}
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;
}
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;
}
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
}
}
- 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()));
}
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
return array(SERVER, $_GET["username"], get_password());
}
+ function connectSsl() {
+ }
+
function permanentLogin($create = false) {
return password_file($create);
}
--- /dev/null
+<?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;
+ }
+
+}
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);