From 48d01837a0a5725d2779f30d20478e77572e9ac5 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 06 Apr 2015 06:00:09 -0400
Subject: [PATCH] Fix tables listing routine on mysql and postgres so it skips system or other database tables and views (#1490337)

---
 program/lib/Roundcube/rcube_db_mysql.php |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/program/lib/Roundcube/rcube_db_mysql.php b/program/lib/Roundcube/rcube_db_mysql.php
index dd28c25..616d175 100644
--- a/program/lib/Roundcube/rcube_db_mysql.php
+++ b/program/lib/Roundcube/rcube_db_mysql.php
@@ -150,6 +150,30 @@
     }
 
     /**
+     * Returns list of tables in a database
+     *
+     * @return array List of all tables of the current database
+     */
+    public function list_tables()
+    {
+        // get tables if not cached
+        if ($this->tables === null) {
+            // first fetch current database name
+            $d = $this->query("SELECT database()");
+            $d = $this->fetch_array($d);
+
+            // get list of tables in current database
+            $q = $this->query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES"
+                . " WHERE TABLE_SCHEMA = ? AND TABLE_TYPE = 'BASE TABLE'"
+                . " ORDER BY TABLE_NAME", $d ? $d[0] : '');
+
+            $this->tables = $q ? $q->fetchAll(PDO::FETCH_COLUMN, 0) : array();
+        }
+
+        return $this->tables;
+    }
+
+    /**
      * Get database runtime variables
      *
      * @param string $varname Variable name

--
Gitblit v1.9.1