From a4e997fe60d38da3e7b5dffc44910a5ca724c801 Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Mon, 11 Nov 2019 12:10:46 +0100 Subject: [PATCH] PostgreSQL, Oracle: Set schema for EXPLAIN queries in SQL command (bug #706) --- adminer/drivers/mysql.inc.php | 3 ++- adminer/drivers/oracle.inc.php | 7 +++++-- adminer/drivers/pgsql.inc.php | 7 +++++-- adminer/include/version.inc.php | 2 +- adminer/sql.inc.php | 3 +++ changes.txt | 3 +++ 6 files changed, 19 insertions(+), 6 deletions(-) diff --git a/adminer/drivers/mysql.inc.php b/adminer/drivers/mysql.inc.php index 50834e76..07c96ab0 100644 --- a/adminer/drivers/mysql.inc.php +++ b/adminer/drivers/mysql.inc.php @@ -986,9 +986,10 @@ if (!defined("DRIVER")) { /** Set current schema * @param string + * @param Min_DB * @return bool */ - function set_schema($schema) { + function set_schema($schema, $connection2 = null) { return true; } diff --git a/adminer/drivers/oracle.inc.php b/adminer/drivers/oracle.inc.php index ff491b33..0395f850 100644 --- a/adminer/drivers/oracle.inc.php +++ b/adminer/drivers/oracle.inc.php @@ -367,9 +367,12 @@ AND c_src.TABLE_NAME = " . q($table); return $connection->result("SELECT sys_context('USERENV', 'SESSION_USER') FROM dual"); } - function set_schema($scheme) { + function set_schema($scheme, $connection2 = null) { global $connection; - return $connection->query("ALTER SESSION SET CURRENT_SCHEMA = " . idf_escape($scheme)); + if (!$connection2) { + $connection2 = $connection; + } + return $connection2->query("ALTER SESSION SET CURRENT_SCHEMA = " . idf_escape($scheme)); } function show_variables() { diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index 7a436a51..21b0002d 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -689,9 +689,12 @@ AND typelem = 0" return $connection->result("SELECT current_schema()"); } - function set_schema($schema) { + function set_schema($schema, $connection2 = null) { global $connection, $types, $structured_types; - $return = $connection->query("SET search_path TO " . idf_escape($schema)); + if (!$connection2) { + $connection2 = $connection; + } + $return = $connection2->query("SET search_path TO " . idf_escape($schema)); foreach (types() as $type) { //! get types from current_schemas('t') if (!isset($types[$type])) { $types[$type] = 0; diff --git a/adminer/include/version.inc.php b/adminer/include/version.inc.php index 9b916bae..e77123c4 100644 --- a/adminer/include/version.inc.php +++ b/adminer/include/version.inc.php @@ -1,2 +1,2 @@ select_db(DB); + if ($_GET["ns"] != "") { + set_schema($_GET["ns"], $connection2); + } } $commands = 0; $errors = array(); diff --git a/changes.txt b/changes.txt index 3939543b..15207441 100644 --- a/changes.txt +++ b/changes.txt @@ -1,3 +1,6 @@ +Adminer 4.7.5-dev: +PostgreSQL, Oracle: Set schema for EXPLAIN queries in SQL command (bug #706) + Adminer 4.7.4 (released 2019-10-22): Fix XSS if Adminer is accessible at URL /data: