From 273547b03794741a03418a4819fab041108f78f6 Mon Sep 17 00:00:00 2001
From: vogelor <vogelor@ispconfig3>
Date: Sun, 7 Dec 2008 16:35:04 +0000
Subject: [PATCH]

---
 interface/web/sites/database_phpmyadmin.php   | 89 +++++++++++++++++++
 .../web/sites/templates/database_list.htm     |  1 +
 .../default/css/screen/content_ispc.css       |  1 +
 .../monitor_core_module.inc.php               | 66 +++++++-------
 4 files changed, 124 insertions(+), 33 deletions(-)
 create mode 100644 interface/web/sites/database_phpmyadmin.php

diff --git a/interface/web/sites/database_phpmyadmin.php b/interface/web/sites/database_phpmyadmin.php
new file mode 100644
index 000000000..eeb840fc2
--- /dev/null
+++ b/interface/web/sites/database_phpmyadmin.php
@@ -0,0 +1,89 @@
+<?php
+/*
+Copyright (c) 2008, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('sites');
+
+/* get the id of the database (must be int!) */
+if (!isset($_GET['id'])){
+    die ("No DB selected!");
+}
+$databaseId = intval($_GET['id']);
+
+/*
+ * Get the data to connect to the database
+ */
+$dbData = $app->dbmaster->queryOneRecord(
+    "SELECT sys_userid, sys_groupid, sys_perm_user, sys_perm_group, server_id, database_name, database_user, database_password FROM web_database WHERE database_id = " .
+    $databaseId);
+
+/*
+ * We also need the data of the server
+ */
+$serverId = intval($dbData['server_id']);
+if ($serverId == 0){
+    die ("No DB-Server found!");
+}
+
+$serverData = $app->dbmaster->queryOneRecord(
+    "SELECT server_name FROM server WHERE server_id = " .
+    $serverId);
+
+/*
+ * Check if the user has the right to open phpmyadmin with this database
+ * (we will check only users, not admins)
+ */
+if($_SESSION["s"]["user"]["typ"] == 'user') {
+	/* Get the group of the client */
+	$client_group_id = $_SESSION["s"]["user"]["default_group"];
+	/* compare both */
+	if ($dbData['sys_groupid'] != $client_group_id){
+	    die ("You don't have the right to access this db!");
+	}
+}
+
+/*
+ * Now generate the login-Form
+ */
+echo '
+starting phpMyAdmin...<br>
+<form method="post" action="http://' . $serverData['server_name'] . '/phpmyadmin/index.php" name="login_form" target="_top" style="visibility:hidden">
+    <input type="text" name="pma_username" id="input_username" value="' .  $dbData['database_user'] . '" />
+    <input type="password" name="pma_password" id="input_password" value="' . $dbData['database_password'] . '" size="24" class="textfield" />
+</form>
+<script type="text/javascript" language="javascript">
+<!--
+document.forms["login_form"].submit();
+//-->
+</script>';
+?>
\ No newline at end of file
diff --git a/interface/web/sites/templates/database_list.htm b/interface/web/sites/templates/database_list.htm
index 1a4435cef..bebdd0a6f 100644
--- a/interface/web/sites/templates/database_list.htm
+++ b/interface/web/sites/templates/database_list.htm
@@ -40,6 +40,7 @@
             <td class="tbl_col_database_name"><a href="#" onClick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="database_name"}</a></td>
             <td class="tbl_col_buttons">
               <div class="buttons icons16">    
+			    <a class="icons16 icoDbAdmin" href="sites/database_phpmyadmin.php?id={tmpl_var name='id'}" target="phpmyadmin"><span>{tmpl_var name='admin_txt'}</span></a>
                 <a class="icons16 icoEdit" href="javascript: loadContent('sites/database_edit.php?id={tmpl_var name='id'}');"><span>{tmpl_var name='edit_txt'}</span></a>
                 <a class="icons16 icoDelete" href="javascript: del_record('sites/database_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
               </div>
diff --git a/interface/web/themes/default/css/screen/content_ispc.css b/interface/web/themes/default/css/screen/content_ispc.css
index a03fbe0ae..4a33732d5 100644
--- a/interface/web/themes/default/css/screen/content_ispc.css
+++ b/interface/web/themes/default/css/screen/content_ispc.css
@@ -287,5 +287,6 @@
 	.icons16.icoDelete { background-image: url("../../icons/x16/minus_circle_frame.png"); }
 	.icons16.icoFilter { background-image: url(../../icons/x16/funnel.png); }
 	.icons16.icoEdit { background-image: url("../../icons/x16/wrench.png"); }
+	.icons16.icoDbAdmin { background-image: url("../../icons/x16/database.png"); }
 }
 
diff --git a/server/mods-available/monitor_core_module.inc.php b/server/mods-available/monitor_core_module.inc.php
index 322209450..a7d0d5113 100644
--- a/server/mods-available/monitor_core_module.inc.php
+++ b/server/mods-available/monitor_core_module.inc.php
@@ -156,9 +156,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -220,9 +220,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -271,9 +271,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -316,9 +316,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -440,9 +440,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -520,9 +520,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -566,9 +566,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -649,9 +649,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -709,9 +709,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -746,9 +746,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -783,9 +783,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -820,9 +820,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -858,9 +858,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -930,9 +930,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -964,9 +964,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -998,9 +998,9 @@ class monitor_core_module {
         $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
             "VALUES (".
         $server_id . ", " .
-            "'" . $app->db->quote($type) . "', " .
+            "'" . $app->dbmaster->quote($type) . "', " .
         time() . ", " .
-            "'" . $app->db->quote(serialize($data)) . "', " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
             "'" . $state . "'" .
             ")";
         $app->dbmaster->query($sql);
@@ -1111,7 +1111,7 @@ class monitor_core_module {
         $old = $now - ($min * 60) - ($hour * 60 * 60) - ($days * 24 * 60 * 60);
         $sql = "DELETE FROM monitor_data " .
             "WHERE " .
-            "type =" . "'" . $app->db->quote($type) . "' " .
+            "type =" . "'" . $app->dbmaster->quote($type) . "' " .
             "AND " .
             "created < " . $old;
         $app->dbmaster->query($sql);
-- 
GitLab